Dart Null Safety:无法无条件调用方法“[]”,因为接收者可以是 'null'
Dart Null Safety: The method '[]' can't be unconditionally invoked because the receiver can be 'null'
我的 Flutter 应用程序中有以下 Text( ... ) 小部件
Text(
data['location'],
style: TextStyle(
fontSize: 40,
letterSpacing: 2,
color: Colors.white
)
但是,它一直向我显示无法访问数据['location'] 的错误,因为它可能为空。我猜它与 Dart 的空安全检查有关
我的代码流程是这样的:
我在 Text( ... ) 小部件中访问的数据对象在上面声明如下:
Object? data;
之后,当我从另一个屏幕向这个屏幕传递数据时,我使用上面声明的数据对象并进行以下赋值:
data = ModalRoute.of(context)!.settings.arguments;
最后,我在我的 Text( ... ) 小部件中访问了这个数据对象
我应该怎么做才能避免这个错误?
1 - data
属于 Object
类型,因此您不能将 []
与 Object
类型一起使用,因为它不会重载 []
运算符
2 - 假设参数是 List
类型,您必须先将其转换为 Map
,然后像这样访问它的数据
(data as Map?)?["location"]
3 - data
可以为空类型
您需要做的就是告诉 dart
我确定 data
不为 null 通过 bang operator
结局代码应该是这样的:
Text(
(data as Map?)?["location"]!, // <---
style: TextStyle(
fontSize: 40,
letterSpacing: 2,
color: Colors.white
)
arguments 属性 有一个 return 类型 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.
我的 Flutter 应用程序中有以下 Text( ... ) 小部件
Text(
data['location'],
style: TextStyle(
fontSize: 40,
letterSpacing: 2,
color: Colors.white
)
但是,它一直向我显示无法访问数据['location'] 的错误,因为它可能为空。我猜它与 Dart 的空安全检查有关
我的代码流程是这样的:
我在 Text( ... ) 小部件中访问的数据对象在上面声明如下:
Object? data;
之后,当我从另一个屏幕向这个屏幕传递数据时,我使用上面声明的数据对象并进行以下赋值:
data = ModalRoute.of(context)!.settings.arguments;
最后,我在我的 Text( ... ) 小部件中访问了这个数据对象
我应该怎么做才能避免这个错误?
1 - data
属于 Object
类型,因此您不能将 []
与 Object
类型一起使用,因为它不会重载 []
运算符
2 - 假设参数是 List
类型,您必须先将其转换为 Map
,然后像这样访问它的数据
(data as Map?)?["location"]
3 - data
可以为空类型
您需要做的就是告诉 dart
我确定 data
不为 null 通过 bang operator
结局代码应该是这样的:
Text(
(data as Map?)?["location"]!, // <---
style: TextStyle(
fontSize: 40,
letterSpacing: 2,
color: Colors.white
)
arguments 属性 有一个 return 类型 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.