BuildContext
est, comme son nom l'indique, le contexte dans lequel un widget spécifique est construit.
Si vous avez déjà utilisé React auparavant, ce contexte est assez similaire à celui de React (mais beaucoup plus facile à utiliser) ; avec quelques bonus.
D'une manière générale, il existe 2 cas d'utilisation du contexte :
- Interagir avec vos parents (obtenir/afficher des données principalement)
- Une fois rendu à l'écran, obtenez la taille et la position de votre écran.
Le deuxième point est plutôt rare. En revanche, le premier point est utilisé presque partout.
Par exemple, si vous voulez pousser une nouvelle route, vous ferez Navigator.of(context).pushNamed('myRoute')
.
Notez le contexte ici. Il sera utilisé pour obtenir l'instance la plus proche de NavigatorState
widget au-dessus dans l'arbre. Ensuite, appelez la méthode pushNamed
sur cette instance.
Cool, mais quand est-ce que I vous voulez l'utiliser ?
BuildContext est vraiment utile lorsque vous voulez passer des données vers le bas. sans avoir à l'affecter manuellement aux configurations de chaque widget par exemple ; vous voudrez y accéder partout. Mais vous ne voulez pas le passer à chaque constructeur.
Vous pourriez potentiellement créer un global ou un singleton ; mais alors, lorsque les confs changent, vos widgets ne se reconstruisent pas automatiquement.
Dans ce cas, vous utilisez InheritedWidget
. Avec lui, vous pouvez potentiellement écrire ce qui suit :
class Configuration extends InheritedWidget {
final String myConf;
const Configuration({this.myConf, Widget child}): super(child: child);
@override
bool updateShouldNotify(Configuration oldWidget) {
return myConf != oldWidget.myConf;
}
}
Et ensuite, utilisez-le de cette façon :
void main() {
runApp(
new Configuration(
myConf: "Hello world",
child: new MaterialApp(
// usual stuff here
),
),
);
}
Grâce à cela, maintenant partout à l'intérieur de votre application, vous pouvez accéder à ces configurations à l'aide de la fonction BuildContext
. En faisant
final configuration = context.inheritFromWidgetOfExactType(Configuration);
Et ce qui est encore plus cool, c'est que todo les widgets qui appellent inheritFromWidgetOfExactType(Configuration)
sera automatiquement reconstruit lorsque les configurations changeront.
C'est génial, non ?
0 votes
La chaîne YouTube officielle de Flutter a publié une vidéo qui l'explique. aquí .