You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 19:42:37