缺少具体实现“getter Equatable” / 属性相关问题

5

我正在学习许多关于使用Flutter的bloc的教程,但是遇到了一些不一致的问题。

我使用Android Studio,并使用来自Intellij v1.6.0的插件创建bloc代码。

对于bloc_event,我继续看到像这样的示例。

@immutable
abstract class FruitEvent extends Equatable {
  FruitEvent([List props = const []]) : super(props);
}

当我生成我的bloc文件并查看生成的初始_event文件时,它看起来像这样。
@immutable
abstract class SongEvent extends Equatable {
  const SongEvent();
}

如果我修改生成的代码并包含以下内容...
[List props = const []]) : super(props)

然后,我遇到了以下错误:"参数过多,期望为0个,实际为1个",这个错误与上面显示的 props 有关。

如果我将代码保留为 bloc 插件生成的样子,然后尝试通过添加以下内容来实现我的事件...

class AddSong extends SongEvent {}

然后我收到了一个"Missing concrete implementation of 'getter Equatable.props'"的错误提示。
这是我当前的bloc/song_event.dart代码:
import 'package:equatable/equatable.dart';
import 'package:meta/meta.dart';

@immutable
abstract class SongEvent extends Equatable {
  const SongEvent();
}

class AddSong extends SongEvent {}

问题 在FuitEvent示例中,我是否应该使用带有props的行?

我不明白我缺少什么,以及为什么当我尝试使用许多教程中所示的相同方法时会显示错误。

1个回答

6

Equatable 覆写 == 和 hashCode 方法,帮助你避免编写很多样板代码。

基本上,它有助于比较对象之间是否相等。

Equatable 是一个抽象类,并且它有一个 getter: List<Object> get props;。扩展 Equatable 的具体类必须覆盖该 getter。

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

@immutable
abstract class SongEvent extends Equatable {
  const SongEvent();
}

class AddSong extends SongEvent {}

在这种情况下,SongEvent 是一个抽象类,因此即使它扩展了 Equatable,也不必实现 props getter。但 AddSong 是一个扩展了 SongEvent 的具体类,而 SongEvent 又扩展了 Equatable,因此 AddSong 必须实现 Equatable 中的 getter。
import 'package:equatable/equatable.dart';
import 'package:meta/meta.dart';

@immutable
abstract class SongEvent extends Equatable {
  const SongEvent();
}

// Something like this
class AddSong extends SongEvent {
  final Song song;

  const AddSong(this.song);

  @override
  List<Object> get props => [song];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接