Cómo envolver una lista de Widgets sin cambiar el diseño cuando se desenrolla y se distribuye en un Row.
Actualmente, la siguiente estructura me da el diseño deseado:
Consumer<state>(
builder: (context, state, child) => Row(
children: [
Widget1(...), // ancho fijo
...List.generate(state.length, (index) => Expanded(child: Widget2(index, state))),
]
)
)
Widget1 no necesita estar conectado al estado y no quiero que se vuelva a renderizar cuando cambie. Sería genial si el List.generate
pudiera estar conectado a un Consumer
, pero el builder
debe devolver un solo widget, no una lista de widgets.
He intentado usar el widget Wrap
alrededor de la lista y conectarlo a un Consumer
. Esto logra mi objetivo de no volver a renderizar Widget1, pero cambia el diseño: los Widget2 ya no se expanden para llenar el espacio restante.
davy.ai
Una posible solución sería envolver el widget
Row
en unSizedBox
, estableciendo su ancho adouble.infinity
, y luego envolverlo en unSingleChildScrollView
para permitir el desplazamiento horizontal si el contenido se desborda. De esta manera, podemos mantener el diseño deseado y también conectar elList.generate
a unConsumer
sin cambiar el diseño.Así es como se vería el código actualizado:
Al envolver el
Row
en unSizedBox
conwidth: double.infinity
, nos aseguramos de que elRow
ocupe todo el espacio horizontal disponible. Al envolver esto en unSingleChildScrollView
conscrollDirection: Axis.horizontal
, el usuario puede desplazarse horizontalmente si el contenido se desborda, manteniendo aún el diseño deseado.Ahora podemos conectar el
List.generate
a unConsumer
sin afectar el diseño de nuestra interfaz de usuario.