1

Null 安全性を含む Flutter の最近のアップグレードが原因で失敗している flutter bloc_test があります。

次のコードがあります

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」行でエラーが発生します

「レシーバーが「null」になる可能性があるため、メソッド「add」を無条件に呼び出すことはできません」

何か案は?

4

2 に答える 2

3

最も正しい解決策は、データ型を明示的にすることです

前:

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))));
于 2021-05-27T16:47:22.103 に答える
1

私は答えを見つけました-同じ問題を抱えている他の人のために。ブロック型をキャストして修正しました (act/bloc は Object? 型であるため)。

act: (bloc) => cast<UseCaseBloc>(bloc).add(GetUseCaseName(name))

良い一日を過ごしてください。

キア・カハ、

マイク・スミス

于 2021-05-25T04:40:05.657 に答える