updateField<K extends Object> method

void updateField<K extends Object>(
  1. K field,
  2. Object? newValue
)

Updates a specific key in a Map or an index in a List.

field: Map key or List index. newValue: New value to assign.

Implementation

void updateField<K extends Object>(K field, Object? newValue) {
  final current = _value;
  if (current == null) {
    RxDebug.log("RxState(${name ?? id}) is null, cannot update field $field");
    return;
  }

  if (current is Map && current.containsKey(field)) {
    late final Map newMap;
    final oldFieldValue = current[field];
    if (deepEquals(oldFieldValue, newValue)) return;

    if (current is Map<String, Object>) {
      final m = Map<String, Object>.of(current);
      m[field as String] = newValue!;
      newMap = m;
    } else if (current is Map<String, dynamic>) {
      final m = Map<String, dynamic>.of(current);
      m[field as String] = newValue!;
      newMap = m;
    } else {
      // Fallback for generic Map
      final m = Map.from(current);
      m[field] = newValue;
      newMap = m;
    }
    _setFieldValue(newMap as T, field);

    return;
  }

  if (current is List && field is int) {
    if (field < 0 || field >= current.length) {
      RxDebug.log(" List index out of range: $field");
      return;
    }
    final oldItem = current[field];
    if (deepEquals(oldItem, newValue)) return;

    final newList = (current as List).toList();
    newList[field] = newValue;
    _setFieldValue(newList as T, field);

    return;
  }

  // Fallback: full replacement
  if (newValue is T) {
    _setValue(newValue); // ✅ 不是 field
  }
}