展开并在行中展开时,如何在不更改布局的情况下包装小部件列表?

Posted

技术标签:

【中文标题】展开并在行中展开时,如何在不更改布局的情况下包装小部件列表?【英文标题】:How to wrap a List of Widgets without changing the layout when unwrapped and spread in a Row? 【发布时间】:2022-01-24 00:46:44 【问题描述】:

目前,以下结构为我提供了预期的布局:

Consumer<State>(
  builder(context, state, child) => Row(
    children: [
      Widget1(...), // fixed width
      ...List.generate(state.length, (index) => Expanded(child: Widget2(index, state))),
    ]
  )
)

Widget1 不需要连接到状态,因此我不希望它在更改时重新呈现。如果List.generate 可以与Consumer 挂钩,那就太好了,但builder 需要返回单个小部件,而不是小部件列表。

我尝试在列表周围使用Wrap 小部件,并将其连接到Consumer。这实现了我不重新渲染 Widget1 的目标,但它改变了布局 - Widget2 不再扩展以填充剩余空间。

【问题讨论】:

【参考方案1】:

这是一个例子:

Row(
  children: [
    Widget1(...), // fixed width
      Consumer<State>(
       builder: (context, state, child) 
          return Expanded(
                   child: Row(
                     children: List.generate(
                       state.length,
                       (index) 
                         return Expanded(
                           child: Widget2(index, state),
                         );
                       ,
                     ),
                   ),
                 );
               ,
             ),
           ],
         ),

【讨论】:

以上是关于展开并在行中展开时,如何在不更改布局的情况下包装小部件列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不更改布局的情况下跳过/处理 Tailwind 网格中的空单元格? [关闭]

如何在不重建所有 RemoteView 的情况下部分更新应用小部件中的视图

如何在不使用自动收缩的情况下使用不同 iPhone 尺寸的自动布局更改字体大小 [重复]

自动布局打开时如何以编程方式更改 UIView 的位置

具有自动布局的多行UILabel,如何在不更改标签框架的情况下根据内容调整字体大小?

如何在不创建新的小部件树分支的情况下重用相同的布局屏幕