Move service extension to correct binding so images are repainted after enabling/disabling, update test (#68793)
* Move service extension to correct binding so images are repainted after enabling/disabling, update test
* Update binding.dart
diff --git a/packages/flutter/lib/src/rendering/binding.dart b/packages/flutter/lib/src/rendering/binding.dart
index 8b1a6fe3..e37afe6 100644
--- a/packages/flutter/lib/src/rendering/binding.dart
+++ b/packages/flutter/lib/src/rendering/binding.dart
@@ -60,6 +60,17 @@
assert(() {
// these service extensions only work in debug mode
registerBoolServiceExtension(
+ name: 'invertOversizedImages',
+ getter: () async => debugInvertOversizedImages,
+ setter: (bool value) async {
+ if (debugInvertOversizedImages != value) {
+ debugInvertOversizedImages = value;
+ return _forceRepaint();
+ }
+ return Future<void>.value();
+ },
+ );
+ registerBoolServiceExtension(
name: 'debugPaint',
getter: () async => debugPaintSizeEnabled,
setter: (bool value) {
diff --git a/packages/flutter/lib/src/widgets/binding.dart b/packages/flutter/lib/src/widgets/binding.dart
index dc21b9f..c4743c8 100644
--- a/packages/flutter/lib/src/widgets/binding.dart
+++ b/packages/flutter/lib/src/widgets/binding.dart
@@ -461,18 +461,6 @@
assert(() {
registerBoolServiceExtension(
- name: 'invertOversizedImages',
- getter: () async => debugInvertOversizedImages,
- setter: (bool value) async {
- if (debugInvertOversizedImages != value) {
- debugInvertOversizedImages = value;
- return _forceRebuild();
- }
- return Future<void>.value();
- },
- );
-
- registerBoolServiceExtension(
name: 'debugAllowBanner',
getter: () => Future<bool>.value(WidgetsApp.debugAllowBannerOverride),
setter: (bool value) {
diff --git a/packages/flutter/test/foundation/service_extensions_test.dart b/packages/flutter/test/foundation/service_extensions_test.dart
index c6eb754..414575f 100644
--- a/packages/flutter/test/foundation/service_extensions_test.dart
+++ b/packages/flutter/test/foundation/service_extensions_test.dart
@@ -399,21 +399,44 @@
test('Service extensions - invertOversizedImages', () async {
Map<String, dynamic> result;
+ Future<Map<String, dynamic>> pendingResult;
+ bool completed;
expect(binding.frameScheduled, isFalse);
expect(debugInvertOversizedImages, false);
result = await binding.testExtension('invertOversizedImages', <String, String>{});
expect(result, <String, String>{'enabled': 'false'});
expect(debugInvertOversizedImages, false);
- result = await binding.testExtension('invertOversizedImages', <String, String>{'enabled': 'true'});
+ expect(binding.frameScheduled, isFalse);
+
+ pendingResult = binding.testExtension('invertOversizedImages', <String, String>{'enabled': 'true'});
+ completed = false;
+ pendingResult.whenComplete(() { completed = true; });
+ await binding.flushMicrotasks();
+ expect(binding.frameScheduled, isTrue);
+ expect(completed, isFalse);
+ await binding.doFrame();
+ await binding.flushMicrotasks();
+ expect(completed, isTrue);
+ expect(binding.frameScheduled, isFalse);
+ result = await pendingResult;
expect(result, <String, String>{'enabled': 'true'});
expect(debugInvertOversizedImages, true);
+
result = await binding.testExtension('invertOversizedImages', <String, String>{});
expect(result, <String, String>{'enabled': 'true'});
expect(debugInvertOversizedImages, true);
- result = await binding.testExtension('invertOversizedImages', <String, String>{'enabled': 'false'});
+ expect(binding.frameScheduled, isFalse);
+
+ pendingResult = binding.testExtension('invertOversizedImages', <String, String>{'enabled': 'false'});
+ await binding.flushMicrotasks();
+ expect(binding.frameScheduled, isTrue);
+ await binding.doFrame();
+ expect(binding.frameScheduled, isFalse);
+ result = await pendingResult;
expect(result, <String, String>{'enabled': 'false'});
expect(debugInvertOversizedImages, false);
+
result = await binding.testExtension('invertOversizedImages', <String, String>{});
expect(result, <String, String>{'enabled': 'false'});
expect(debugInvertOversizedImages, false);