List 颤振使用贴图比较2个对象列表,包含不工作

List 颤振使用贴图比较2个对象列表,包含不工作,list,dictionary,flutter,contains,List,Dictionary,Flutter,Contains,我有两个对象列表,即newList和oldList,如下所示: 新列表:[对象{id:-LhnrmWPWN2XĀcWdIAQW,标题:,类别:废弃,纬度:-17.8594103,经度:30.9615846},对象{id:-LhnpMHQ3l288W28qoDW,标题:,类别:坑洞,纬度:-17.8593472,经度:30.9614917}] 旧列表:[对象{id:-LhnpMHQ3l288W28qoDW,标题:,类别:坑洞,纬度:-17.8593472,经度:30.9614917}] 问题在于,

我有两个对象列表,即newList和oldList,如下所示:

新列表:
[对象{id:-LhnrmWPWN2XĀcWdIAQW,标题:,类别:废弃,纬度:-17.8594103,经度:30.9615846},对象{id:-LhnpMHQ3l288W28qoDW,标题:,类别:坑洞,纬度:-17.8593472,经度:30.9614917}]

旧列表:
[对象{id:-LhnpMHQ3l288W28qoDW,标题:,类别:坑洞,纬度:-17.8593472,经度:30.9614917}]

问题在于,使用以下代码检查newList中的所有对象是否都在oldList中时,使用contains不起作用:

newList.where((对象p)=>!oldList.contains(p))
.map((对象对象对象)=>print('\n\n\n\ntest\n$obj'))
.toList()

事实上,对于newList中对象的两个实例,这段代码都返回true

我希望代码应该只为其中一个对象返回true


请协助。

我想您需要检查两个对象是否相等

默认情况下,在Dart中,
==
如果两个对象是同一实例,则返回true

此外,您可以使用包来比较对象

或者,正如包提供的那样,您可以在不使用包的情况下执行此操作,您需要覆盖对象和hashCode staff中的
==
方法

class Person {
  final String name;

  const Person(this.name);

  @override
  bool operator ==(Object other) =>
    identical(this, other) ||
    other is Person &&
    runtimeType == other.runtimeType &&
    name == other.name;

  @override
  int get hashCode => name.hashCode;
}
但是我建议使用该软件包

import 'package:equatable/equatable.dart';

class Person extends Equatable {
  final String name;

  Person(this.name) : super([name]);
}

看起来您正在查找oldList是否在代码段中不包含该对象。尝试使用此代码

newList.where((i) => oldList.contains(i)).map((obj) {
    print('${obj.id}');
    return obj;
  }).toList();

下面介绍一下上面代码的工作原理。

代码段未打开