【发布时间】:2019-02-18 18:14:01
【问题描述】:
我有一个屏幕显示从文件加载给用户的数据,这些数据会定期从远程服务更新。为了读取文件并向用户显示,我从void initState() 调用了一个加载数据方法,但是这样一来,该方法仅在屏幕创建时调用一次,因此当发生任何更改时,屏幕不会更新。另一种选择是从Widget build(BuildContext context) 调用加载数据方法,但是调用了很多次,我不想要它。我想写一些在 Swift viewWillAppear() 上使用的东西,但我没有找到方法。
每次用户从任何本地导航到屏幕时,我都必须加载数据,我使用Navigator.push() 和Navigator.pop() 在屏幕之间导航。
屏幕:主页
class HomePage extends StatefulWidget {
State<StatefulWidget> createState() => new HomePageState();
}
class HomePageState extends State<HomePage> {
@override
void initState() {
print('HOME SCREEN INIT STATE');
super.initState();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
floatingActionButton: FloatingActionButton(
onPressed: () {
Navigator.push(context, MaterialPageRoute(builder: (context) => AddExpensePage()));
},
child: new Icon(Icons.add),
backgroundColor: Color(0xFF7B7BAD),
),
...
}
屏幕:AddExpensePage
class AddExpensePage extends StatefulWidget {
State<StatefulWidget> createState() => new AddExpensePageState();
}
class AddExpensePageState extends State<AddExpensePage> {
@override
Widget build(BuildContext context) {
...
}
}
场景:主屏幕是HomePage,第一次调用initState(),所以我导航到AddExpensePage,从AddExpensePage点击返回箭头返回HomePage,当返回, 屏幕显示时不调用任何方法进行监听。
【问题讨论】:
-
那是
initState。我了解它如何不适合您的用例。你能澄清那部分吗? -
initState方法在应用程序的所有生命周期中只被调用一次。如果我导航和弹出屏幕,则独立。 -
不是。
initState在很多情况下都可以再次调用,比如换键。 -
不,当我返回主屏幕时不会调用
initState。如果我从 A 导航到 B,然后从 B 返回 A,则不会调用 A 的initState。 -
你可能想使用
RouteAware。或者pop\返回的未来
标签: dart flutter state navigator