【问题标题】:Flutter - Image repeat only scales to screen size, not parent sizeFlutter - 图像重复仅缩放到屏幕大小,而不是父大小
【发布时间】:2018-12-16 07:33:44
【问题描述】:

我有一个允许用户拖动比例以选择值的小部件,类似于基本的 Slider 小部件,但“反转”即值滑块位置是固定的,您可以在后台移动比例来调整值。
比例应该是无限的/无限的,我想我可以使用一个小图像+ImageRepeat.repeatX。但它似乎只缩放到最初可见的屏幕,而不是实际的父宽度。

有没有办法强制它填充整个父母宽度或在translate 之后更新?

小例子:

import 'package:flutter/material.dart';

class SliderTest extends StatefulWidget {
@override
  _SliderTestState createState() => _SliderTestState();
}

class _SliderTestState extends State<SliderTest> {
double foo = 100.0;

@override
Widget build(BuildContext context) {
return new Scaffold(
  appBar: new AppBar(
    title: new Text('SliderTest'),
  ),
  body: new Builder(builder: (context) {
    return new Center(
      child: new Column(
        children: <Widget>[
          new Text("$foo"),
          new GestureDetector(
            onHorizontalDragUpdate: (v) { setState(() { foo += v.primaryDelta; }); },
            child: new Container(
              width: 5000.0,
              height: 80.0,
              color: Colors.green,
              child: new Transform.translate(
                offset: new Offset(foo, 0.0),
                child: new Image.network('http://4d94o75ofvdkz8tr3396n8cn.wpengine.netdna-cdn.com/wp-content/uploads/Scale_4x.jpg', repeat: ImageRepeat.repeatX,)
              )
            )
          )
        ],
      ),
    );
  })
);
}
}

Container 显然足够宽,如绿色背景颜色所见,但转换后的图像仅缩放到初始屏幕宽度而不会超出。 有没有办法在不使用巨大的图像文件的情况下解决这个问题?

【问题讨论】:

    标签: flutter


    【解决方案1】:

    这实际上是错误的。 repeat: ImageRepeat.repeatX 填充父级,而不是屏幕。

    问题是即使你用5000.0 定义了你的父级,它实际上并没有那个宽度。正如Column 为其子项添加了最大宽度约束。

    您需要添加一个中间小部件,内部可以更大。 这可以是OverflowBoxSingleChildScrolLView,甚至是ConstrainedBox

    【讨论】:

    • 这很有趣,感谢您指出!如果我猜给定的宽度被忽略了,我会期望颤振会发出某种警告?!第一次尝试OverflowBox 导致底部异常无限溢出,明天我有更多时间再试一次。感谢您的提示,非常感谢!
    • 许多 UI 小部件(按钮、listtile 等)都包含此类警告。但是Container 级别太低了。虽然您可以使用 SafeArea 手动添加此警告
    • 您能告诉我您将OverflowBox 放在小部件树Rémi 的什么位置吗?如果没有无限溢出异常,我似乎无法使其工作。
    • 容器正上方。
    • 不幸的是我总是得到:flutter: Another exception was thrown: RenderConstrainedOverflowBox object was given an infinite size during layout. flutter: Another exception was thrown: RenderPointerListener object was given an infinite size during layout. flutter: Another exception was thrown: RenderSemanticsGestureHandler object was given an infinite size during layout. flutter: Another exception was thrown: Rect argument contained a NaN value. flutter: Another exception was thrown: A RenderFlex overflowed by Infinity pixels on the bottom.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2023-03-22
    • 2014-06-21
    • 1970-01-01
    • 2011-09-18
    • 2013-11-28
    • 1970-01-01
    相关资源
    最近更新 更多