Flexible se ajusta ao filho
Parte da seção Layouts que se adaptam do Journey de Flutter da Coddy. Lição 3 de 30.
Expanded faz com que um filho preencha o espaço restante, mesmo quando precisa de menos espaço. Um balão de conversa envolvido por Expanded se estende por toda a linha em uma mensagem de uma palavra.
Flexible dá ao filho, no máximo, o mesmo espaço e permite que ele fique menor:
Row(
children: [
const CircleAvatar(child: Text('A')),
Flexible(
child: Container(
color: Colors.grey.shade300,
child: const Text('Hello'),
),
),
],
)Uma mensagem curta recebe um balão pequeno. Uma mensagem longa cresce até chegar à borda da linha e, então, quebra em mais linhas, porque Flexible nunca permite que ela ocupe mais do que o espaço restante.
Use Expanded quando o filho deve preencher o espaço e Flexible quando ele pode preenchê-lo.
Desafio
FácilO balão Hi! se estende por toda a tela. Faça com que cada balão tenha apenas a largura da sua mensagem, enquanto a mensagem longa continua quebrando linhas dentro da tela.
Experimente você mesmo
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(title: const Text('Chat')),
body: Padding(
padding: const EdgeInsets.all(16),
child: Column(
children: [
Row(
children: [
const CircleAvatar(child: Text('S')),
const SizedBox(width: 8),
Expanded(
child: Container(
padding: const EdgeInsets.all(12),
decoration: BoxDecoration(
color: Colors.grey.shade300,
borderRadius: BorderRadius.circular(16),
),
child: const Text('Hi!'),
),
),
],
),
const SizedBox(height: 12),
Row(
children: [
const CircleAvatar(child: Text('S')),
const SizedBox(width: 8),
Expanded(
child: Container(
padding: const EdgeInsets.all(12),
decoration: BoxDecoration(
color: Colors.grey.shade300,
borderRadius: BorderRadius.circular(16),
),
child: const Text(
'Are you coming to the park later? We meet at the big tree by the lake.',
),
),
),
],
),
],
),
),
),
);
}
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Layouts que se adaptam
1Compartilhando uma linha
Expanded preenche a linhaCompartilhando espaço com flexFlexible se ajusta ao filhoSpacer separa os elementos4Tamanhos e pontos de quebra
Largura total: double.infinityUma largura máximaTamanho da tela: MediaQueryPontos de quebra com LayoutBuilderPratique por conta própria: Compilador de Flutter online