updateField<K extends Object> method
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
}
}