Fonctions de rappel qui transmettent une valeur
Fait partie de la section Gestion d’état du Journey Flutter de Coddy. Leçon 3 sur 27.
Un rappel peut transmettre une valeur au parent. Le sélecteur de taille ci-dessous comporte trois boutons, et la page doit savoir lequel a été sélectionné.
Donne un paramètre au rappel. Le type void Function(String) est une fonction qui prend un String et ne renvoie rien :
class SizePicker extends StatelessWidget {
const SizePicker({super.key, required this.onPick});
final void Function(String) onPick;
@override
Widget build(BuildContext context) {
return OutlinedButton(
onPressed: () => onPick('S'),
child: Text('S'),
);
}
}Chaque bouton encapsule l'appel dans une petite fonction, () => onPick('S'), afin qu'elle s'exécute lors de l'appui et non pendant la construction. Le parent reçoit la valeur en paramètre et la conserve :
SizePicker(
onPick: (picked) {
setState(() {
size = picked;
});
},
)Flutter possède un nom plus court pour le même type : ValueChanged<String>. De nombreux widgets intégrés l'utilisent, comme onChanged de TextField.
Défi
MoyenFais fonctionner les boutons de taille :
- Ajoute à
SizePickerun champfinal void Function(String) onPick, défini par son constructeur. - Fais en sorte que chaque bouton appelle
onPickavec sa propre lettre. - Sur la page, affiche la taille choisie :
Size: S,Size: MouSize: L.
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 const MaterialApp(
debugShowCheckedModeBanner: false,
home: HomePage(),
);
}
}
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
String size = 'M';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('T-shirt')),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text('Size: $size', style: const TextStyle(fontSize: 32)),
const SizedBox(height: 16),
const SizePicker(),
],
),
),
);
}
}
class SizePicker extends StatelessWidget {
const SizePicker({super.key});
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
OutlinedButton(onPressed: () {}, child: const Text('S')),
const SizedBox(width: 8),
OutlinedButton(onPressed: () {}, child: const Text('M')),
const SizedBox(width: 8),
OutlinedButton(onPressed: () {}, child: const Text('L')),
],
);
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Gestion d’état
1Remonter l’état
Transmettre l’état à un composant enfantTransmettre une fonction de rappel à un composant enfantFonctions de rappel qui transmettent une valeurRemonter l’étatEntraînez-vous par vous-même : Compilateur Flutter en ligne