You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:11:04