【问题标题】:How to compare List of Map(i.e List<Map>) in dart using equatable package?如何使用 equatable 包比较 dart 中的地图列表(即 List<Map>)?
【发布时间】:2022-08-10 22:33:31
【问题描述】:

我需要使用 equatable for 在 bloc 状态类中比较 dart 中的地图列表(即 List < Map >)。但问题是 equatable 似乎没有比较地图属性列表。

class WaterCartDetailState extends Equatable {
  final String? status;
  final WateCartDetailModel? result;
  final List<Map>? mapData;
  const WaterCartDetailState({this.status, this.result, this.mapData});

  WaterCartDetailState copyWith(
      {String? status, WateCartDetailModel? result, List<Map>? mapData}) {
    return WaterCartDetailState(
        status: status ?? this.status,
        result: result ?? this.result,
        mapData: mapData ?? this.mapData);
  }

  @override
  List<Object?> get props => [status, result, mapData];
}

由于 equatable 没有比较地图列表。我不能发出新的状态变化。

  • 这回答了你的问题了吗? How can I compare Lists for equality in Dart?
  • 部分地..但我想平等地做比较。
  • 什么是地图模型?它是 Map<E, T> 集合还是您定义的自定义类型?
  • 它只是 dart 提供的原始地图,而不是任何自定义类型

标签: flutter dart bloc equatable


【解决方案1】:

来自Docs

平等的属性应始终被复制而不是修改。如果 一个平等的类包含一个列表或者地图作为属性,请务必 利用List.from或者地图.from分别确保平等是 评估基于属性的值,而不是 参考。

yield WaterCartDetailState(status, result, List<Map>.from(mapData));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 2020-03-28
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 2023-01-17
    相关资源
    最近更新 更多