使用 Flutter 集团,如何使用具有相同回调的两个事件?



我正在使用库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 {

在上面的例子中,eventarg 接受LoginSubmitted。我如何让它同时接受LoginSubmittedLoginFromSignup

这是因为LoginFromSignup不是LoginSubmitted的子类型。

你可以更改_onSubmitted函数以接受LoginEvent,即(LoginFromSignupLoginSubmitted)扩展的类,并且是其子类型。

喜欢这个:

void _onSubmitted(LoginEvent event, Emitter<LoginState> emit)

最新更新