Flutter 中的状态错误

问题描述 投票:0回答:1

如何修复此错误:StateError(错误状态:在没有注册事件处理程序的情况下调用 add(SignUp Button Pressed)。请确保通过 on((event, eager) {...})) 注册处理程序

注册区块:

import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import '../../domain/repositories/user_repository.dart';

part 'sign_up_event.dart';
part 'sign_up_state.dart';

class SignUpBloc extends Bloc<SignUpEvent, SignUpState> {
  final UserRepository userRepository;

  SignUpBloc({required this.userRepository}) : super(SignUpInitial());

  @override
  Stream<SignUpState> mapEventToState(SignUpEvent event) async* {
    if (event is SignUpButtonPressed) {
      yield SignUpLoading();

      try {
        final email = event.email;
        final password = event.password;

        
        final result = await userRepository.registerUser(email, password);
        
        yield result.fold(
          (failure) => SignUpError(message: failure.toString()),
          (user) => SignUpSuccess(email: user.email),
        );
      } catch (error) {
        yield SignUpError(message: error.toString());
      }
    }
  }
}
flutter dart mobile helper
1个回答
0
投票

根据您的错误,我有另一种使用 bloc 的方法

handler via on((event, emit) {...}))

on<SignUpEvent>((event, emit) async {
  emit(SignUpLoading());

  try {
    final email = event.email;
    final password = event.password;

    
    final result = await userRepository.registerUser(email, password);
    
    await result.fold(
      (failure) async => SignUpError(message: failure.toString()),
      (user) async => SignUpSuccess(email: user.email),
    );
  } catch (error) {
    emit(SignUpError(message: error.toString()));
  }
});
© www.soinside.com 2019 - 2024. All rights reserved.