Flutter: expandido vs flexible

97

He usado ambos Expandedy Flexiblewidgets y que parecen funcionar misma. ¿Hay alguna diferencia entre los dos que me perdí?


fuente

Respuestas:

116
Scaffold(
  appBar: AppBar(),
  body: Column(
    children: <Widget>[
      Row(
        children: <Widget>[
          buildExpanded(),
          buildFlexible(),
        ],
      ),
      Row(
        children: <Widget>[
          buildExpanded(),
          buildExpanded(),
        ],
      ),
      Row(
        children: <Widget>[
          buildFlexible(),
          buildFlexible(),
        ],
      ),
    ],
  ),
);

ingrese la descripción de la imagen aquí

Raouf Rahiche
fuente
5
Flexible ocupa solo el espacio necesario y Expanded ocupa todo el espacio disponible, respetando el flexfactor. Consulte la documentación del Expandedwidget para obtener más información.
Aleksandar
99

Expanded es solo una abreviatura de Flexible

Usando expandido de esta manera:

Expanded(
  child: Foo(),
);

es estrictamente equivalente a:

Flexible(
  fit: FlexFit.tight,
  child: Foo(),
);

Es posible que desee utilizar Flexibleover Expandedcuando desee un fitdiseño diferente , útil en algunos diseños receptivos.

La diferencia entre FlexFit.tighty FlexFit.loosees que suelta permitirá que su hijo tenga un tamaño máximo, mientras que la tensión lo fuerza a llenar todo el espacio disponible.

Rémi Rousselet
fuente
1
no Maximum sizey Available spacesignifica lo mismo aquí?
CopsOnRoad
No, por tamaño máximo me refiero a algo como tener como hijo de Flexible un ConstrainedBox con un maxHeight dentro de una columna
Rémi Rousselet
25
En palabras sencillas, Flexible.tightobligará a los niños a ocupar todo el espacio disponible y Flexible.loosedejará que los niños hagan lo que quieran. Algunos niños pueden ocupar todo el espacio y otros no, dependiendo de sus tipos.
CopsOnRoad
30

Los widgets de Flexible son WRAP_CONTENT predeterminados, aunque puede cambiarlos mediante el parámetro Ajustar.

El widget en Expandido es MATCH_PARENT , puede cambiarlo usando flex .

Parvesh Khan
fuente
1
¡Gran explicación para los desarrolladores de Android!
SwiftiSwift
18

Expanded- es Flexiblecon ajuste fijo

class Expanded extends Flexible {
    const Expanded({
        Key key,
        int flex = 1,
        @required Widget child,
    }) : super(
        key: key, 
        flex: flex, 
        fit: FlexFit.tight, 
        child: child
    );
}
Andrey Turkovsky
fuente
16

Puede usar Flexible para cambiar el tamaño de los widgets en filas y columnas . Se utiliza principalmente para ajustar el espacio de los diferentes widgets secundarios manteniendo la relación con sus widgets principales.

Mientras tanto, Expanded cambia las restricciones enviadas a los hijos de filas y columnas ; ayuda a llenar los espacios disponibles allí. Por lo tanto, cuando envuelve a su hijo en un widget expandido, llena los espacios vacíos.

Proporcionar estos videos del canal oficial de YouTube de Flutter solo para ayudar a las personas, que podrían buscar esto en el futuro próximo ...

  1. Expandido:

  2. Flexible:

un segundo
fuente
0

Expanded () no es más que Flexible () con

Flexible (fit: FlexFit.tight) = Expanded()

pero, usos flexibles fit :FlexFit.loosepor defecto.

FlexFit.tight = Quiere ajustarse bien al padre ocupando tanto espacio como sea posible.

FlexFit.loose = Quiere encajar suelto en el padre ocupando el menor espacio posible para sí mismo.

Yash
fuente
0

La única diferencia si usa en Flexiblelugar de Expanded, es que Flexiblepermite que su hijo tenga el mismo ancho o menor que el Flexiblemismo, mientras que Expandedobliga a su hijo a tener exactamente el mismo ancho de Expanded. Pero ambos Expandede Flexibleignoran el ancho de sus hijos cuando se dimensionan.

Row(children:[
  Flexible(
    child: Container(color: Colors.red, child: Text('This is a very long text that won’t fit the line.'))),
  Flexible(
    child: Container(color: Colors.green, child: Text(‘Goodbye!’))),
  ]
)

ingrese la descripción de la imagen aquí

Nota : esto significa que es imposible expandir los Rowniños proporcionalmente a sus tamaños. La fila usa el ancho exacto del niño o lo ignora por completo cuando usa Expandedo Flexible.

Paresh Mangukiya
fuente