展开并连续展开时,如何在不更改布局的情况下包装小部件列表?
How to wrap a List of Widgets without changing the layout when unwrapped and spread in a Row?
目前,以下结构给出了预期的布局:
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
需要 return 一个单独的 Widget,而不是 Widget 列表。
我试过在列表周围使用 Wrap
小部件,并将其连接到 Consumer
。这实现了我不重新渲染 Widget1 的目标,但它改变了布局 - Widget2 不再扩展以填充剩余的 space。
这是一个例子:
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),
);
},
),
),
);
},
),
],
),
目前,以下结构给出了预期的布局:
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
需要 return 一个单独的 Widget,而不是 Widget 列表。
我试过在列表周围使用 Wrap
小部件,并将其连接到 Consumer
。这实现了我不重新渲染 Widget1 的目标,但它改变了布局 - Widget2 不再扩展以填充剩余的 space。
这是一个例子:
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),
);
},
),
),
);
},
),
],
),