有没有可能使用navigator.pop来刷新或重新加载页面,就像从第一页(nav.push=>2)到第二页,然后从第二页返回到第一页(nav.pop,value)一样?

8 浏览
0 Comments

有没有可能使用navigator.pop来刷新或重新加载页面,就像从第一页(nav.push=>2)到第二页,然后从第二页返回到第一页(nav.pop,value)一样?

我想通过使用navigator.pop将第二页的值传递给第一页,并在initstate或其他方式中刷新或重新加载我的第一页以显示新的值。我能够在第一页中获取这些值,但无法在initstate中刷新或重新加载页面,我希望在那里传递新的数据并获取响应...有任何帮助吗?我从这里重定向到列表页...\ngetBrand(BuildContext context) async {\n tempBrand = await Navigator.push(context,\n MaterialPageRoute(builder: (context) => BrandList(widget.subCatID)));\n selectedBrand = tempBrand.name;\n selectedBrandID = tempBrand.id;\n }\n\n现在我在navigator.pop中传递这些值\n在这里获取值并传递回第一页。\nContainer(\n padding: EdgeInsets.all(10),\n child: ListView.separated(\n separatorBuilder: (context, index) =>\n Divider(color: Color(0xffcccccc)),\n itemCount: prodBrands.length,\n itemBuilder: (BuildContext context, int index) {\n return GestureDetector(\n child: InkWell(\n onTap: () {\n tempProdBrand = ProdBrandListModel.Message(\n id: prodBrands[index].id,\n name: prodBrands[index].name,\n );\n Navigator.pop(context, tempProdBrand);\n },\n child: Container(\n child: Text(prodBrands[index].name),\n padding: EdgeInsets.all(10.0),\n ),\n ),\n );\n }),\n )\n\n想在这里使用新的值...\nsubmitProduct() {\n api\n .newbiz(\n selectedBrandID,\n )\n .then((response) {\n setState(() {\n productID = response.message;\n });\n });\n setState(() {});\n }\n\n当我使用pop函数返回到第一页并传递我的新值时,简单地想要从initstate或其他方式刷新我的页面。

0
0 Comments

问题的原因是在从第一页(Page1)导航到第二页(Page2)后,当从第二页返回第一页时,第一页的数据没有刷新。解决方法是在导航时添加一个.then回调函数,并在回调函数中使用setState方法来触发页面的重建,从而实现页面的刷新。

具体地,我们可以在从第一页导航到第二页的代码中添加.then回调函数,并在回调函数中使用setState方法来触发页面的重建,如下所示:

// 第一页

Navigator.push(context, MaterialPageRoute(builder: (context) => Page2())).then((value) {

setState(() {

// 刷新第一页的状态

});

});

这样,在从第二页返回第一页时,会调用回调函数中的setState方法来刷新第一页的状态,从而实现页面的刷新。

0