【问题标题】:Flutter NoSuchMethodError in Bloc在 Bloc 中颤振 NoSuchMethodError
【发布时间】:2020-10-14 04:14:20
【问题描述】:

我有点卡住了,我的颤振应用程序中有一个 Bloc,当相机找到二维码时需要调用配置检查 (isConfigured())。但我总是遇到 [错误:flutter/lib/ui/ui_dart_state.cc(157)] 未处理的异常:未处理的错误 NoSuchMethodError:在 null 上调用了方法“isConfigured”。 接收方:空 尝试调用:isConfigured() 发生在 'QrBloc' 的 bloc 实例中。

这是联盟

class QrBloc extends Bloc<QrEvent, QrState> {
  final ValidateTicket validateTicket;
  final ConfigureCode configureCode;
  final QrCodeRepository repository;

  QrBloc(
      {@required ValidateTicket validateTicket,
      @required ConfigureCode configureCode,
      this.repository})
      : assert(validateTicket != null, configureCode != null),
        validateTicket = validateTicket,
        configureCode = configureCode;

  @override
  QrState get initialState => InitialState();

  @override
  Stream<QrState> mapEventToState(
    QrEvent event,
  ) async* {
    if (event is QrCodeScanned) {
      final bool isConfigured = await repository.isConfigured();
      if (isConfigured) {
        final result = await validateTicket(ValidateParams(code: event.qrCode));
        yield* _eitherTicketOrErrorState(result);
      } else {
        yield ConfigurationState();
      }
    } else if (event is SaveConfiguration) {
      final failureOrNot =
          await configureCode(ConfigureParams(code: event.qrCode));
      yield* _eitherConfigOrErrorState(failureOrNot);
    }
  }

  Stream<QrState> _eitherConfigOrErrorState(
    Either<Failure, ConfigurationQrCodeModel> either,
  ) async* {
    yield either.fold(
      (failure) => Error(message: _mapFailureToMessage(failure)),
      (qrCode) => InitialState(),
    );
  }

  Stream<QrState> _eitherTicketOrErrorState(
    Either<Failure, TicketModel> either,
  ) async* {
    yield either.fold(
      (failure) => Error(message: _mapFailureToMessage(failure)),
      (qrCode) {
        if (qrCode.ticketValid == true) {
          return ValidTicketState(ticket: qrCode);
        } else {
          return InvalidTicketState(ticket: qrCode);
        }
      },
    );
  }

  String _mapFailureToMessage(Failure failure) {
    switch (failure.runtimeType) {
      case ServerFailure:
        return serverExceptionText;
      default:
        return unexpectedExceptionText;
    }
  }
}

这就是电话

sl().add(QrCodeScanned(qrCode: data));

【问题讨论】:

    标签: flutter


    【解决方案1】:

    QrBloc 最初在哪里实例化?我相信存储库字段为空。通常,当它说“方法'xyz'在null上被调用”时。这意味着该特定方法是从空值调用的。

    【讨论】:

    • QRBloc 被实例化
    猜你喜欢
    • 2019-07-14
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 2019-06-04
    • 2020-05-13
    • 2020-09-21
    • 2020-07-23
    • 2021-08-06
    相关资源
    最近更新 更多