Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 根据内容大小响应列到行_Flutter - Fatal编程技术网

Flutter 根据内容大小响应列到行

Flutter 根据内容大小响应列到行,flutter,Flutter,我想在flatter中构建一个响应性小部件,将按钮(主要是两个)对齐在同一行中,如果它们合适,如果不合适,则应将它们放置在单独的行中。我们需要这样一种行为,在“列模式”和“行模式”中,它们填充父对象的全部宽度,并且它们应该填充可用空间的每一半。我们会这样使用它: CustomResponsiveWrap( children: [ Button('Ok'), Button('not Ok')], spacing: 10); 以下是两张图片,说明了在列和行模式下的外观:

我想在flatter中构建一个响应性小部件,将按钮(主要是两个)对齐在同一行中,如果它们合适,如果不合适,则应将它们放置在单独的行中。我们需要这样一种行为,在“列模式”和“行模式”中,它们填充父对象的全部宽度,并且它们应该填充可用空间的每一半。我们会这样使用它:

CustomResponsiveWrap(
  children: [
    Button('Ok'),
    Button('not Ok')],
  spacing: 10);
以下是两张图片,说明了在列和行模式下的外观:

起初我尝试使用Wrap,但这不允许对行为进行微调。我相信普通的MediaQuery也不起作用。按钮的文本内容在不同语言中是不同的,实际大小很难估计(例如,使用操作系统缩放、其他字母中的特殊字符等)

之后,我尝试使用
CustomMultiChildLayout
。我认为对于我想要的行为,有必要获得行布局中按钮的大小,以确定行模式是否可行,如果不可行,我必须“重新布局”到列模式。这在
CustomMultiChildLayout
中是不可能的,因为
MultiChildLayoutDelegate
在您对一个孩子执行
layoutChild
时会抱怨,而不是一次(我可以用我的方法执行多次)

我现在通过复制所有
CustomMultiChildLayout
代码并删除一个断言来解决这个问题,该断言测试一个孩子对
layoutChild
的多个调用,并且有效。不幸的是,子类化没有起作用,我觉得解决方案相当令人不满意

我现在的问题是:是否有一个更适合用例的flutter小部件/呈现类,或者是否有一些方法可以使用我不知道/或不知道如何使用的现有小部件来实现这一点?最后一点,除了性能下降之外,对子级的多个布局调用还有什么影响(我们只有两个,也许三个带文本和边框的按钮,所以性能方面对我们来说应该不会太差)

更新
对于所有对我现在如何做感兴趣的人。我已经把它的想法放进了这个飞镖垫。它创建了一个类似于
CustomMultiChildLayout
的小部件,支持重新播放。我确实保留了它的总体结构。我喜欢LayoutIDs,而不是“摆弄”ContainerRenderObjectMixin的下一个/上一个子函数,你说“Wrap不允许微调行为”是什么意思?当使用Wrap时,当项目不适合时,它会使用第二行,但它不会强迫每个子函数填充整个宽度,当它需要两行以上时。From:
[…]但父对象的大小不能取决于子对象的大小。
因此,您可能不应该在该用例中使用此小部件。Afaik a可以帮你,因为它可以让孩子的大小决定自己的大小。虽然这似乎是一种非常低级的方法。@LinuCC啊,我没有看到那句话。所以我的“自制”解决方案现在使用RenderBox,似乎这是唯一的方法。谢谢:)你说“包裹不允许微调行为”是什么意思?使用包裹时,当项目不合适时,它会使用第二行,但当需要两行以上时,它不会强制每个子项填充整个宽度。发件人:
[…]但是父对象的大小不能依赖于子对象的大小。
因此,在这种情况下,您可能不应该使用此小部件。Afaik a可以帮你,因为它可以让孩子的大小决定自己的大小。虽然这似乎是一种非常低级的方法。@LinuCC啊,我没有看到那句话。所以我的“自制”解决方案现在使用RenderBox,似乎这是唯一的方法。谢谢:)