feat: immersive page style on mobile (#5135)

This commit is contained in:
Lucas.Xu 2024-04-30 16:55:15 +08:00 committed by GitHub
parent 6d0598b101
commit 33802fa62d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
109 changed files with 3643 additions and 348 deletions

View file

@ -1,8 +1,10 @@
import 'package:appflowy/generated/locale_keys.g.dart';
import 'package:appflowy/mobile/application/page_style/document_page_style_bloc.dart';
import 'package:appflowy/plugins/document/application/document_bloc.dart';
import 'package:appflowy/plugins/document/presentation/banner.dart';
import 'package:appflowy/plugins/document/presentation/editor_notification.dart';
import 'package:appflowy/plugins/document/presentation/editor_page.dart';
import 'package:appflowy/plugins/document/presentation/editor_plugins/cover/document_immersive_cover.dart';
import 'package:appflowy/plugins/document/presentation/editor_plugins/plugins.dart';
import 'package:appflowy/plugins/document/presentation/editor_style.dart';
import 'package:appflowy/startup/startup.dart';
@ -104,16 +106,35 @@ class _DocumentPageState extends State<DocumentPage>
}
Widget _buildEditorPage(BuildContext context, DocumentState state) {
final appflowyEditorPage = AppFlowyEditorPage(
editorState: state.editorState!,
styleCustomizer: EditorStyleCustomizer(
context: context,
// the 44 is the width of the left action list
padding: EditorStyleCustomizer.documentPadding,
),
header: _buildCoverAndIcon(context, state.editorState!),
initialSelection: widget.initialSelection,
);
final Widget child;
if (PlatformExtension.isMobile) {
child = BlocBuilder<DocumentPageStyleBloc, DocumentPageStyleState>(
builder: (context, styleState) {
return AppFlowyEditorPage(
editorState: state.editorState!,
styleCustomizer: EditorStyleCustomizer(
context: context,
// the 44 is the width of the left action list
padding: EditorStyleCustomizer.documentPadding,
),
header: _buildCoverAndIcon(context, state),
initialSelection: widget.initialSelection,
);
},
);
} else {
child = AppFlowyEditorPage(
editorState: state.editorState!,
styleCustomizer: EditorStyleCustomizer(
context: context,
// the 44 is the width of the left action list
padding: EditorStyleCustomizer.documentPadding,
),
header: _buildCoverAndIcon(context, state),
initialSelection: widget.initialSelection,
);
}
return Column(
children: [
@ -122,7 +143,7 @@ class _DocumentPageState extends State<DocumentPage>
// const DocumentSyncIndicator(),
if (state.isDeleted) _buildBanner(context),
Expanded(child: appflowyEditorPage),
Expanded(child: child),
],
);
}
@ -138,9 +159,22 @@ class _DocumentPageState extends State<DocumentPage>
);
}
Widget _buildCoverAndIcon(BuildContext context, EditorState editorState) {
Widget _buildCoverAndIcon(BuildContext context, DocumentState state) {
final editorState = state.editorState;
final userProfilePB = state.userProfilePB;
if (editorState == null || userProfilePB == null) {
return const SizedBox.shrink();
}
if (PlatformExtension.isMobile) {
return DocumentImmersiveCover(
view: widget.view,
userProfilePB: userProfilePB,
);
}
final page = editorState.document.root;
return DocumentHeaderNodeWidget(
return DocumentCoverWidget(
node: page,
editorState: editorState,
view: widget.view,
@ -163,7 +197,9 @@ class _DocumentPageState extends State<DocumentPage>
} else if (type == EditorNotificationType.redo) {
redoCommand.execute(editorState);
} else if (type == EditorNotificationType.exitEditing) {
editorState.selection = null;
if (editorState.selection != null) {
editorState.selection = null;
}
}
}