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 @override
void dispose() { void dispose() {
if (_rootBucketValid) {
ServicesBinding.instance!.restorationManager.removeListener(_replaceRootBucket); ServicesBinding.instance!.restorationManager.removeListener(_replaceRootBucket);
}
super.dispose(); super.dispose();
} }

View File

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