diff --git a/lib/view/page/server/tab.dart b/lib/view/page/server/tab.dart index f533ccb5..bf5e9013 100644 --- a/lib/view/page/server/tab.dart +++ b/lib/view/page/server/tab.dart @@ -57,6 +57,7 @@ class _ServerPageState extends State bool _useDoubleColumn = false; final _scrollController = ScrollController(); + final _autoHideKey = GlobalKey(); @override void initState() { @@ -97,14 +98,19 @@ class _ServerPageState extends State Widget _buildPortrait() { return Scaffold( appBar: _buildTagsSwitcher(Pros.server), - body: ListenableBuilder( - listenable: Stores.setting.textFactor.listenable(), - builder: (_, __) { - _updateTextScaler(); - return _buildBody(); - }, + body: GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () => _autoHideKey.currentState?.show(), + child: ListenableBuilder( + listenable: Stores.setting.textFactor.listenable(), + builder: (_, __) { + _updateTextScaler(); + return _buildBody(); + }, + ), ), floatingActionButton: AutoHide( + key: _autoHideKey, direction: AxisDirection.right, controller: _scrollController, child: FloatingActionButton( diff --git a/lib/view/widget/auto_hide.dart b/lib/view/widget/auto_hide.dart index 366af15e..b341cc93 100644 --- a/lib/view/widget/auto_hide.dart +++ b/lib/view/widget/auto_hide.dart @@ -6,19 +6,21 @@ final class AutoHide extends StatefulWidget { final Widget child; final ScrollController controller; final AxisDirection direction; + final double offset; const AutoHide({ super.key, required this.child, required this.controller, required this.direction, + this.offset = 55, }); @override - State createState() => _AutoHideState(); + State createState() => AutoHideState(); } -final class _AutoHideState extends State { +final class AutoHideState extends State { bool _visible = true; bool _isScrolling = false; Timer? _timer; @@ -38,6 +40,15 @@ final class _AutoHideState extends State { super.dispose(); } + void show() { + debugPrint('show'); + if (_visible) return; + setState(() { + _visible = true; + }); + _setupTimer(); + } + void _setupTimer() { _timer?.cancel(); _timer = Timer.periodic(const Duration(seconds: 3), (_) { @@ -84,19 +95,19 @@ final class _AutoHideState extends State { case AxisDirection.down: return _visible ? Matrix4.identity() - : Matrix4.translationValues(0, 55, 0); + : Matrix4.translationValues(0, widget.offset, 0); case AxisDirection.up: return _visible ? Matrix4.identity() - : Matrix4.translationValues(0, -55, 0); + : Matrix4.translationValues(0, -widget.offset, 0); case AxisDirection.left: return _visible ? Matrix4.identity() - : Matrix4.translationValues(-55, 0, 0); + : Matrix4.translationValues(-widget.offset, 0, 0); case AxisDirection.right: return _visible ? Matrix4.identity() - : Matrix4.translationValues(55, 0, 0); + : Matrix4.translationValues(widget.offset, 0, 0); } } }