Je suis nouveau sur Flutter et en lisant le didacticiel, j'ai vu l'extrait de code suivant:

// Within the `FirstRoute` widget
onPressed: () {
  Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => SecondRoute()),
  );
}

Pourquoi l'appel du MaterialPageRoute fonctionne-t-il? Je vois qu'il demande un objet de type WidgetBuilder, mais quoi nous passons est un BuildContext. Les parenthèses autour de context indiquent-elles un appel au constructeur de WidgetBuilder?

1
mirage 21 oct. 2020 à 17:21

2 réponses

Meilleure réponse

Le paramètre builder accepte un objet de type WidgetBuilder comme vous le dites. Ce qui est "caché", c'est qu'il est typedef:

typedef WidgetBuilder = Widget Function(BuildContext context);

Donc, ce que vous avez passé est en fait une fonction anonyme qui lui correspond.

0
Robert Sandberg 21 oct. 2020 à 14:44

C'est ce qu'on appelle une fonction fléchée. En fait, ce morceau de code

(context) => SecondRoute()

Peut être réécrit comme:

MaterialPageRoute(builder: (context)  {
 return SecondRoute();
})

Et le générateur de widgets est une fonction dont MaterialPageRoute a besoin en tant que paramètre.

0
WorieN 21 oct. 2020 à 14:39