From f3b8ec8a04056572f67431ce5af4450ca73d76df Mon Sep 17 00:00:00 2001 From: "Lucas.Xu" Date: Fri, 10 May 2024 10:09:11 +0800 Subject: [PATCH] fix: android navigation bar issues (#5294) --- .../presentation/base/mobile_view_page.dart | 33 ++++++++++--------- .../base/view_page/app_bar_buttons.dart | 13 ++------ .../cover/document_immersive_cover.dart | 9 +++-- 3 files changed, 27 insertions(+), 28 deletions(-) diff --git a/frontend/appflowy_flutter/lib/mobile/presentation/base/mobile_view_page.dart b/frontend/appflowy_flutter/lib/mobile/presentation/base/mobile_view_page.dart index 14073e6dc8..22b46ced57 100644 --- a/frontend/appflowy_flutter/lib/mobile/presentation/base/mobile_view_page.dart +++ b/frontend/appflowy_flutter/lib/mobile/presentation/base/mobile_view_page.dart @@ -1,6 +1,7 @@ import 'package:appflowy/generated/locale_keys.g.dart'; import 'package:appflowy/mobile/application/base/mobile_view_page_bloc.dart'; import 'package:appflowy/mobile/application/page_style/document_page_style_bloc.dart'; +import 'package:appflowy/mobile/presentation/base/app_bar/app_bar.dart'; import 'package:appflowy/mobile/presentation/base/view_page/app_bar_buttons.dart'; import 'package:appflowy/mobile/presentation/widgets/flowy_mobile_state_container.dart'; import 'package:appflowy/plugins/base/emoji/emoji_text.dart'; @@ -103,19 +104,21 @@ class _MobileViewPageState extends State { ViewPB? view, Widget child, ) { - final isImmersiveMode = view?.layout.isDocumentView ?? false; + final isDocument = view?.layout.isDocumentView ?? false; final title = _buildTitle(context, view); - final appBar = MobileViewPageImmersiveAppBar( - preferredSize: Size( - double.infinity, - AppBarTheme.of(context).toolbarHeight ?? kToolbarHeight, - ), - title: title, - isImmersiveMode: isImmersiveMode, - appBarOpacity: _appBarOpacity, - actions: _buildAppBarActions(context, view), - ); - final body = isImmersiveMode + final actions = _buildAppBarActions(context, view); + final appBar = isDocument + ? MobileViewPageImmersiveAppBar( + preferredSize: Size( + double.infinity, + AppBarTheme.of(context).toolbarHeight ?? kToolbarHeight, + ), + title: title, + appBarOpacity: _appBarOpacity, + actions: actions, + ) + : FlowyAppBar(title: title, actions: actions); + final body = isDocument ? Builder( builder: (context) { _rebuildScrollNotificationObserver(context); @@ -124,7 +127,7 @@ class _MobileViewPageState extends State { ) : child; return Scaffold( - extendBodyBehindAppBar: isImmersiveMode, + extendBodyBehindAppBar: isDocument, appBar: appBar, body: body, ); @@ -190,12 +193,12 @@ class _MobileViewPageState extends State { ), const HSpace(16.0), DocumentSyncIndicator(view: view), - const HSpace(8.0), + const HSpace(12.0), ]); } else { actions.addAll([ DatabaseSyncIndicator(view: view), - const HSpace(8.0), + const HSpace(12.0), ]); } } diff --git a/frontend/appflowy_flutter/lib/mobile/presentation/base/view_page/app_bar_buttons.dart b/frontend/appflowy_flutter/lib/mobile/presentation/base/view_page/app_bar_buttons.dart index 72bb36ad3f..af2a423b4a 100644 --- a/frontend/appflowy_flutter/lib/mobile/presentation/base/view_page/app_bar_buttons.dart +++ b/frontend/appflowy_flutter/lib/mobile/presentation/base/view_page/app_bar_buttons.dart @@ -1,5 +1,6 @@ import 'package:appflowy/generated/flowy_svgs.g.dart'; import 'package:appflowy/generated/locale_keys.g.dart'; +import 'package:appflowy/mobile/application/base/mobile_view_page_bloc.dart'; import 'package:appflowy/mobile/application/page_style/document_page_style_bloc.dart'; import 'package:appflowy/mobile/presentation/base/app_bar/app_bar.dart'; import 'package:appflowy/mobile/presentation/base/app_bar/app_bar_actions.dart'; @@ -21,13 +22,11 @@ class MobileViewPageImmersiveAppBar extends StatelessWidget const MobileViewPageImmersiveAppBar({ super.key, required this.preferredSize, - required this.isImmersiveMode, required this.appBarOpacity, required this.title, required this.actions, }); - final bool isImmersiveMode; final ValueListenable appBarOpacity; final Widget title; final List actions; @@ -37,13 +36,6 @@ class MobileViewPageImmersiveAppBar extends StatelessWidget @override Widget build(BuildContext context) { - if (!isImmersiveMode) { - FlowyAppBar( - title: title, - actions: actions, - ); - } - return ValueListenableBuilder( valueListenable: appBarOpacity, builder: (_, opacity, __) => FlowyAppBar( @@ -68,7 +60,8 @@ class MobileViewPageImmersiveAppBar extends StatelessWidget icon: FlowySvgs.m_app_bar_back_s, dimension: 30.0, iconPadding: 6.0, - isImmersiveMode: isImmersiveMode, + isImmersiveMode: + context.read().state.isImmersiveMode, appBarOpacity: appBarOpacity, ), ); diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/cover/document_immersive_cover.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/cover/document_immersive_cover.dart index e25f32f55f..b5070c3dec 100644 --- a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/cover/document_immersive_cover.dart +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/cover/document_immersive_cover.dart @@ -162,9 +162,12 @@ class _DocumentImmersiveCoverState extends State { Widget _buildIcon(BuildContext context, String icon) { return GestureDetector( - child: EmojiIconWidget( - emoji: icon, - emojiSize: 26, + child: ConstrainedBox( + constraints: const BoxConstraints.tightFor(width: 34.0), + child: EmojiIconWidget( + emoji: icon, + emojiSize: 26, + ), ), onTap: () async { final result = await context.push(