diff --git a/packages/flutter/lib/src/widgets/binding.dart b/packages/flutter/lib/src/widgets/binding.dart index c4dcad0fbef..34ff8f92d3a 100644 --- a/packages/flutter/lib/src/widgets/binding.dart +++ b/packages/flutter/lib/src/widgets/binding.dart @@ -289,6 +289,15 @@ mixin WidgetsBinding on BindingBase, SchedulerBinding, GestureBinding, RendererB return _forceRebuild(); }, ); + + registerServiceExtension( + name: 'didSendFirstFrameEvent', + callback: (_) async { + return { + 'enabled': _needToReportFirstFrame ? 'false' : 'true' + }; + }, + ); } assert(() { diff --git a/packages/flutter/test/foundation/service_extensions_test.dart b/packages/flutter/test/foundation/service_extensions_test.dart index 8cea1e24879..ba22bb279a0 100644 --- a/packages/flutter/test/foundation/service_extensions_test.dart +++ b/packages/flutter/test/foundation/service_extensions_test.dart @@ -104,7 +104,20 @@ void main() { test('Service extensions - pretest', () async { binding = TestServiceExtensionsBinding(); expect(binding.frameScheduled, isTrue); + + // We need to test this service extension here because the result is true + // after the first binding.doFrame() call. + Map firstFrameResult; + expect(binding.debugDidSendFirstFrameEvent, isFalse); + firstFrameResult = await binding.testExtension('didSendFirstFrameEvent', {}); + expect(firstFrameResult, { 'enabled': 'false' }); + await binding.doFrame(); // initial frame scheduled by creating the binding + + expect(binding.debugDidSendFirstFrameEvent, isTrue); + firstFrameResult = await binding.testExtension('didSendFirstFrameEvent', {}); + expect(firstFrameResult, { 'enabled': 'true' }); + expect(binding.frameScheduled, isFalse); expect(debugPrint, equals(debugPrintThrottled)); @@ -548,7 +561,7 @@ void main() { // If you add a service extension... TEST IT! :-) // ...then increment this number. - expect(binding.extensions.length, 24 + widgetInspectorExtensionCount); + expect(binding.extensions.length, 25 + widgetInspectorExtensionCount); expect(console, isEmpty); debugPrint = debugPrintThrottled;