我的 Flutter 应用程序中有以下 Text( ... ) 小部件
Text(
data['location'],
style: TextStyle(
fontSize: 40,
letterSpacing: 2,
color: Colors.white
)
但是,它不断向我显示无法访问 data['location'] 的错误,因为它可以为 null。我想这与 Dart 的 null 安全检查有关
我的代码流程是这样的:
我在 Text( ... ) 小部件中访问的数据对象在上面声明如下:
Object? data;
之后,当我从另一个屏幕向这个屏幕传递数据时,我使用上面声明的数据对象并执行以下赋值:
data = ModalRoute.of(context)!.settings.arguments;
最后,我在 Text( ... ) 小部件中访问此数据对象
我应该怎么做才能避免这个错误?
答案 0 :(得分:0)
1 - data
属于 Object
类型,因此您不能将 []
与 Object
类型一起使用,因为它不会重载 []
运算符
2 - 假设参数的类型为 List
,您必须先将其强制转换为 Map
,然后像这样访问数据
(data as Map?)?["location"]
3 - data
是可空类型
你需要做的就是告诉 dart
我确信 data
不是空的 bang 运算符
结局代码应该是这样的:
Text(
(data as Map?)?["location"]!, // <---
style: TextStyle(
fontSize: 40,
letterSpacing: 2,
color: Colors.white
)
答案 1 :(得分:0)
arguments 属性的返回类型为 Object?
,这是最通用的类型。
要使用实际数据,您首先需要使用 Typecast as
运算符。
var data = ModalRoute.of(context)?.settings.arguments as Map<String, dynamic>?;
因为 data
可以为 null
data ??= {'location': 'behind you'}; // Avoids null access.
data!['location']; // Will result in runtime exception if data is null.