是否可以使用navigator.pop ...刷新或重新加载页面,例如第一页(nav.push => 2)回到第二页,然后从第二页(nav.pop,value)退回到第一页?

时间:2019-04-20 03:17:46

标签: android dart flutter navigator

我想使用navigator.pop将值从第二页传递到第一页,并以initstate或其他解决方法刷新或重新加载第一页的新值?

我能够在第一页中获得这些值,但无法在initstate中刷新或重新加载具有新值的页面,在此我想在API中传递新数据n获得响应...

有什么帮助吗?

1. I am redirecting to list page from this...

  getBrand(BuildContext context) async {
    tempBrand = await Navigator.push(context,
        MaterialPageRoute(builder: (context) => BrandList(widget.subCatID)));
    selectedBrand = tempBrand.name;
    selectedBrandID = tempBrand.id;
  }

now here i am passing those values in navigator.pop...

2. getting value here and passing back to 1st page...

Container(
          padding: EdgeInsets.all(10),
          child: ListView.separated(
              separatorBuilder: (context, index) =>
                  Divider(color: Color(0xffcccccc)),
              itemCount: prodBrands.length,
              itemBuilder: (BuildContext context, int index) {
                return GestureDetector(
                  child: InkWell(
                    onTap: () {
                      tempProdBrand = ProdBrandListModel.Message(
                        id: prodBrands[index].id,
                        name: prodBrands[index].name,
                      );

                      Navigator.pop(context, tempProdBrand);

                    },
                    child: Container(
                      child: Text(prodBrands[index].name),
                      padding: EdgeInsets.all(10.0),
                    ),
                  ),
                );
              }),
        )

3. Want to use new values here...

submitProduct() {
    api
        .newbiz(
      selectedBrandID,
    )
        .then((response) {
      setState(() {
        productID = response.message;
      });
    });
    setState(() {});
  }

当我使用弹出函数中传递的新值跳回到第一页时,只想从初始化状态或其他任何方式刷新页面。

1 个答案:

答案 0 :(得分:13)

从Page1导航到Page2

通常您使用Navigator.push() 例如:

// Page1
    Navigator.push(context, MaterialPageRoute(builder: (context) => Page2()));

在进入Page2时,您需要做一些工作,例如以共享的首选项保存一些数据,然后返回到Page1并刷新Page1以从共享的首选项中获取新数据,您所要做的就是使用

弹出到Page1。 >
//Page2
    Navigator.pop(context);

这不足以刷新您的Page1 因此,您需要在Page1导航器中附加一个.then作为回调,当您从page2弹出时将被调用,然后该.then应该具有一个设置状态以触发重建,只需在set状态内调用一个东西来进行重建 像这样:

//Page1
    Navigator.push(context, MaterialPageRoute(builder: (context) => Page2())).then((value) {
                  setState(() {
                    // refresh state of Page1
                  });
                });