我正在使用库flutter_bloc
,我有两个不同的事件 - 一个接受参数,另一个不接受。
class LoginSubmitted extends LoginEvent {
const LoginSubmitted();
}
class LoginFromSignup extends LoginEvent {
const LoginFromSignup({
this.username,
this.password,
});
final String username;
final String password;
@override
List<Object> get props => [username, password];
}
但是,这两个事件几乎会做同样的事情。我在login_bloc
中无法实现它。理想情况下,我想要这样的东西:
on<LoginUsernameChanged>(_onUsernameChanged);
on<LoginPasswordChanged>(_onPasswordChanged);
on<LoginSubmitted>(_onSubmitted);
on<LoginFromSignup>(_onSubmitted); <-- this doesn't work
正如你在上面看到的,on<LoginFromSignup>(_onSubmitted);
行给了我一个错误:
The argument type 'void Function(LoginSubmitted, Emitter<LoginState>)' can't be assigned to the parameter type 'FutureOr<void> Function(LoginFromSignup, Emitter<LoginState>)'.
我假设我的方法定义是关闭的:
void _onSubmitted(
LoginSubmitted event, <--- this might be problematic
Emitter<LoginState> emit,
) async {
在上面的例子中,event
arg 接受LoginSubmitted
。我如何让它同时接受LoginSubmitted
和LoginFromSignup
?
这是因为LoginFromSignup
不是LoginSubmitted
的子类型。
你可以更改_onSubmitted
函数以接受LoginEvent
,即(LoginFromSignup
和LoginSubmitted
)扩展的类,并且是其子类型。
喜欢这个:
void _onSubmitted(LoginEvent event, Emitter<LoginState> emit)