在颤振中通过路由传递数据时检测到 null 类型的值
Posted
技术标签:
【中文标题】在颤振中通过路由传递数据时检测到 null 类型的值【英文标题】:Value detected of type null when passing data via routes in flutter 【发布时间】:2022-01-20 20:29:29 【问题描述】:这个错误只是在数据从加载屏幕成功传递之前的一段时间。
传递数据的加载界面:
如果我在这里打印实例,则不会出现错误
void setupWorldTime() async
WorldTime instance = WorldTime(location: 'Jawa Timur', flag: 'jakarta.png', url: 'Asia/Jakarta');
await instance.getTime();
Navigator.pushReplacementNamed(context, '/home', arguments:
'location': instance.location,
'flag': instance.flag,
'time': instance.time,
);
正在接收数据的主屏幕:
Map data = ;
@override
Widget build(BuildContext context)
data = ModalRoute.of(context)!.settings.arguments as Map;
print(data['location']);
return Scaffold(
body: SafeArea(
child: Padding(
padding: const EdgeInsets.only(top: 50),
child: Column(
children: [
TextButton.icon(
onPressed: ()
Navigator.pushNamed(context, '/location');
,
icon: const Icon(Icons.edit_location),
label: const Text('Edit Location'),
),
const SizedBox(
height: 20,
),
Row(mainAxisAlignment: MainAxisAlignment.center, children: [
Text(
data['time'],
style: const TextStyle(
fontSize: 30,
),
),
]),
],
),
),
),
);
打印(数据['位置']);完美地打印数据,但在它之前立即显示上面的错误,这是否意味着打印方法在接收值之前期望数据的值为空?如何解决它
【问题讨论】:
【参考方案1】:您的方法setupWorldTime
是一个异步函数,在instance.getTime()
返回之前不会调用Navigator.pushReplacementNamed
位。因为您的主屏幕在没有设置参数的情况下启动,data = ModalRoute.of(context)!.settings.arguments as Map
会将数据设置为 null,从而导致您的错误。只有instance.getTime()
返回后,build()
才会再次被调用,这次是data != null
,您的消息就会消失。
要解决此问题,您应该在 build
函数中测试 data == null
并在数据确实仍然为空时显示其他内容(如加载指示器),或者使用 FutureBuilder
(首选)。
【讨论】:
谢谢,你拯救了我的一天!以上是关于在颤振中通过路由传递数据时检测到 null 类型的值的主要内容,如果未能解决你的问题,请参考以下文章
将快照数据从一个 dart 文件传递到颤振项目中的另一个文件