Properly initialize RestorationManager in the TestBinding (#70398)

This commit is contained in:
Michael Goderbauer 2020-11-12 13:59:05 -08:00 committed by GitHub
parent c7f092515c
commit cca1215939
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 4 deletions

View File

@ -301,7 +301,9 @@ class _RootRestorationScopeState extends State<RootRestorationScope> {
@override
void dispose() {
ServicesBinding.instance!.restorationManager.removeListener(_replaceRootBucket);
if (_rootBucketValid) {
ServicesBinding.instance!.restorationManager.removeListener(_replaceRootBucket);
}
super.dispose();
}

View File

@ -189,13 +189,16 @@ abstract class TestWidgetsFlutterBinding extends BindingBase
final TestWindow _window;
@override
TestRestorationManager get restorationManager => _restorationManager;
late TestRestorationManager _restorationManager;
TestRestorationManager get restorationManager {
_restorationManager ??= createRestorationManager();
return _restorationManager!;
}
TestRestorationManager? _restorationManager;
/// Called by the test framework at the beginning of a widget test to
/// prepare the binding for the next test.
void reset() {
_restorationManager = createRestorationManager();
_restorationManager = null;
resetGestureBinding();
}

View File

@ -0,0 +1,13 @@
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
test('Can access restoration manager without crashing', () {
final AutomatedTestWidgetsFlutterBinding binding = AutomatedTestWidgetsFlutterBinding();
expect(binding.restorationManager, isA<RestorationManager>());
});
}