我有一个屏幕来显示从文件加载到用户的数据,并且这些数据会从远程服务中定期更新。为了读取文件并向用户显示,我从void initState()
调用了load data方法,但是通过这种方式,仅在创建屏幕后才调用该方法一次,因此当发生任何更改时,屏幕不会更新。另一个选择是从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
,返回时,显示屏幕时,不会调用任何方法来监听。
答案 0 :(得分:-1)
没有类似viewWillAppear
的东西,但是扑朔迷离的正确钩子是initState
和didUpdateWidget
。然后确保清除dispose
。
initState
在您的状态首次附加到树上时被调用didUpdateWidget
。