如何在Flutter中通过Navigator.Pop或Navigator.Push来刷新状态。

5 浏览
0 Comments

如何在Flutter中通过Navigator.Pop或Navigator.Push来刷新状态。

这里有两个页面,第一个页面称为 BSP_signup_terms 页面,第二个页面称为 Bsp_Service_page。当我在 BSP_signup_terms 页面上时,我必须根据所选的复选框选择一些复选框,根据所选的复选框,它将显示一些数据。但问题是,它会显示完整的数据,但当我从 Bsp_signup_page 返回到 BSP_signup_terms 并更改复选框后,再次按下下一个按钮时,结果不会更改,仍然与之前的结果相同。\n这是输出页面的图片。[链接](https://i.stack.imgur.com/nEImY.jpg)\n以下是我尝试的代码。\nBSP_Signup_Terms_Page\n这是 BspLicensedSignupTermsPage 类的代码。\nBSP_Service_Page\n这是 BspServicePage 类的代码。\nBsp_service_screen\n这是 BspServiceScreen 类的代码。

0
0 Comments

问题的原因是:当使用Navigator.pop或Navigator.push方法返回到上一个页面时,页面的状态没有刷新。

解决方法是:在返回页面的按钮点击事件中调用一个异步方法,并在该方法中使用Navigator.push方法跳转到下一个页面。然后,在下一个页面的"Next"和"Cancel"按钮的点击事件中使用Navigator.pop方法返回上一个页面,并传递一个参数来表示是否刷新页面。在上一个页面中,根据传递的参数来判断是否需要刷新页面。

具体代码如下:

首先,在上一个页面中添加一个异步方法redirectToNextScreen:

void redirectToNextScreen() async {

final Route route = MaterialPageRoute(

builder: (context) => BspServicePage(bspSignupCommonModel: model));

final result = await Navigator.push(mContext, route);

try {

if (result != null) {

if (result) {

//Return callback here.

}

}

} catch (e) {

print(e.toString());

}

}

然后,在"BSP_Signup_Terms_Page"页面的"Next"按钮的点击事件中调用redirectToNextScreen方法。

接下来,在"BspServicePage"页面的"Next"和"Cancel"按钮的点击事件中添加以下代码:

Navigator.pop(mContext, true); //true表示刷新上一个页面,false表示不刷新。

现在,当返回到上一个页面时,页面的状态将会刷新。

0
0 Comments

问题的出现原因是:在Flutter中,当使用Navigator的pop或push方法返回到上一个页面时,页面的状态不会自动刷新,需要手动调用setState方法来刷新状态。

解决方法是:在返回到第一个页面后,使用setState方法来刷新页面的状态。可以在Navigator的push方法的then回调中调用setState方法,如下所示:

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

setState(() {

// 刷新状态

});

});

这样,当从第二个页面返回到第一个页面时,第一个页面的状态将会被刷新。另外,还可以尝试使用Navigator.pop()方法代替其他导航方法,以确保页面状态的刷新。

需要注意的是,有时候出现问题是因为代码中的逻辑错误,而不是导航器的问题。在推出新页面时,页面会重新构建状态,所以如果想要刷新第二个页面,需要在第二个页面的代码中进行相应的更改。可以先尝试一些简单的测试来确定问题所在。

对于第二个页面,可以使用bloc来进行状态管理,以实现页面的刷新。另外,可以尝试使用Navigator.pop(mContext, true)方法来返回上一个页面,并刷新页面的状态。

总结起来,要在Flutter中实现在返回或跳转页面时刷新状态,可以使用setState方法来手动刷新页面的状态,同时注意代码逻辑的正确性。

0