0
votes

Flutter: Erreur lors de la préférence partagée

J'essaie d'utiliser des préférences partagées pour conserver la connexion à l'utilisateur et je l'ai mise dans l'écran Splash et lorsque j'exécute le projet, cette erreur est apparue:

[Erreur: Flutter / UI / UI / UI_DART_STATE.CC (157)]] Non gérée par exception: p>

SetState () appelé après le disposer (): _splashcreenstate # AA9C8 (cycle de vie p>

Etat: défunt) Cette erreur se produit si vous appelez SSTATE () sur un état P>

objet pour un widget qui n'apparaît plus dans l'arborescence du widget (E.g., P>

dont le widget parent n'inclut plus le widget dans sa construction). Ceci p>

erreur peut se produire lorsque des appels de code SETState () à partir d'une minuterie ou d'un P>

rappel d'animation. La solution préférée consiste à annuler la minuterie ou p>

Arrêtez d'écouter l'animation dans la section Dispose () Rappel. Un autre p>

solution consiste à vérifier la propriété "montée" de cet objet avant p>

appeler SSTATE () Pour vous assurer que l'objet est toujours dans l'arborescence. Ceci p>

Erreur peut indiquer une fuite de mémoire si le SSTATE () est appelé P>

Parce que un autre objet consiste à retenir une référence à cet objet d'état p>

Après avoir été retiré de l'arbre. Pour éviter les fuites de mémoire, p>

envisagez de casser la référence à cet objet lors du dispositif (). P> blockQquote>

et la boucle de données n'arrête pas d'm'appeler à nouveau et encore. P>

Ceci ma méthode à utiliser des préférences partagées: P>

@override
  Widget build(BuildContext context) {
    userProvider = Provider.of<UserProvider>(context, listen: false);
    appProvider = Provider.of<AppProvider>(context, listen: false);
    init();
    return isLoading == true
        ? Container(
            color: Colors.white,
            child: Center(
              child: CircularProgressIndicator()),
          )
        : Container(
            child: Scaffold(
              body: Stack(
                children: <Widget>[
                  Container(
                    foregroundDecoration: !AppTheme.isLightTheme
                        ? BoxDecoration(
                            color: AppTheme.getTheme()
                                .backgroundColor
                                .withOpacity(0.4))
                        : null,
                    width: MediaQuery.of(context).size.width,
                    height: MediaQuery.of(context).size.height,
                    child: Image.asset('assets/images/introduction.jpg',
                        fit: BoxFit.cover),
                  ),
                  Column(
                    children: <Widget>[
                      Expanded(
                        flex: 1,
                        child: SizedBox(),
                      ),
                      Center(
                        child: Container(
                          width: 60,
                          height: 60,
                          decoration: BoxDecoration(
                            borderRadius: BorderRadius.all(
                              Radius.circular(8.0),
                            ),
                            boxShadow: <BoxShadow>[
                              BoxShadow(
                                  color: AppTheme.getTheme().dividerColor,
                                  offset: Offset(1.1, 1.1),
                                  blurRadius: 10.0),
                            ],
                          ),
                          child: ClipRRect(
                            borderRadius: BorderRadius.all(
                              Radius.circular(8.0),
                            ),
                            child: Image.asset('assets/images/appIcon.png'),
                          ),
                        ),
                      ),
                      SizedBox(
                        height: 16,
                      ),
                      Text(
                        "Voyager",
                        textAlign: TextAlign.left,
                        style: TextStyle(
                          fontWeight: FontWeight.w600,
                          fontSize: 24,
                        ),
                      ),
                      SizedBox(
                        height: 8,
                      ),
                      Text(
                        "Best Trips deals for your holiday",
                        textAlign: TextAlign.left,
                        style: TextStyle(
                          fontSize: 14,
                        ),
                      ),
                      Expanded(
                        flex: 4,
                        child: SizedBox(),
                      ),
                      Padding(
                        padding: const EdgeInsets.only(
                            left: 48, right: 48, bottom: 8, top: 8),
                        child: Container(
                          height: 48,
                          decoration: BoxDecoration(
                            color: AppTheme.getTheme().primaryColor,
                            borderRadius:
                                BorderRadius.all(Radius.circular(24.0)),
                            boxShadow: <BoxShadow>[
                              BoxShadow(
                                color: AppTheme.getTheme().dividerColor,
                                blurRadius: 8,
                                offset: Offset(4, 4),
                              ),
                            ],
                          ),
                          child: Material(
                            color: Colors.transparent,
                            child: InkWell(
                              borderRadius:
                                  BorderRadius.all(Radius.circular(24.0)),
                              highlightColor: Colors.transparent,
                              onTap: () {
                                Navigator.push(
                                  context,
                                  MaterialPageRoute(
                                      builder: (context) =>
                                          IntroductionScreen()),
                                );
                              },
                              child: Center(
                                child: Text(
                                  "Get started",
                                  style: TextStyle(
                                      fontWeight: FontWeight.w500,
                                      fontSize: 16,
                                      color: Colors.white),
                                ),
                              ),
                            ),
                          ),
                        ),
                      ),
                      Padding(
                        padding: EdgeInsets.only(
                            bottom:
                                24.0 + MediaQuery.of(context).padding.bottom,
                            top: 16),
                        child: Container(
                          child: Material(
                            color: Colors.transparent,
                            child: InkWell(
                              borderRadius:
                                  BorderRadius.all(Radius.circular(24.0)),
                              highlightColor: Colors.transparent,
                              onTap: () {
                                Navigator.push(
                                  context,
                                  MaterialPageRoute(
                                      builder: (context) =>
                                          LoginScreen(context)),
                                );
                              },
                              child: Text(
                                "Already have account? LogIn",
                                textAlign: TextAlign.left,
                                style: TextStyle(
                                  fontSize: 14,
                                  color: Colors.white,
                                ),
                              ),
                            ),
                          ),
                        ),
                      ),
                    ],
                  ),
                ],
              ),
            ),
          );
  }


0 commentaires

3 Réponses :


0
votes

pls, appelez votre fonction init en microtask.

Future.microtask(() => {init()});


2 commentaires

J'ai eu que lorsque j'ai ajouté votre ligne, la classe "_splashsteState" n'a pas de constructeur par défaut. Essayez d'utiliser l'un des constructeurs nommés définis dans '_splashscreenstate'


Vous devriez utiliser un widget d'état. Vous pouvez essayer toute la logique ici. @override vide initstate () {super.inittstate (); // TODO: futur.microtask (// logique)}



0
votes

@mariam Veuillez utiliser monté monté,

if (this.mounted){
  setState((){
   //Your state change code goes here
  }); 
}


1 commentaires

où devrais-je le mettre s'il vous plaît ans comment, désolé mais je ne l'ai pas traité avant



0
votes
use mounted before setState

if (isLog) {
          String email = prefs.getString("email");
          String pass = prefs.getString("pass");

        if(mounted)
          setState(() {
            signIn(email, pass);
          });
        } else {
          if(mounted)
           setState(() {
             isLoading = false;
           });
        }

1 commentaires

Pouvez-vous mettre votre code complet? Je pense que cela vient dans votre écran Splash.