我想使用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(() {});
}
当我使用弹出函数中传递的新值跳回到第一页时,只想从初始化状态或其他任何方式刷新页面。
答案 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
});
});