Flexible épouse son enfant
Fait partie de la section Des mises en page adaptées du Journey Flutter de Coddy. Leçon 3 sur 30.
Expanded fait occuper à un enfant tout l’espace restant, même si l’enfant a besoin de moins. Une bulle de discussion enveloppée dans Expanded s’étire sur toute la ligne pour un message d’un seul mot.
Flexible donne à un enfant au maximum le même espace , et lui permet de rester plus petit :
Row(
children: [
const CircleAvatar(child: Text('A')),
Flexible(
child: Container(
color: Colors.grey.shade300,
child: const Text('Hello'),
),
),
],
)Un message court obtient une petite bulle. Un message long s’agrandit jusqu’à atteindre le bord de la ligne, puis se répartit sur plusieurs lignes, car Flexible ne le laisse jamais prendre plus que l’espace restant.
Utilisez Expanded lorsque l’enfant doit remplir l’espace, et Flexible lorsqu’il peut le remplir.
Défi
FacileLa bulle Hi! s’étend sur toute la largeur de l’écran. Faites en sorte que chaque bulle soit aussi large que son message, tout en permettant au long message de revenir à la ligne à l’intérieur de l’écran.
Essayez vous-même
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.',
),
),
),
],
),
],
),
),
),
);
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Des mises en page adaptées
1Partager une ligne
Expanded remplit la lignePartager l’espace avec flexFlexible épouse son enfantSpacer écarte les éléments4Tailles et points de rupture
Pleine largeur : double.infinityUne largeur maximaleTaille de l’écran : MediaQueryPoints de rupture de LayoutBuilder2L’erreur de débordement
L’erreur de débordementCorrection du débordement : agrandirCorrection du débordement : faire défilerCorrection du débordement : renvoyer à la ligneEspacement à l’intérieur d’un renvoi à la ligne5Énumérations et switch
Énumérations pour les types d’écranUtiliser switch avec une énumérationExpressions switchEntraînez-vous par vous-même : Compilateur Flutter en ligne