Flutter: 在 Navigator.pop() 后重新加载页面
Flutter: 在 Navigator.pop() 后重新加载页面
我有两个页面我在之间导航。当返回导航时,我希望第一页重新加载数据/重建自身,但似乎无效。我阅读了这里的回复,但我仍然无法使其工作。以下是我的代码:\n从第一页导航到第二页:\nInkWell(\n onTap: () async {\n await Navigator.push(\n context,\n MaterialPageRoute(\n builder: (context) =>\n AddChallengeUnitsPageWidget(),\n ),\n ).then((_) => setState(() {}));\n },\nchild: Icon(\nIcons.add_circle,\n ),\n),\n
\n然后从第二页返回(在一个函数运行后,我需要来自该函数的更新来更新上一页):\nonPressed: () async {\n//我需要来自此函数的更新信息显示在上一页上\n await updateChallenge();\n Navigator.pop(context);\n//我尝试移除此setState调用,但问题没有解决。\n setState(() {});\n},\n
\n有什么想法为什么页面的状态没有被正确更新?
问题:在Flutter中,如何在返回上一页面时重新加载页面?
原因:问题的根本原因是,在返回上一页面时,页面没有重新加载。这可能是因为页面的状态没有被正确更新。
解决方法:为了解决这个问题,可以按照以下步骤进行操作:
1. 在第二个页面返回结果时,使用Navigator.pop(context, result);
将结果返回给上一页面。
2. 在第一个页面中,确保添加了await
关键字,并使用WidgetsBinding.instance.addPostFrameCallback
方法。如果setState
方法无效,可以使用此方法。
示例代码如下:
var result = await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => AddChallengeUnitsPageWidget(),
),
);
WidgetsBinding.instance.addPostFrameCallback((_) => setState((){}));
通过以上步骤,我们可以在返回上一页面时重新加载页面,确保页面状态的正确更新。