¿Existe una forma simple (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 método de build (obviamente), por lo que tendría que posponerse hasta la compilación posterior. ¿Hay un lugar preferido para poner lógica como esta?
Esta es una respuesta complementaria que muestra la implementación de un par de las soluciones mencionadas.
Si tiene un solo widget, puede usar un widget FractionallySizedBox para especificar un porcentaje del espacio disponible para llenar. Aquí, el Container verde está configurado para llenar el 70 % del ancho disponible y el 30 % del alto disponible.

Widget myWidget() { return FractionallySizedBox( widthFactor: 0.7, heightFactor: 0.3, child: Container( color: Colors.green, ), ); } El widget Expanded permite que un widget llene el espacio disponible, horizontalmente si está en una fila o verticalmente si está en una columna. Puede usar la propiedad flex con múltiples widgets para darles peso. Aquí el Container verde ocupa el 70% del ancho y el Container amarillo ocupa el 30% del ancho.

Si desea hacerlo verticalmente, simplemente reemplace Row con Column .
Widget myWidget() { return Row( children: <Widget>[ Expanded( flex: 7, child: Container( color: Colors.green, ), ), Expanded( flex: 3, child: Container( color: Colors.yellow, ), ), ], ); } Aquí está el código main.dart 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 ... }FractionallySizedBox también puede ser útil. También puede leer el ancho de la pantalla directamente desde MediaQuery.of(context).size y crear un cuadro de tamaño basado en eso
MediaQuery.of(context).size.width * 0.65si realmente desea dimensionar como una fracción de la pantalla, independientemente de cuál sea el diseño.
Esto podría ser un poco más claro:
double width = MediaQuery.of(context).size.width; double yourWidth = width * 0.65;Espero que esto haya resuelto tu problema.