Correctly set visibility of floating debugging controls (#9327)
diff --git a/packages/devtools_app/lib/src/screens/debugger/debugger_screen.dart b/packages/devtools_app/lib/src/screens/debugger/debugger_screen.dart index cac7130..8074517 100644 --- a/packages/devtools_app/lib/src/screens/debugger/debugger_screen.dart +++ b/packages/devtools_app/lib/src/screens/debugger/debugger_screen.dart
@@ -518,24 +518,17 @@ class _FloatingDebuggerControlsState extends State<FloatingDebuggerControls> with AutoDisposeMixin { - late double controlHeight; - bool get _isPaused => serviceConnection.serviceManager.isMainIsolatePaused; - late final DebuggerController controller; + late final DebuggerController _controller; + late double _controlHeight; + late double _controlOpacity; @override void initState() { super.initState(); - controller = screenControllers.lookup<DebuggerController>(); - } - - @override - void didChangeDependencies() { - super.didChangeDependencies(); - cancelListeners(); - - controlHeight = _isPaused ? defaultButtonHeight : 0.0; + _controller = screenControllers.lookup<DebuggerController>(); + _setVisiblityForPausedState(_isPaused); addAutoDisposeListener( serviceConnection .serviceManager @@ -544,9 +537,7 @@ ?.isPaused, () { setState(() { - if (_isPaused) { - controlHeight = defaultButtonHeight; - } + _setVisiblityForPausedState(_isPaused); }); }, ); @@ -557,18 +548,11 @@ final theme = Theme.of(context); final colorScheme = theme.colorScheme; return AnimatedOpacity( - opacity: _isPaused ? 1.0 : 0.0, + opacity: _controlOpacity, duration: longDuration, - onEnd: () { - if (!_isPaused) { - setState(() { - controlHeight = 0.0; - }); - } - }, child: Container( color: colorScheme.warningContainer, - height: controlHeight, + height: _controlHeight, child: OutlinedRowGroup( borderColor: theme.focusColor, children: [ @@ -584,7 +568,7 @@ DevToolsTooltip( message: 'Resume', child: TextButton( - onPressed: controller.resume, + onPressed: _controller.resume, child: const DevToolsIcon( iconAsset: 'icons/material_symbols/resume.png', color: Colors.green, @@ -595,7 +579,7 @@ DevToolsTooltip( message: 'Step over', child: TextButton( - onPressed: controller.stepOver, + onPressed: _controller.stepOver, child: const DevToolsIcon( iconAsset: 'icons/material_symbols/step_over.png', color: Colors.black, @@ -608,4 +592,12 @@ ), ); } + + /// Sets the visibilty depending on whether the app [isPaused]. + void _setVisiblityForPausedState(bool isPaused) { + setState(() { + _controlHeight = isPaused ? defaultButtonHeight : 0.0; + _controlOpacity = isPaused ? 1.0 : 0.0; + }); + } }