【问题标题】:Why are the objects instantiated differently in these BLOC events?为什么这些 BLOC 事件中的对象实例化不同?
【发布时间】:2020-09-29 07:10:38
【问题描述】:

我正在关注 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 }';
}

这里有什么区别?

【问题讨论】:

    标签: flutter flutter-bloc


    【解决方案1】:

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

    【讨论】:

    • 谢谢!你介意解释一下旧语法中实际上是什么吗?想了解一下
    • 思路是一样的。但不是将属性传递给 props getter,而是将它们传递给变量参数构造函数,默认情况下,它使用空列表 const [] 初始化。
    猜你喜欢
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 2021-04-17
    • 2019-07-16
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多