使用Future
初始化应用后,我从远程JSON
文件中获取数据。
当return
有数据时,我想导航至新屏幕,而不是widget
中的FutureBuilder
。
我现在使用的方式:
@override
Widget build(BuildContext context) {
return FutureBuilder<void>(
future: getDataFromJsonFile(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return CircularProgressIndicator();
}
return AnotherScreen();
});
}
相反,我想导航到新屏幕:
@override
Widget build(BuildContext context) {
return FutureBuilder<void>(
future: getDataFromJsonFile(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return CircularProgressIndicator();
}
Navigator.pushReplacementNamed(context, "/manatx");
});
}
很明显,第二个代码块导致错误:setState() or markNeedsBuild() called during build
有人知道如何实现这一目标吗?
答案 0 :(得分:1)
使用WidgetsBinding.instance.addPostFrameCallback()将等待您的Widget构建调用其中的操作,如下所示:
@override
Widget build(BuildContext context) {
return FutureBuilder<void>(
future: getDataFromJsonFile(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return CircularProgressIndicator();
}
//Wait flutter finish build...
WidgetsBinding.instance.addPostFrameCallback((_) {
//When finish, call actions inside
Navigator.pushReplacementNamed(context, "/manatx");
});
});
}