首页 > 解决方案 > 为什么这些 BLOC 事件中的对象实例化不同?

问题描述

我正在关注 Felix Angelov 关于 Flutter Bloc 模式的教程“https://www.hidigital.io/blog/2020/06/flutter-login-tutorial-with-flutter-bloc”。

为什么AuthenticationEvent实例化的类是这样的:

import 'package:meta/meta.dart';
import 'package:equatable/equatable.dart';

abstract class AuthenticationEvent extends Equatable {
  AuthenticationEvent([List props = const []]) : super(props);  <--------- this line
}

class AppStarted extends AuthenticationEvent {
  @override
  String toString() => 'AppStarted';
}

class LoggedIn extends AuthenticationEvent {
  final String token;

  LoggedIn({@required this.token}) : super([token]);

  @override
  String toString() => 'LoggedIn { token: $token }';
}

class LoggedOut extends AuthenticationEvent {
  @override
  String toString() => 'LoggedOut';
}

而对于 LoginEvent 类,它的实例化如下:

import 'package:meta/meta.dart';
import 'package:equatable/equatable.dart';

abstract class LoginEvent extends Equatable {
  const LoginEvent(); <----------------------------------------- this line
}

class LoginButtonPressed extends LoginEvent {
  final String username;
  final String password;

  const LoginButtonPressed({
    @required this.username,
    @required this.password,
  });

  @override
  List<Object> get props => [username, password];

  @override
  String toString() =>
      'LoginButtonPressed { username: $username, password: $password }';
}

这里有什么区别?

标签: flutterflutter-bloc

解决方案


AuthenticationEvent 是用旧版本的 Equatable 库编写的。您不能在当前版本中使用该语法。


推荐阅读