Dimensionar elementos al porcentaje del ancho/alto de la pantalla

Resuelto Luke asked hace 7 años • 18 respuestas

¿Existe una forma sencilla (que no sea LayoutBuilder) de dimensionar un elemento en relación con el tamaño de la pantalla (ancho/alto)? Por ejemplo: ¿cómo configuro el ancho de CardView para que sea el 65% del ancho de la pantalla?

No se puede hacer dentro del buildmétodo (obviamente), por lo que debería posponerse hasta después de la compilación. ¿Existe un lugar preferido para colocar una lógica como esta?

Luke avatar Mar 30 '17 22:03 Luke
Aceptado

Esta es una respuesta complementaria que muestra la implementación de algunas de las soluciones mencionadas.

Caja de tamaño fraccional

Si tiene un único widget, puede utilizarlo FractionallySizedBoxpara especificar un porcentaje del espacio disponible para llenar. Aquí el verde Containerestá configurado para llenar el 70% del ancho disponible y el 30% de la altura disponible.

Caja de tamaño fraccional
Widget myWidget() {
  return FractionallySizedBox(
    widthFactor: 0.7,
    heightFactor: 0.3,
    child: Container(
      color: Colors.green,
    ),
  );
}

Expandido

El Expandedwidget permite que un widget llene el espacio disponible, horizontalmente si está en una fila o verticalmente si está en una columna. Puede utilizar la flexpropiedad con varios widgets para darles pesos. Aquí el verde Containerocupa el 70% del ancho y el amarillo el Container30% del ancho.

Expandido

Si desea hacerlo verticalmente, simplemente reemplácelo Rowcon Column.

Widget myWidget() {
  return Row(
    children: <Widget>[
      Expanded(
        flex: 7,
        child: Container(
          color: Colors.green,
        ),
      ),
      Expanded(
        flex: 3,
        child: Container(
          color: Colors.yellow,
        ),
      ),
    ],
  );
}

código suplementario

Aquí está el main.dartcódigo para su referencia.

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("FractionallySizedBox"),
        ),
        body: myWidget(),
      ),
    );
  }
}

// replace with example code above
Widget myWidget() {
  return ...
}
Suragch avatar Dec 07 '2018 05:12 Suragch

FractionallySizedBoxTambién puede ser útil. También puede leer el ancho de la pantalla directamente MediaQuery.of(context).sizey crear un cuadro de tamaño basado en ese

MediaQuery.of(context).size.width * 0.65

si realmente desea ajustar el tamaño a una fracción de la pantalla, independientemente del diseño.

Ian Hickson avatar Mar 31 '2017 00:03 Ian Hickson