【问题标题】:FLUTTER: Unhandled Exception: setState() or markNeedsBuild() called during build颤振:未处理的异常:在构建期间调用了 setState() 或 markNeedsBuild()
【发布时间】:2020-01-28 10:06:49
【问题描述】:

我遇到了这个异常的问题,我被困住了,我需要你的帮助。我在流构建器中使用导航器,我已经在流构建器中使用它,但这次我有一个异常,我不知道如何解决它。它尝试添加 dispose 功能,但我不知道如何关闭流生成器。

这是我的状态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()));

错误是:

【问题讨论】:

    标签: flutter error-handling stream-builder


    【解决方案1】:

    使用如下所示的已安装条件包装您的 setState 方法。

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

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

    【讨论】:

    • 它不起作用:/我编辑我的帖子以添加调试错误
    猜你喜欢
    • 2021-08-21
    • 2021-02-14
    • 1970-01-01
    • 2021-01-25
    • 2021-08-07
    • 2021-08-08
    • 2021-04-19
    • 2021-11-14
    • 2019-02-19
    相关资源
    最近更新 更多