当视图显示在Flutter上时,立即调用什么方法?

时间:2019-02-18 18:14:02

标签: dart flutter state navigator

我有一个屏幕来显示从文件加载到用户的数据,并且这些数据会从远程服务中定期更新。为了读取文件并向用户显示,我从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,返回时,显示屏幕时,不会调用任何方法来监听。

1 个答案:

答案 0 :(得分:-1)

没有类似viewWillAppear的东西,但是扑朔迷离的正确钩子是initStatedidUpdateWidget。然后确保清除dispose

  • initState在您的状态首次附加到树上时被调用
  • 之后,每次将相同状态附加到新窗口小部件时,就会调用
  • didUpdateWidget