FLUTTER: необработанное исключение: setState () или markNeedsBuild () вызывается во время сборки - PullRequest
0 голосов
/ 28 января 2020

У меня проблема с этим исключением, и я застрял, мне нужна ваша помощь. Я использую навигатор внутри streambuilder, я уже использую его внутри streambuilder, но на этот раз у меня есть исключение, и я не знаю, как его решить. Он пытается добавить функцию утилизации, но я не знаю, как закрыть построитель потока.

это мое состояние Widget build(BuildContext context) { changestate(); return Scaffold( backgroundColor: Theme.of(context).backgroundColor, body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ SizedBox(height: 40), Text('VOUS', style: TextStyle(fontSize: 50)), Text( 'devez ' + legage, style: TextStyle(fontSize: 35), ), SizedBox(height: 30), Image(image: AssetImage('assets/images/hands/2htop.png')), SizedBox(height: 30), Expanded( child: StreamBuilder( stream: Firestore.instance .collection('rooms') .document(pincode) .snapshots(), builder: (context, snapshot) { if (snapshot.hasData && snapshot.data['nb screen'] == 1) { gotdata++; newduel(context); } return StreamBuilder<QuerySnapshot>( stream: Firestore.instance .collection('rooms') .document(pincode) .collection('users') .snapshots(), builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) { if (!snapshot.hasData) return Text("Chargement...."); else { return new GridView.count( crossAxisCount: 5, children: snapshot.data.documents .map((DocumentSnapshot document) { return Container( child: OvalPic( document['photo'], document['couleur']), ); }).toList()); } }, ); }, ), ), Container( child: (ffull2 == 0) ? AnimatedLiquidLinearProgressIndicator() : fgbutton(mypink, 'DUEL SUIVANT', context)), SizedBox(height: 30) ], ), ), ); }

void changestate() {
if (dejareload == 0) {
  dejareload++;
  Future.delayed(
      const Duration(seconds: 3),
      () => setState(() {
            ffull2 = 1;
          }));
}

}

и это что в новом дуэли:

Navigator.pushReplacement( context, MaterialPageRoute(builder: (context) => Votes()));

ОШИБКА IS:

enter image description here

1 Ответ

0 голосов
/ 28 января 2020

Оберните ваш метод setState установленным условием, как показано ниже.

проблема в том, что я думаю, что вы сделали вызов API где-то, затем вы удаляете страницу, и данные поступают на страницу, когда она уже удалена, или любые отложенные действия.

void changestate() {
if (dejareload == 0) {
  dejareload++;
   if(mounted){
      Future.delayed(
      const Duration(seconds: 3),
      () => setState(() {
            ffull2 = 1;
      }));
   }

}
...