FLUTTER:未处理的异常:在构建过程中调用setState()或markNeedsBuild()

时间:2020-01-28 10:06:49

标签: flutter error-handling stream-builder

此例外我有问题,我被困住了,需要您的帮助。我在streambuilder内部使用了导航器,我已经在streambuilder内部使用了导航器,但是这次我有一个例外,我不知道如何解决它。它尝试添加dispose函数,但我不知道如何关闭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;
          }));
}

}

这就是newduel中的内容:

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

错误是:

enter image description here

1 个答案:

答案 0 :(得分:1)

使用如下所示的挂载条件包装setState方法。

问题是,我认为您在某个地方进行了API调用,然后处置了该页面,并且当该数据已被处置或任何延迟的操作时,数据到达了该页面。

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

}
相关问题