【发布时间】:2019-01-23 01:41:49
【问题描述】:
在我的应用中,我有一个登录屏幕和一个主屏幕。从登录导航到主屏幕时,我从 .txt 文件中读取数据并显示 4 个随机数据点。我从我的 initState 中的文件中获取数据,以便在状态更改时不会多次调用它,然后与未来的构建器一起等待它...
class _HomeScreenState extends State<HomeScreen> {
Future<bool> _future;
@override
initState() {
super.initState();
print('in initState about to call _getData');
_future = _getData();
}
@override
Widget build(BuildContext context) {
var futureBuilder = new FutureBuilder(
future: _future,
builder: (BuildContext context, AsyncSnapshot snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
case ConnectionState.active:
case ConnectionState.waiting:
return new Center(
child: new CircularProgressIndicator(),
);
case ConnectionState.done:
if (snapshot.hasError) {
return new Center(
child: Text('Error'),
);
} else {
return new ListView(
children: <Widget>[
//my view
],
);
}
}
}
);
return MaterialApp(
home: WillPopScope(
onWillPop: () async {
return Navigator.pop(context);
},
child: Scaffold(
body: futureBuilder,
),
)
);
现在,当我使用返回按钮导航回登录屏幕然后返回主屏幕时,initState 将多次关闭(这可以从我留下的打印语句中看到)。当您在这两个屏幕(弹出主屏幕、推送主屏幕)之间来回切换时,initState 将被调用多次。我很困惑,感谢任何帮助!
编辑:登录和主屏幕的完整代码可以在https://github.com/ViscousOx/Flutter-Stuff找到
【问题讨论】:
-
你能显示完整的小部件(有状态的类)+它的潜在父级吗?
-
@RémiRousselet 我将两个小部件都上传到了github.com/ViscousOx/Flutter-Stuff的github
-
你找到答案了吗?我也面临同样的问题,我正在使用
provider包。 -
@RémiRousselet:我正在使用
provider包并遇到相同的情况。