为什么我在 Flutter 测试期间使用 rootBundle.load 得到 "Null check operator used on a null value"?
Why am I getting "Null check operator used on a null value" from using rootBundle.load during a Flutter test?
我找了好久,在SO或其他网站上都没有找到解决这个问题的明确方法。
我有一个 Flutter 测试:
test('Create Repo and Read JSON', () {
Repository repository = CreateRepository();
...
}
CreateRepository()
最终调用了一个方法,代码如下:
var jsonString = await rootBundle.loadString(vendorDataFilePath);
这会导致错误:Null check operator used on a null value
None 我执行的代码使用了空检查运算符 (!
) 那么这个错误是从哪里来的,我该如何修复它?
在调试模式下运行测试后,我发现错误实际上是在Flutter本身的asset_bundle.dart
中,而不是来自我的代码。
final ByteData? asset =
await ServicesBinding.instance!.defaultBinaryMessenger.send('flutter/assets', encoded.buffer.asByteData());
导致错误的是instance!
,因为此时instance
实际上为空,所以空检查运算符(!
)失败。
不幸的是,这不是我们通常从 Flutter 获得的描述性很好的错误消息,而是直接来自 Dart 的更隐蔽的错误描述。在我的案例中,根本原因是测试中需要额外调用以确保 instance
得到初始化。
test('Create Repo and Read JSON', () {
// Add the following line to the top of the test
TestWidgetsFlutterBinding.ensureInitialized(); // <--
Repository repository = CreateRepository();
...
}
我找了好久,在SO或其他网站上都没有找到解决这个问题的明确方法。
我有一个 Flutter 测试:
test('Create Repo and Read JSON', () {
Repository repository = CreateRepository();
...
}
CreateRepository()
最终调用了一个方法,代码如下:
var jsonString = await rootBundle.loadString(vendorDataFilePath);
这会导致错误:Null check operator used on a null value
None 我执行的代码使用了空检查运算符 (!
) 那么这个错误是从哪里来的,我该如何修复它?
在调试模式下运行测试后,我发现错误实际上是在Flutter本身的asset_bundle.dart
中,而不是来自我的代码。
final ByteData? asset =
await ServicesBinding.instance!.defaultBinaryMessenger.send('flutter/assets', encoded.buffer.asByteData());
导致错误的是instance!
,因为此时instance
实际上为空,所以空检查运算符(!
)失败。
不幸的是,这不是我们通常从 Flutter 获得的描述性很好的错误消息,而是直接来自 Dart 的更隐蔽的错误描述。在我的案例中,根本原因是测试中需要额外调用以确保 instance
得到初始化。
test('Create Repo and Read JSON', () {
// Add the following line to the top of the test
TestWidgetsFlutterBinding.ensureInitialized(); // <--
Repository repository = CreateRepository();
...
}