【问题标题】:What method is called immediately when view is shown on Flutter?在 Flutter 上显示视图时立即调用什么方法?
【发布时间】: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


【解决方案1】:

没有像 viewWillAppear 这样的东西,但在颤振中正确的钩子是 initStatedidUpdateWidget。然后确保清理dispose

  • initState 在您的状态第一次附加到树时被调用
  • didUpdateWidget 之后每次将相同的状态附加到新的小部件时都会调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多