Flutter/Dart中绑定对象值更新后如何修改类参数值?
问题原因
你遇到的问题核心是值类型的传递特性:double是值类型,实例化CabsOfAcacia时,你把cabsDistanceFromUser列表里的null值直接复制给了distanceFromUserOfCab,而且这个属性被标记为final——一旦赋值就再也不能修改。后续你更新列表里的元素,只是改变了列表存储的内容,和类实例里已经存好的null没有任何关系,自然不会同步。
解决方法
这里给你两种适合新手的方案:
方案1:取消属性的final限制,手动同步更新
把distanceFromUserOfCab的final去掉,这样每次更新列表后,手动给类实例的这个属性重新赋值:
class CabsOfAcacia{ late final String nameOfCab; late final String assetPathOfCab; late final LatLng locationOfCab; late double? distanceFromUserOfCab; // 移除final修饰符 CabsOfAcacia( this.nameOfCab, this.assetPathOfCab, this.locationOfCab, this.distanceFromUserOfCab); }
更新列表和实例属性的代码示例:
// 更新列表值 cabsDistanceFromUser[0] = 8.3; // 同步更新实例的属性 Sinan.distanceFromUserOfCab = cabsDistanceFromUser[0];
方案2:让类持有列表引用和索引,动态获取最新值
把列表和索引传给类,用计算属性每次访问时从列表取最新值,这样列表更新后,类实例拿到的自然是最新数据:
class CabsOfAcacia{ late final String nameOfCab; late final String assetPathOfCab; late final LatLng locationOfCab; final List<double?> _distanceList; final int _index; // 计算属性,每次访问都会从列表对应位置取最新值 double? get distanceFromUserOfCab => _distanceList[_index]; CabsOfAcacia( this.nameOfCab, this.assetPathOfCab, this.locationOfCab, this._distanceList, this._index); }
实例化类的时候改成这样:
late CabsOfAcacia Sinan = CabsOfAcacia('Sinan', 'assets/taxi.png', cabsLocations.elementAt(0), cabsDistanceFromUser, 0); late CabsOfAcacia Seyit = CabsOfAcacia('Seyit', 'assets/taxi.png', cabsLocations.elementAt(1), cabsDistanceFromUser, 1); // 其他实例对应索引2、3、4即可
之后你只需要更新列表:
cabsDistanceFromUser[0] = 12.7;
直接访问Sinan.distanceFromUserOfCab就能拿到最新的12.7,不需要额外同步操作。
内容的提问来源于stack exchange,提问作者Doğan Erarslan
相关产品推荐
相关产品推荐

