Flutter: expandido vs flexible


97

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

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í


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.


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 .


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
    );
}

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:


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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.