如何在变量不为null时执行函数Flutter



我的主程序_MyAppState中有这段代码。art:

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对象中的json_id变量。此变量在_MyAppState的initState中初始化,行为:authentication(p3provider(

问题是_MyAppState的initState和_MyHomePageState同时执行,因此如果我在_MyHomePageState的initState中直接调用getTasks((,它将返回一个错误,因为p3provider.jsession_id尚未初始化。

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

如果有人对如何做到这一点有想法,我们非常欢迎!:(

找到了一个解决方案:

我定义这个类:

class HomePageController{
var getTasks;
}

我在_MyAppState:中安装的

final HomePageController myController = HomePageController();

我把它传给我的主页小部件:

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从父类调用子类函数

最新更新