【问题标题】:How to execute function when a variable is not null Flutter变量不为空时如何执行函数 Flutter
【发布时间】:2021-12-27 13:25:57
【问题描述】:

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

     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 和 _MyHomePageState 的 initState 是同时执行的,所以如果我在 _MyHomePageState 的 initState 中直接调用 getTasks() 会返回错误,因为 p3provider .jsession_id 尚未初始化。

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

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

【问题讨论】:

  • 你试过使用 Future.the() 函数吗?
  • 刚试过,谢谢,Future.then((widget.p3provider.jsession_id){ getTasks(); });但是给我一个错误不识别widget.p3provider.jsession_id并说“实例成员不能使用静态访问”
  • 很高兴为您提供帮助
  • 你要快兄弟,它实际上并没有工作我在编辑时错误地发布了我的评论
  • 请更新您的问题和代码

标签: flutter dart asynchronous future statefulwidget


【解决方案1】:

找到了解决办法:

我定义了这个类:

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();
  }

这是我得到它的主题:Flutter calling child class function from parent class

【讨论】:

    猜你喜欢
    • 2013-10-18
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    相关资源
    最近更新 更多