diff --git a/lib/main.dart b/lib/main.dart index bbcf94d..f5df625 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -549,6 +549,7 @@ class _H5ShellPageState extends State { @override Widget build(BuildContext context) { final currentSlot = _currentSlot; + final topInset = MediaQuery.paddingOf(context).top; final bottomInset = MediaQuery.viewInsetsOf(context).bottom; final showLineSwitch = !currentSlot.showShellCover && currentSlot.loadError == null && @@ -564,55 +565,68 @@ class _H5ShellPageState extends State { }, child: Scaffold( backgroundColor: Colors.white, - body: SafeArea( - bottom: false, - child: Stack( - children: [ - Positioned.fill( - child: _ShellFallback(progress: currentSlot.progress), - ), - Positioned.fill( - child: IndexedStack( - index: _currentLineIndex, - children: [ - for (var index = 0; index < _lineSlots.length; index += 1) - WebViewWidget( - key: ValueKey(index), - controller: _lineSlots[index].controller, - ), - ], - ), - ), - if (currentSlot.showShellCover) - Positioned.fill( - child: IgnorePointer( + body: Stack( + children: [ + SafeArea( + bottom: false, + child: Stack( + children: [ + Positioned.fill( child: _ShellFallback(progress: currentSlot.progress), ), - ), - if (!currentSlot.showShellCover && currentSlot.progress < 100) - LinearProgressIndicator( - value: currentSlot.progress == 0 - ? null - : currentSlot.progress / 100, - minHeight: 2, - ), - if (currentSlot.loadError != null) - _ErrorPanel( - message: currentSlot.loadError!, - onRetry: () => unawaited(_reloadCurrentLine()), - ), - if (showLineSwitch) - Positioned( - left: 20, - right: 20, - bottom: MediaQuery.paddingOf(context).bottom + 14, - child: _LineSwitchBar( - currentLine: _currentLine, - onSwitch: _showLineSwitcher, + Positioned.fill( + child: IndexedStack( + index: _currentLineIndex, + children: [ + for (var index = 0; + index < _lineSlots.length; + index += 1) + WebViewWidget( + key: ValueKey(index), + controller: _lineSlots[index].controller, + ), + ], + ), ), - ), - ], - ), + if (currentSlot.showShellCover) + Positioned.fill( + child: IgnorePointer( + child: _ShellFallback(progress: currentSlot.progress), + ), + ), + if (!currentSlot.showShellCover && currentSlot.progress < 100) + LinearProgressIndicator( + value: currentSlot.progress == 0 + ? null + : currentSlot.progress / 100, + minHeight: 2, + ), + if (currentSlot.loadError != null) + _ErrorPanel( + message: currentSlot.loadError!, + onRetry: () => unawaited(_reloadCurrentLine()), + ), + if (showLineSwitch) + Positioned( + left: 20, + right: 20, + bottom: MediaQuery.paddingOf(context).bottom + 14, + child: _LineSwitchBar( + currentLine: _currentLine, + onSwitch: _showLineSwitcher, + ), + ), + ], + ), + ), + Positioned( + top: 0, + left: 0, + right: 0, + height: topInset, + child: const ColoredBox(color: Colors.white), + ), + ], ), ), );