diff --git a/packages/flutter/lib/src/widgets/app.dart b/packages/flutter/lib/src/widgets/app.dart index 2a4284a2d39..41ff9d2c074 100644 --- a/packages/flutter/lib/src/widgets/app.dart +++ b/packages/flutter/lib/src/widgets/app.dart @@ -92,6 +92,8 @@ class WidgetsApp extends StatefulWidget { /// representative of what will happen in release mode. final bool debugShowCheckedModeBanner; + static bool showPerformanceOverlayOverride = false; + @override WidgetsAppState createState() => new WidgetsAppState(); } @@ -186,7 +188,7 @@ class WidgetsAppState extends State implements BindingO child: result ); } - if (config.showPerformanceOverlay) { + if (config.showPerformanceOverlay || WidgetsApp.showPerformanceOverlayOverride) { result = new Stack( children: [ result, diff --git a/packages/flutter/lib/src/widgets/binding.dart b/packages/flutter/lib/src/widgets/binding.dart index 42f0b43aec3..cc9e03eadbc 100644 --- a/packages/flutter/lib/src/widgets/binding.dart +++ b/packages/flutter/lib/src/widgets/binding.dart @@ -10,6 +10,7 @@ import 'package:flutter/rendering.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter/services.dart'; +import 'app.dart'; import 'framework.dart'; export 'dart:ui' show AppLifecycleState, Locale; @@ -52,6 +53,22 @@ class WidgetFlutterBinding extends BindingBase with Scheduler, Gesturer, Service ui.window.onAppLifecycleStateChanged = handleAppLifecycleStateChanged; } + @override + void initServiceExtensions() { + super.initServiceExtensions(); + + registerBoolServiceExtension( + name: 'showPerformanceOverlay', + getter: () => WidgetsApp.showPerformanceOverlayOverride, + setter: (bool value) { + if (WidgetsApp.showPerformanceOverlayOverride == value) + return; + WidgetsApp.showPerformanceOverlayOverride = value; + buildOwner.reassemble(renderViewElement); + } + ); + } + /// The one static instance of this class. /// /// Only valid after the WidgetFlutterBinding constructor) has been called. @@ -113,13 +130,13 @@ class WidgetFlutterBinding extends BindingBase with Scheduler, Gesturer, Service container: renderView, debugShortDescription: '[root]', child: app - ).attachToRenderTree(buildOwner, _renderViewElement); + ).attachToRenderTree(buildOwner, renderViewElement); beginFrame(); } @override void reassembleApplication() { - buildOwner.reassemble(_renderViewElement); + buildOwner.reassemble(renderViewElement); super.reassembleApplication(); } }