当变量不为空Flutter时如何执行函数

How to execute function when a variable is not null Flutter

我的 _MyAppState 中有这段代码 main.dart :

     var _p3provider;
     @override
      void initState() {
        super.initState();
        P3provider p3provider = new P3provider();
        authentification(p3provider);
        _p3provider = p3provider;
      }

我将变量 _p3provider 作为 p3provider 传递给我的 main.dart,

的 MyHomePage statefulWidget

这是 _MyHomePageState 的一些代码:

void initState() {
    super.initState();
    if (widget.p3provider.jsession_id == null) {
      Future.delayed(Duration(seconds: 2), (){
        getTasks();
      }); 
    } else {
      getTasks();
    }
  }

要执行我的 getTasks 函数,我需要初始化 p3provider 对象中的 jsession_id 变量。此变量在 _MyAppState 的 initState 中初始化:authentification(p3provider); .

问题是 _MyAppState 的 initState 和 _MyHomePageState 是同时执行的,所以如果我直接在 _MyHomePageState 的 initState 中调用 getTasks() 它将 return 一个错误,因为 p3provider.jsession_id 还没有被初始化。

为了避免这个错误,我在检查变量是否为空后使用了 Future.delayed,但我认为这个解决方案不是最优的,我希望函数 getTasks() 在以下情况下直接执行jsession_id不为空

如果有人知道如何做到这一点,我们非常欢迎! :)

找到解决方案:

我这样定义 class :

class HomePageController{
  var getTasks;
}

我在 _MyAppState 中实例化:

final HomePageController myController = HomePageController();

我将其传递给 MyHomePage 小部件:

home: MyHomePage(controller: myController),

在 _MyHomePageState 的 initState 中,我将函数 getTasks() 分配给控制器变量 getTasks :

@override
  void initState() {
    super.initState();
    widget.controller.getTasks = getTasks;
  }

现在我可以通过 _MyAppState 中的控制器执行 getTasks :

@override
  void initState(){
    super.initState();
    authentification().then((value){
      myController.getTasks();
  }

这是我得到它的主题: