【问题标题】:With Flutter blocs, how do I use two events with the same callback?使用 Flutter blocs,我如何使用具有相同回调的两个事件?
【发布时间】:2021-10-26 13:35:48
【问题描述】:

我正在使用库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&lt;LoginFromSignup&gt;(_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 参数接受 LoginSubmitted。如何使它接受LoginSubmittedLoginFromSignup

【问题讨论】:

    标签: flutter dart flutter-bloc


    【解决方案1】:

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

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

    像这样:

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

    【讨论】:

      猜你喜欢
      • 2012-05-21
      • 2016-06-04
      • 2011-06-01
      • 2022-11-14
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      • 2018-01-10
      • 1970-01-01
      相关资源
      最近更新 更多