【发布时间】: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