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