当变量不为空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();
}
这是我得到它的主题:
我的 _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();
}
这是我得到它的主题: