我有一个屏幕,可以显示从文件加载到用户的数据,这些数据会从远程服务定期更新。要读取文件并向用户显示,我正在调用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
,当返回时,返回时,没有方法在屏幕为屏幕时呼叫显示。
没有类似 viewWillAppear
的东西,但是在扑波中的正确钩子是 initState
和 didUpdateWidget
。然后确保在dispose
上清理。
-
initState
被称为您的状态首次附加到树上 -
didUpdateWidget
每次将同一状态附加到新的小部件时都会调用。