159 votes

Flutter récupère le contexte dans la méthode initState

Je ne suis pas sûr que le initState est la bonne fonction pour cela. Ce que j'essaie de faire, c'est de vérifier quand la page est rendue, d'effectuer certaines vérifications et, en fonction de celles-ci, d'ouvrir une fonction AlertDialog pour effectuer certains réglages si nécessaire.

J'ai une page qui a un état. Il s'agit de initState ressemble à ceci :

@override
void initState() {
    super.initState();
    if (!_checkConfiguration()) {
        _showConfiguration(context);
    }
}

Le site _showConfiguration comme ça :

void _showConfiguration(BuildContext context) {
    AlertDialog dialog = new AlertDialog(
        content: new Column(
            children: <Widget>[
                new Text('@todo')
            ],
        ),
        actions: <Widget>[
            new FlatButton(onPressed: (){
                Navigator.pop(context);
            }, child: new Text('OK')),
        ],
    );

    showDialog(context: context, child: dialog);
}

S'il existe une meilleure façon d'effectuer ces contrôles et, si nécessaire, d'appeler la modale, veuillez m'indiquer la direction à suivre. onState ou onRender ou un callback que je pourrais assigner à la fonction build à appeler lors du rendu, mais je n'ai pas réussi à en trouver une.


Edit : Il semble qu'ici, ils ont eu un problème similaire : Redirection de Flutter vers une page sur initState

2voto

Avijit Nagare Points 1514

Nous pouvons utiliser la clé globale comme :

class _ContactUsScreenState extends State<ContactUsScreen> {

    //Declare Global Key
      final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();

    //key
    Widget build(BuildContext context) {
        return  Scaffold(
            key: _scaffoldKey,
            appBar: AppBar(
              title: Text('Contact Us'),
            ),
            body:
       }

    //use
      Future<void> send() async {
        final Email email = Email(
          body: _bodyController.text,
          subject: _subjectController.text,
          recipients: [_recipientController.text],
          attachmentPaths: attachments,
          isHTML: isHTML,
        );

        String platformResponse;

        try {
          await FlutterEmailSender.send(email);
          platformResponse = 'success';
        } catch (error) {
          platformResponse = error.toString();
        }

        if (!mounted) return;

        _scaffoldKey.currentState.showSnackBar(SnackBar(
          content: Text(platformResponse),
        ));
      }

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X