【问题标题】:IndexOf with custom Lists (Flutter - Dart)带有自定义列表的 IndexOf (Flutter - Dart)
【发布时间】:2020-12-11 13:42:32
【问题描述】:

我想在这个列表中获取 ListA 名称为 test 的索引

头等舱

class ListA {
  String name;

  ListA({this.name});
}

二等

List<ListA> abc = [

  ListA(name: 'test'),

];

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

onPressed: () {
            i = abc.indexOf(ListA(name: 'test'));
            print(i);
          },

我找不到任何错误,但不幸的是它总是返回-1,这意味着它找不到它

我做错了什么?

【问题讨论】:

    标签: list flutter dart indexof


    【解决方案1】:

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

    print(ListA(name: 'test') == ListA(name: 'test'));
    

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

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

    1. 保留对您使用的第一个 ListA 的引用,并调用 indexOf 传递相同的引用
    2. 使用ListA 的const 实例(将name 字段标记为final,将const 添加到构造函数定义及其调用中)
    3. 覆盖ListA 类上的== operator 和hashCode,以便ListA 的两个不同实例在它们的字段/项相同时被视为相同
    4. 不要使用indexOf,而是使用indexWhere 并检查名称(indexWhere((l) =&gt; l.name == 'test'))

    【讨论】:

      猜你喜欢
      • 2019-07-09
      • 2020-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 1970-01-01
      • 2018-04-04
      • 2011-05-31
      相关资源
      最近更新 更多