diff --git a/packages/flutter/lib/src/rendering/binding.dart b/packages/flutter/lib/src/rendering/binding.dart index 8b1a6fe3eb..e37afe6672 100644 --- a/packages/flutter/lib/src/rendering/binding.dart +++ b/packages/flutter/lib/src/rendering/binding.dart @@ -59,6 +59,17 @@ mixin RendererBinding on BindingBase, ServicesBinding, SchedulerBinding, Gesture 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.value(); + }, + ); registerBoolServiceExtension( name: 'debugPaint', getter: () async => debugPaintSizeEnabled, diff --git a/packages/flutter/lib/src/widgets/binding.dart b/packages/flutter/lib/src/widgets/binding.dart index dc21b9f557..c4743c86d2 100644 --- a/packages/flutter/lib/src/widgets/binding.dart +++ b/packages/flutter/lib/src/widgets/binding.dart @@ -460,18 +460,6 @@ mixin WidgetsBinding on BindingBase, ServicesBinding, SchedulerBinding, GestureB } assert(() { - registerBoolServiceExtension( - name: 'invertOversizedImages', - getter: () async => debugInvertOversizedImages, - setter: (bool value) async { - if (debugInvertOversizedImages != value) { - debugInvertOversizedImages = value; - return _forceRebuild(); - } - return Future.value(); - }, - ); - registerBoolServiceExtension( name: 'debugAllowBanner', getter: () => Future.value(WidgetsApp.debugAllowBannerOverride), diff --git a/packages/flutter/test/foundation/service_extensions_test.dart b/packages/flutter/test/foundation/service_extensions_test.dart index c6eb754104..414575f4a8 100644 --- a/packages/flutter/test/foundation/service_extensions_test.dart +++ b/packages/flutter/test/foundation/service_extensions_test.dart @@ -399,21 +399,44 @@ void main() { test('Service extensions - invertOversizedImages', () async { Map result; + Future> pendingResult; + bool completed; expect(binding.frameScheduled, isFalse); expect(debugInvertOversizedImages, false); result = await binding.testExtension('invertOversizedImages', {}); expect(result, {'enabled': 'false'}); expect(debugInvertOversizedImages, false); - result = await binding.testExtension('invertOversizedImages', {'enabled': 'true'}); + expect(binding.frameScheduled, isFalse); + + pendingResult = binding.testExtension('invertOversizedImages', {'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, {'enabled': 'true'}); expect(debugInvertOversizedImages, true); + result = await binding.testExtension('invertOversizedImages', {}); expect(result, {'enabled': 'true'}); expect(debugInvertOversizedImages, true); - result = await binding.testExtension('invertOversizedImages', {'enabled': 'false'}); + expect(binding.frameScheduled, isFalse); + + pendingResult = binding.testExtension('invertOversizedImages', {'enabled': 'false'}); + await binding.flushMicrotasks(); + expect(binding.frameScheduled, isTrue); + await binding.doFrame(); + expect(binding.frameScheduled, isFalse); + result = await pendingResult; expect(result, {'enabled': 'false'}); expect(debugInvertOversizedImages, false); + result = await binding.testExtension('invertOversizedImages', {}); expect(result, {'enabled': 'false'}); expect(debugInvertOversizedImages, false);