Flutter Bloc 测试“bloc.add”空安全问题
Posted
技术标签:
【中文标题】Flutter Bloc 测试“bloc.add”空安全问题【英文标题】:Flutter Bloc test "bloc.add" null safety issue 【发布时间】:2021-08-13 08:04:59 【问题描述】:我有一个flutter bloc_test,由于最近Flutter 升级涉及空安全性而失败。
我有以下代码
blocTest('get the usecase name',
build: ()
when(() => mockGetUseCaseName(any()))
.thenAnswer((_) async => Right(name));
return bloc;
,
act: (bloc) => bloc.add(GetUseCaseName(name)),
verify: (_) => verify(
() => mockGetUseCaseName(Params(string: name))));
我在“bloc.add”行得到错误
“'add'方法不能被无条件调用,因为receiver可以是'null'”
有什么想法吗?
【问题讨论】:
【参考方案1】:我找到了答案——对于其他有同样问题的人。我通过强制转换 bloc 类型来修复它(因为 act/bloc 是 Object? 类型)
act: (bloc) => cast<UseCaseBloc>(bloc).add(GetUseCaseName(name))
祝你有美好的一天。
起亚卡哈,
迈克·史密斯
【讨论】:
【参考方案2】:最正确的解决方案是明确数据类型
之前:
blocTest('get the usecase name',
build: ()
when(() => mockGetUseCaseName(any()))
.thenAnswer((_) async => Right(name));
return bloc;
,
act: (bloc) => bloc.add(GetUseCaseName(name)),
verify: (_) => verify(
() => mockGetUseCaseName(Params(string: name))));
之后:
blocTest<ClassBloc, ClassState>('get the usecase name',
build: ()
when(() => mockGetUseCaseName(any()))
.thenAnswer((_) async => Right(name));
return bloc;
,
act: (bloc) => bloc.add(GetUseCaseName(name)),
verify: (_) => verify(
() => mockGetUseCaseName(Params(string: name))));
【讨论】:
以上是关于Flutter Bloc 测试“bloc.add”空安全问题的主要内容,如果未能解决你的问题,请参考以下文章