setPath method
Returns a snapshot with updated content at path
.
Unmodified children and grandchildren are recycled. So, also their conversions are reused.
value
may either be a JSON-like object or a Snapshot.
When the updated value equals the old value, this snapshot will be
returned. In case the value
argument was a compatible (i.e. with same
decoder) Snapshot, the cache of the argument will be merged into this
snapshot.
When value
is a compatible snapshot (and the content changed), the
returned snapshot will contain value
in its cache.
When createParents
is true (default) and some of the parents do not
exist or are not of type Map or List, they are created (as a Map). When
createParents
is false an error will be thrown.
Implementation
Snapshot setPath(String path, dynamic value, {bool createParents = true}) {
var pointer =
JsonPointer.fromString(path.startsWith('/') ? path : '/$path');
if (pointer.segments.isEmpty) return set(value);
var content = value is Snapshot ? value.value : value;
var newContent = _setPathInContent(this.value, pointer.segments, content,
createParents: createParents);
var snapshot = Snapshot.fromJson(newContent, decoder: decoder);
if (value is Snapshot && value.decoder == decoder) {
var parent = snapshot.child(pointer.parent.toString());
(parent as _SnapshotImpl)._childrenCache[pointer.segments.last] = value;
}
return set(snapshot);
}