Middle
Quais widgets no Flutter fornecem layout adaptativo?
sobes.tech IA
Resposta da IA
MediaQuery- para obter informações sobre o tamanho e orientação do ecrã.LayoutBuilder- para construir widgets com base nas restrições do elemento pai.OrientationBuilder- para construir widgets com base na orientação do ecrã.FractionallySizedBox- para criar elementos com tamanho proporcional ao espaço disponível.AspectRatio- para manter uma proporção de aspecto definida do elemento.ExpandedeFlexible- para distribuir espaço de forma flexível entre elementos emRowouColumn.SingleChildScrollView- para fazer scroll do conteúdo se exceder a área disponível.ListVieweGridView- para mostrar listas e grelhas com capacidade de adaptação.ResponsiveBuilder(do pacoteresponsive_framework) - para construir widgets com base nos pontos de interrupção.FittedBox- para escalar o widget filho de acordo com o tamanho do pai.
// Exemplo de uso do MediaQuery
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
final Size screenSize = MediaQuery.of(context).size;
return Scaffold(
appBar: AppBar(
title: Text('Design responsivo'),
),
body: Center(
child: Text('Tamanho do ecrã: ${screenSize.width.toStringAsFixed(1)}x${screenSize.height.toStringAsFixed(1)}'),
),
);
}
}
// Exemplo de uso do LayoutBuilder
class AdaptiveContainer extends StatelessWidget {
@override
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) {
if (constraints.maxWidth > 600) {
// Ecrã largo
return Container(
color: Colors.blue,
width: 300,
height: 100,
child: Center(child: Text('Largo')),
);
} else {
// Ecrã estreito
return Container(
color: Colors.red,
width: 100,
height: 50,
child: Center(child: Text('Estreito')),
);
}
},
);
}
}
// Exemplo de uso do Expanded
class FlexibleLayout extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Row(
children: <Widget>[
Container(
color: Colors.yellow,
width: 50,
height: 50,
),
Expanded( // Vai ocupar o espaço restante
child: Container(
color: Colors.green,
height: 50,
),
),
],
);
}
}