Flutter结合Getx时list.indexOf()始终返回-1问题求助
解决Flutter中Getx列表indexOf始终返回-1的问题
你遇到的问题本质是Dart的对象比较机制:indexOf默认用引用相等判断,也就是只有当传入的对象和列表里的对象是同一个内存实例时才会匹配成功。哪怕两个Product对象的字段完全一样,只要是不同实例,indexOf就会返回-1。
下面给你两种可行的解决办法:
方法一:重写Product类的相等判断方法
在你的Product类里重写==运算符和hashCode,让Dart根据对象的内容(比如唯一id)来判断是否相等:
class Product { final String id; final String name; // 其他字段... Product({required this.id, required this.name}); // 重写==运算符,基于id判断相等 @override bool operator ==(Object other) => identical(this, other) || other is Product && runtimeType == other.runtimeType && id == other.id; // 重写hashCode,和==判断逻辑保持一致 @override int get hashCode => id.hashCode; }
修改后,indexOf就能根据对象内容匹配到对应元素了。
方法二:用indexWhere自定义匹配逻辑
如果不想修改Product类,可以用indexWhere方法直接指定判断规则,比如根据product的唯一标识id:
var targetProduct = _cartList[index].product!; var my_index = Get.find<ProductsController>() .productsList .indexWhere((product) => product.id == targetProduct.id); print(my_index);
这种方式更灵活,无需修改实体类,直接在调用时定义匹配逻辑即可。
内容的提问来源于stack exchange,提问作者Fedy Belaid
相关产品推荐
相关产品推荐

