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
相关产品推荐
相关产品推荐

