迁移到 BLoC 7.2- 嵌套流 - yield* inside other stream

Migrate to BLoC 7.2- Nested Streams - yield* inside other stream

我正在将一个项目从 Bloc 7.0 迁移到 7.2

我在尝试处理以下 Stream 的迁移时遇到问题,因为它正在调用其中的另一个流:

 Stream<CustomerState> _mapUpdateNewsletter({...}) async* {
    try {
      [...]
      
      yield* _mapGetCustomer(); // Calling another Stream here

      Toast.showSuccess(message: successMessage);
    } ...
  }

这是所谓的 Stream 以前的样子

 Stream<CustomerState> _mapGetCustomer() async* {
    try {
      final customer = await _customerRepository.getCustomer();
      yield state.getCustomerSuccess(customer);
    } catch (error, stackTrace) {
      ApiError.handleApiError(error, stackTrace);
    }
  }

这是我将其迁移到的目标:

  Future<void> _onGetCustomer(
      GetCustomer event, Emitter<CustomerState> emit) async {
    try {
      final customer = await _customerRepository.getCustomer();
      emit(state.getCustomerSuccess(customer));
    } catch (error, stackTrace) {
      ApiError.handleApiError(error, stackTrace);
    }
  }

我现在应该如何在 Bloc 7.2 中调用它?

 Future<void> _onUpdateNewsletter(UpdateNewsletter event, Emitter<CustomerState> emit) async {
    try {
     ...
     yield* _onGetCustomer; // How do I call this async future here?
      Toast.showSuccess(message: event.successMessage);
    } ...
}

在新版本的bloc中,您不必编写流函数。您有一个名为 emit 的函数,并且可以从您集团中的每个函数调用此函数并传递新状态。所以删除 yield* 并调用 _onGetCustomer 函数并从那里发出你的新状态。