【问题标题】:How can i refresh the widget on the the page A, when i return from page B?当我从页面 B 返回时,如何刷新页面 A 上的小部件?
【发布时间】:2019-09-02 01:40:29
【问题描述】:

我有一个有状态的页面 A,其中包含一个存在于单独的有状态类中的小部件。

小部件在其 initState 方法中从 sharedPreferences 中获取一个数字并显示它,当我单击小部件时,它会路由到页面 B,页面 B 包含一个更改 sharedPreferences 中数字的函数。

当我返回时,我没有看到更改,但是当我重新打开应用程序或切换到其他选项卡并返回时,我看到了。

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    在A页,当你转到B页时,

    Navigator.pushNamed(context, "/pageB").then((value) {
      if (value == true) {
        setState(() {
          // refresh page 1 here, you may want to reload your SharedPreferences here according to your needs
        });
      }
    });
    

    在页面B中,当你想回到页面A时,使用

    Navigator.pop(context, true);
    

    编辑:如果您没有命名路线,您可能希望在第一种情况下使用以下。

    Navigator.push(context, MaterialPageRoute(builder: (context) => PageB())).then((value) {
      if (value == true) {
        setState(() {
          // refresh page 1 here, you may want to reload your SharedPreferences here according to your needs
        });
      }
    });
    

    【讨论】:

    • 刚刚找到了一个放置 Navigator.pop(context, true); 的好地方,将其与 WillPopScope' 一起使用在其属性 onWillPop 中可确保无论何时使用后退按钮、后退箭头等任何方式弹出页面 B等等,小部件总是更新的。
    • 是的,你可以把它放在那里,这完全取决于你的需要。
    【解决方案2】:

    如果您从 pageA 移动到 pageB:

    在pageA小部件按钮点击需要调用以下代码:

    _navigateAndDisplayData(
          BuildContext context) async {
        final returnVal = await Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => pageB()),
        );
    
        setState(() {
          // returnVal has true or false.
          if (returnVal){
             // Put your code here
           }
    
        });
      }
    

    如果您总是刷新期望 pageB 的任何值。然后只需删除 if 语句。

    在另一侧pageB上,您要发送刚刚使用的pageA上的数据

    Navigator.pop(context, true);
    

    【讨论】:

      猜你喜欢
      • 2019-11-28
      • 2019-09-26
      • 2013-03-16
      • 2021-08-31
      • 2019-11-05
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 2017-02-09
      相关资源
      最近更新 更多