【问题标题】:How to clear data when back button pressed按下后退按钮时如何清除数据
【发布时间】:2021-06-07 03:31:10
【问题描述】:

我有 2 个页面,每个页面在 initState 中都有相同的函数,返回一个列表。

第一个页面有常规功能,第二个页面有相同的功能,但带有返回过滤列表的过滤器。

问题是当我按下第二页中的“后退按钮”并返回第一页时,我得到的是过滤列表而不是常规列表。

在转到第一页之前如何“清除”第二页中的数据?

功能:

  Future fetchProducts({flag = false})  {
  return http
        .get(
            'MyAddress')
        .then<Null>((http.Response response) {
      final Map<String, dynamic> listData = json.decode(response.body); 
      listData.forEach((String id, dynamic fetchedData) {
        final Product product = Product(
          id: id, 
          address: fetchedData['address'],
          image: fetchedData['imageUrl'],
        );
        fetchedData.add(product);   
      });
      _product = flag
          ? fetchedData.where((Product product) {        
              return product.userId == 1;
            }).toList()
                     : fetchedData;
    });
  }

【问题讨论】:

  • 请在您的帖子中添加一些代码。特别是关于如何将列表从一个页面传递到另一个页面。
  • @George 我更新了问题
  • 我看到fetchedData 变量的双重阴影声明。我假设在forEach 闭包中有一个全局List&lt;...&gt; fetchedData; 变量和dynamic fetchedData。我相信你应该重命名一个。
  • 至于问题中描述的问题-我仍然不清楚如何将变量从一个屏幕传递到另一个屏幕。我看不出这个函数与实际问题有什么关系。
  • 这正是我的观点,我不会将变量从一个页面传递到另一个页面。 @George 您可以在函数末尾看到 if 语句,具体取决于标志。如果标志为真 - 过滤列表,如果 flas 为假 - 常规列表。问题是当我从常规列表页面导航到过滤列表页面时,我得到了过滤列表,但是当我回到常规列表页面时,我仍然得到过滤列表

标签: flutter dart


【解决方案1】:

返回页面(路由)时触发动作有两种方式。

1)

void WaitforBeingBackfromConfig() async{
    await Navigator.push(
      context, MaterialPageRoute(
        builder: (context) => ConfigScreen('platzhalter'))
    );

//Do something right after return to page1
  }

2) 正如@Michael 之前所说:WillPopScope:

Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: _SaveAndBack,
      child: Scaffold(
        appBar: AppBar(
          title: Text('Config'),
        ),
        body: Column(children: <Widget>[
     ....    ]),
      ),
    );

这会在 page2 离开之前调用函数“_SaveAndBack”。

【讨论】:

    【解决方案2】:

    不知道这是否是最佳解决方案,但我可以用WillPopScope 包裹我的Scaffold,然后用Navigator.pushReplacementNamed 从那里导航到上一个屏幕以再次“激活”initState

    【讨论】:

      【解决方案3】:

      #应用程序根目录

       return WillPopScope(
            onWillPop: () async {
              data1 = '';
              data2 = 0;
              Navigator.pop(context);
              return true;
            },
            child:scaffold...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-22
        • 2016-08-24
        • 1970-01-01
        相关资源
        最近更新 更多