Flutter中调用Navigator.pop()时如何刷新前页的_getGoalsList API
解决方案
1. 监听页面返回触发刷新
修改目标列表页的跳转逻辑,通过异步等待页面返回,返回后自动调用_getGoalsList拉取最新数据:
FloatingActionButton.small( onPressed: () async { // 等待添加目标页面返回 await Navigator.pushNamed(context, '/addGoals'); // 返回后立即刷新列表 _getGoalsList(); }, ),
2. 修复列表重复数据问题
现有_getGoalsList方法每次调用都会往goals列表追加数据,导致重复展示。需要在请求前清空原有列表:
Future<void> _getGoalsList() async { // 清空列表,避免重复加载数据 goals.clear(); final response = await http.post(Uri.parse('http://10.0.2.2:1111/goal/getGoals/1')); final responseData = jsonDecode(response.body); final goalsList = responseData['getGoals']; goalsList.forEach((goal) { goals.add(Goals( id: goal['id'], goal_name: goal['goal_name'], goal_picture: goal['goal_picture'])); }); setState(() { _goalList = goals; }); }
3. (可选)仅在确认添加时刷新
如果希望只有用户点击「Confirm」按钮返回时才刷新(忽略系统返回键等其他返回场景),可以通过pop传递标记值实现精准控制:
添加目标页面确认按钮代码:
ElevatedButton( onPressed: () { _addGoalToList(); // 返回时传递true,标记需要刷新列表 Navigator.pop(context, true); }, child: Text('Confirm'), ),
目标列表页跳转逻辑修改:
FloatingActionButton.small( onPressed: () async { final result = await Navigator.pushNamed(context, '/addGoals'); // 只有返回结果为true时才触发刷新 if (result == true) { _getGoalsList(); } }, ),
内容的提问来源于stack exchange,提问作者New_dev
相关产品推荐
相关产品推荐

