我如何从差异中调用 setState class

how can i call setState from difference class

飞镖

我有两个这样的文件

一个是stfulclass这样

class Test extends StatefulWidget {
  const Test({Key? key}) : super(key: key);

  @override
  _TestState createState() => _TestState();
}

class _TestState extends State<Test> {
  @override
  Widget build(BuildContext context) {
    return TextButton(
      onPressed: () {
        updateField() // here i call function from other page
      },
      child: null,

    );
  }
}

其中一个像这样作用于其他文件或页面

  updateField()async{
    FirebaseFirestore.instance.collection("users").doc(currentUser.uid).update({
      "faceType" : currentUser.faceType ,
    });
  setState(() {
      currentUser.faceType= faceType;
    });
  }

但是一旦我使用 setstate,它说 setstate 未定义,请问我该如何使用它 谢谢

确保您在有状态小部件中调用 setState。

setState 是一种仅在有状态小部件中可用的方法。 有状态小部件之外的任何人都只是您编写的自定义方法。

也就是说,您可以使用您选择的状态管理库,并且您将能够轻松地更改有状态小部件中的不同状态。

最好的部分是逻辑代码不必在 UI.

您应该在 Statefull 小部件中有一个函数来处理 SetState 案例。 在此函数中,您可以调用项目其他文件中的任何函数。 因此,在您的情况下,您可以在 Statfull 小部件中使用如下函数:

class Test extends StatefulWidget {
  const Test({Key? key}) : super(key: key);

  @override
  _TestState createState() => _TestState();
}

class _TestState extends State<Test> {
_updateScreen() async {
   try{
     await updateField();
     setState(() {
       // handle the new state with Provider or whatever you prefer 
     });
   }catch(error){
     // handle errors
   }
}
  @override
  Widget build(BuildContext context) {
    return TextButton(
      onPressed: () {
        _updateScreen() 
      },
      child: null,

    );
  }
}

而另一个文件可能具有如下功能:

updateField()async{
    FirebaseFirestore.instance.collection("users").doc(currentUser.uid).update({
      "faceType" : currentUser.faceType ,
    });
  
  }