Skip to content

Commit 523b0c4

Browse files
authored
Move debugShowWidgetInspectorOverride (#144029)
Contributes to dart-lang/leak_tracker#218
1 parent 7b5ec58 commit 523b0c4

File tree

7 files changed

+46
-31
lines changed

7 files changed

+46
-31
lines changed

packages/flutter/lib/src/widgets/app.dart

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1193,25 +1193,6 @@ class WidgetsApp extends StatefulWidget {
11931193
/// Used by the `showPerformanceOverlay` VM service extension.
11941194
static bool showPerformanceOverlayOverride = false;
11951195

1196-
/// If true, forces the widget inspector to be visible.
1197-
///
1198-
/// Overrides the `debugShowWidgetInspector` value set in [WidgetsApp].
1199-
///
1200-
/// Used by the `debugShowWidgetInspector` debugging extension.
1201-
///
1202-
/// The inspector allows the selection of a location on your device or emulator
1203-
/// and view what widgets and render objects associated with it. An outline of
1204-
/// the selected widget and some summary information is shown on device and
1205-
/// more detailed information is shown in the IDE or DevTools.
1206-
static bool get debugShowWidgetInspectorOverride {
1207-
return _debugShowWidgetInspectorOverrideNotifier.value;
1208-
}
1209-
static set debugShowWidgetInspectorOverride(bool value) {
1210-
_debugShowWidgetInspectorOverrideNotifier.value = value;
1211-
}
1212-
1213-
static final ValueNotifier<bool> _debugShowWidgetInspectorOverrideNotifier = ValueNotifier<bool>(false);
1214-
12151196
/// If false, prevents the debug banner from being visible.
12161197
///
12171198
/// Used by the `debugAllowBanner` VM service extension.
@@ -1760,7 +1741,7 @@ class _WidgetsAppState extends State<WidgetsApp> with WidgetsBindingObserver {
17601741

17611742
assert(() {
17621743
result = ValueListenableBuilder<bool>(
1763-
valueListenable: WidgetsApp._debugShowWidgetInspectorOverrideNotifier,
1744+
valueListenable: WidgetsBinding.instance.debugShowWidgetInspectorOverrideNotifier,
17641745
builder: (BuildContext context, bool debugShowWidgetInspectorOverride, Widget? child) {
17651746
if (widget.debugShowWidgetInspector || debugShowWidgetInspectorOverride) {
17661747
return WidgetInspector(

packages/flutter/lib/src/widgets/binding.dart

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,36 @@ mixin WidgetsBinding on BindingBase, ServicesBinding, SchedulerBinding, GestureB
375375
static WidgetsBinding get instance => BindingBase.checkInstance(_instance);
376376
static WidgetsBinding? _instance;
377377

378+
/// If true, forces the widget inspector to be visible.
379+
///
380+
/// Overrides the `debugShowWidgetInspector` value set in [WidgetsApp].
381+
///
382+
/// Used by the `debugShowWidgetInspector` debugging extension.
383+
///
384+
/// The inspector allows the selection of a location on your device or emulator
385+
/// and view what widgets and render objects associated with it. An outline of
386+
/// the selected widget and some summary information is shown on device and
387+
/// more detailed information is shown in the IDE or DevTools.
388+
bool get debugShowWidgetInspectorOverride {
389+
return debugShowWidgetInspectorOverrideNotifier.value;
390+
}
391+
set debugShowWidgetInspectorOverride(bool value) {
392+
debugShowWidgetInspectorOverrideNotifier.value = value;
393+
}
394+
395+
/// Notifier for [debugShowWidgetInspectorOverride].
396+
ValueNotifier<bool> get debugShowWidgetInspectorOverrideNotifier => _debugShowWidgetInspectorOverrideNotifierObject ??= ValueNotifier<bool>(false);
397+
ValueNotifier<bool>? _debugShowWidgetInspectorOverrideNotifierObject;
398+
399+
@visibleForTesting
400+
@override
401+
void resetInternalState() {
402+
// ignore: invalid_use_of_visible_for_testing_member, https://github.com/dart-lang/sdk/issues/41998
403+
super.resetInternalState();
404+
_debugShowWidgetInspectorOverrideNotifierObject?.dispose();
405+
_debugShowWidgetInspectorOverrideNotifierObject = null;
406+
}
407+
378408
void _debugAddStackFilters() {
379409
const PartialStackFrame elementInflateWidget = PartialStackFrame(package: 'package:flutter/src/widgets/framework.dart', className: 'Element', method: 'inflateWidget');
380410
const PartialStackFrame elementUpdateChild = PartialStackFrame(package: 'package:flutter/src/widgets/framework.dart', className: 'Element', method: 'updateChild');

packages/flutter/lib/src/widgets/service_extensions.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,11 @@ enum WidgetInspectorServiceExtensions {
123123
structuredErrors,
124124

125125
/// Name of service extension that, when called, will change the value of
126-
/// [WidgetsApp.debugShowWidgetInspectorOverride], which controls whether the
126+
/// [WidgetsBinding.debugShowWidgetInspectorOverride], which controls whether the
127127
/// on-device widget inspector is visible.
128128
///
129129
/// See also:
130-
/// * [WidgetsApp.debugShowWidgetInspectorOverride], which is the flag that
130+
/// * [WidgetsBinding.debugShowWidgetInspectorOverride], which is the flag that
131131
/// this service extension exposes.
132132
/// * [WidgetInspectorService.initServiceExtensions], where the service
133133
/// extension is registered.

packages/flutter/lib/src/widgets/widget_inspector.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import 'package:flutter/rendering.dart';
2525
import 'package:flutter/scheduler.dart';
2626
import 'package:meta/meta_meta.dart';
2727

28-
import 'app.dart';
2928
import 'basic.dart';
3029
import 'binding.dart';
3130
import 'debug.dart';
@@ -1084,10 +1083,10 @@ mixin WidgetInspectorService {
10841083

10851084
_registerBoolServiceExtension(
10861085
name: WidgetInspectorServiceExtensions.show.name,
1087-
getter: () async => WidgetsApp.debugShowWidgetInspectorOverride,
1086+
getter: () async => WidgetsBinding.instance.debugShowWidgetInspectorOverride,
10881087
setter: (bool value) {
1089-
if (WidgetsApp.debugShowWidgetInspectorOverride != value) {
1090-
WidgetsApp.debugShowWidgetInspectorOverride = value;
1088+
if (WidgetsBinding.instance.debugShowWidgetInspectorOverride != value) {
1089+
WidgetsBinding.instance.debugShowWidgetInspectorOverride = value;
10911090
}
10921091
return Future<void>.value();
10931092
},

packages/flutter/test/painting/system_fonts_test.dart

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,12 @@ Future<void> verifyMarkedNeedsLayoutDuringTransientCallbacksPhase(WidgetTester t
3737
}
3838

3939
void main() {
40-
testWidgets('RenderParagraph relayout upon system fonts changes',
4140
// TODO(polina-c): clean up leaks, https://github.com/flutter/flutter/issues/134787 [leaks-to-clean]
42-
experimentalLeakTesting: LeakTesting.settings.withIgnoredAll(),
41+
LeakTesting.settings = LeakTesting.settings.withIgnored(classes: <String>['CurvedAnimation']);
42+
43+
testWidgets('RenderParagraph relayout upon system fonts changes',
44+
// TODO(polina-c): dispose _NotAnnounced, https://github.com/dart-lang/leak_tracker/issues/218 [leaks-to-clean]
45+
experimentalLeakTesting: LeakTesting.settings.withIgnored(classes: <String>['ValueNotifier<String?>', '_NotAnnounced']),
4346
(WidgetTester tester) async {
4447
await tester.pumpWidget(
4548
const MaterialApp(

packages/flutter/test/widgets/widget_inspector_test.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4130,7 +4130,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
41304130
debugShowChangeCounter++;
41314131
}
41324132

4133-
WidgetsApp.debugShowWidgetInspectorOverride = false;
4133+
WidgetsBinding.instance.debugShowWidgetInspectorOverride = false;
41344134
valueListenableBuilderWidget.valueListenable.addListener(debugShowWidgetInspectorOverrideCallback);
41354135

41364136
service.rebuildCount = 0;
@@ -4155,7 +4155,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
41554155
),
41564156
equals('true'),
41574157
);
4158-
expect(WidgetsApp.debugShowWidgetInspectorOverride, isTrue);
4158+
expect(WidgetsBinding.instance.debugShowWidgetInspectorOverride, isTrue);
41594159
expect(extensionChangedEvents.length, equals(1));
41604160
expect(service.rebuildCount, equals(0)); // Should not be force rebuilt.
41614161
expect(debugShowChangeCounter, equals(1));
@@ -4195,7 +4195,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
41954195
expect(extensionChangedEvents.length, equals(3));
41964196
expect(service.rebuildCount, equals(0)); // Should not be force rebuilt.
41974197
expect(debugShowChangeCounter, equals(2));
4198-
expect(WidgetsApp.debugShowWidgetInspectorOverride, isFalse);
4198+
expect(WidgetsBinding.instance.debugShowWidgetInspectorOverride, isFalse);
41994199
});
42004200

42014201
testWidgets('ext.flutter.inspector.screenshot', (WidgetTester tester) async {

packages/flutter_test/lib/src/binding.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1174,6 +1174,8 @@ abstract class TestWidgetsFlutterBinding extends BindingBase
11741174
keyEventManager.clearState();
11751175
// ignore: invalid_use_of_visible_for_testing_member
11761176
RendererBinding.instance.initMouseTracker();
1177+
1178+
assert(ServicesBinding.instance == WidgetsBinding.instance);
11771179
// ignore: invalid_use_of_visible_for_testing_member
11781180
ServicesBinding.instance.resetInternalState();
11791181
}

0 commit comments

Comments
 (0)