handleRestorationUpdateFromEngine method
Called by the RestorationManager on itself to parse the restoration information obtained from the engine.
The enabled
parameter indicates whether the engine wants to receive
restoration data. When enabled
is false, state restoration is turned
off and the rootBucket is set to null. When enabled
is true, the
provided restoration data
will be parsed into a new rootBucket. If
data
is null, an empty rootBucket will be instantiated.
Subclasses in test frameworks may call this method at any time to inject restoration data (obtained e.g. by overriding sendToEngine) into the RestorationManager. When the method is called before the rootBucket is accessed, rootBucket will complete synchronously the next time it is called.
Implementation
@protected
void handleRestorationUpdateFromEngine({required bool enabled, required Uint8List? data}) {
assert(enabled || data == null);
_isReplacing = _rootBucketIsValid && enabled;
if (_isReplacing) {
SchedulerBinding.instance.addPostFrameCallback((Duration _) {
_isReplacing = false;
}, debugLabel: 'RestorationManager.resetIsReplacing');
}
final RestorationBucket? oldRoot = _rootBucket;
_rootBucket = enabled
? RestorationBucket.root(manager: this, rawData: _decodeRestorationData(data))
: null;
_rootBucketIsValid = true;
assert(_pendingRootBucket == null || !_pendingRootBucket!.isCompleted);
_pendingRootBucket?.complete(_rootBucket);
_pendingRootBucket = null;
if (_rootBucket != oldRoot) {
notifyListeners();
oldRoot?.dispose();
}
}