带有自定义列表的 IndexOf (Flutter - Dart)

Ste*_*403 1 list indexof dart flutter

我想获取此列表中名称为 test 的 ListA的索引

\n

头等舱

\n
class ListA {\n  String name;\n\n  ListA({this.name});\n}\n
Run Code Online (Sandbox Code Playgroud)\n

二等舱

\n
List<ListA> abc = [\n\n  ListA(name: 'test'),\n\n];\n
Run Code Online (Sandbox Code Playgroud)\n

之后,我得到了一个带按钮的无状态 Wiget,\n这就是 onPressed 方法

\n
onPressed: () {\n            i = abc.indexOf(ListA(name: 'test'));\n            print(i);\n          },\n
Run Code Online (Sandbox Code Playgroud)\n

我找不到\xc2\xb4t任何错误,但不幸的是\xc2\xb4s总是返回-1,这意味着它无法\xc2\xb4t找到它

\n

我究竟做错了什么 ?

\n

Dan*_*eny 5

发生这种情况是因为您ListA在调用 时创建了一个新的indexOf,这意味着您有两个不同的ListA。这类似于执行以下操作:

print(ListA(name: 'test') == ListA(name: 'test'));
Run Code Online (Sandbox Code Playgroud)

这将打印,false因为它们不是同一个对象。

您可以尝试以下方法之一:

  1. 保留对您使用的第一个引用的引用ListA,并调用indexOf传递相同的引用
  2. 使用const的实例ListA(将name字段标记为final,添加const到构造函数定义及其调用中)
  3. 覆盖类上的==运算符and ,以便两个不同的实例如果字段/项相同则被视为相同hashCodeListAListA
  4. 代替indexOf,使用indexWhere并检查名称 ( indexWhere((l) => l.name == 'test'))