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

Dart/Flutter中如何从Navigator.pop返回的列表对象中提取字符串?

Flutter命名路由返回列表值提取失败问题解决方案

根因说明

  • Navigator.pushNamed的默认返回值类型为Object?,Dart为强类型语言,未做类型转换时直接对该类型变量执行下标取值[0]操作,会触发类型校验报错,导致代码无法正常运行。
  • 额外需要注意的是,若用户未选择城市直接关闭选择页,pushNamed会返回null,需要做空安全处理避免运行时崩溃。

正确实现代码

带空安全和类型校验的写法(推荐)

TextButton(
    onPressed: () async {
      final Object? result = await Navigator.pushNamed(context, '/city');
      // 先判断非空+类型符合再取值
      if (result != null && result is List<String>) {
        String cityName = result[0];
        weatherData = await weather.weatherDataCity(cityName);
      }
    },
);

简化写法(仅适合确定一定会返回对应类型值的场景)

TextButton(
    onPressed: () async {
      // 强制类型转换
      final searchedCity = await Navigator.pushNamed(context, '/city') as List<String>;
      String cityName = searchedCity[0];
      weatherData = await weather.weatherDataCity(cityName);
    },
);

内容的提问来源于stack exchange,提问作者Ryan Nguyen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:15:03