set<T> method
(en) Sets the value for the specified slot. Any listeners associated with the slot will be notified of the change.
(ja) 指定されたスロットに関して値をセットします。 スロットと紐付いたリスナーに変更が通知されます。
key: Target slot.value: The value to set.
Implementation
@override
void set<T>(StateSlot<T> key, T value) {
if (!_data.containsKey(key.name)) {
throw StateError('StateSlot "${key.name}" is not initialized');
}
final oldValue = _data[key.name] as T;
// 型チェック
UtilCopy.validateJsonableOrClonableFile<T>(
value,
key,
context: 'state slot "$key.name"',
);
if (key.caster != null) {
_data[key.name] = key.caster!(
UtilCopy.deepCopyJsonableOrClonableFile(value),
);
_debugListener?.call(
key,
key.caster!(UtilCopy.deepCopyJsonableOrClonableFile(oldValue)),
key.caster!(UtilCopy.deepCopyJsonableOrClonableFile(value)),
);
} else {
_data[key.name] = UtilCopy.deepCopyJsonableOrClonableFile(value) as T;
// Untyped but safe deep copy (Map<String, dynamic>, List<dynamic>, primitives)
_debugListener?.call(
key,
UtilCopy.deepCopyJsonableOrClonableFile(oldValue) as T,
UtilCopy.deepCopyJsonableOrClonableFile(value) as T,
);
}
_notify(key);
// バッチ処理中でなければ_stateListenerに通知する。
if (!_isBatch) {
_flushStateListener();
}
}