迁移到 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
函数并从那里发出你的新状态。
我正在将一个项目从 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
函数并从那里发出你的新状态。