diff --git a/frontend/appflowy_flutter/lib/plugins/blank/blank.dart b/frontend/appflowy_flutter/lib/plugins/blank/blank.dart index 5c18eab7ac..d4c7bf8b1d 100644 --- a/frontend/appflowy_flutter/lib/plugins/blank/blank.dart +++ b/frontend/appflowy_flutter/lib/plugins/blank/blank.dart @@ -46,7 +46,8 @@ class BlankPagePluginWidgetBuilder extends PluginWidgetBuilder Widget tabBarItem(String pluginId) => leftBarItem; @override - Widget buildWidget({PluginContext? context}) => const BlankPage(); + Widget buildWidget({PluginContext? context, required bool shrinkWrap}) => + const BlankPage(); @override List get navigationItems => [this]; diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/board/presentation/board_page.dart b/frontend/appflowy_flutter/lib/plugins/database_view/board/presentation/board_page.dart index 0294d6ec15..ebdfcc048e 100644 --- a/frontend/appflowy_flutter/lib/plugins/database_view/board/presentation/board_page.dart +++ b/frontend/appflowy_flutter/lib/plugins/database_view/board/presentation/board_page.dart @@ -35,6 +35,7 @@ class BoardPageTabBarBuilderImpl implements DatabaseTabBarItemBuilder { BuildContext context, ViewPB view, DatabaseController controller, + bool shrinkWrap, ) { return BoardPage( key: _makeValueKey(controller), diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/calendar/presentation/calendar_page.dart b/frontend/appflowy_flutter/lib/plugins/database_view/calendar/presentation/calendar_page.dart index efe57786d2..b76de2101d 100644 --- a/frontend/appflowy_flutter/lib/plugins/database_view/calendar/presentation/calendar_page.dart +++ b/frontend/appflowy_flutter/lib/plugins/database_view/calendar/presentation/calendar_page.dart @@ -27,11 +27,13 @@ class CalendarPageTabBarBuilderImpl implements DatabaseTabBarItemBuilder { BuildContext context, ViewPB view, DatabaseController controller, + bool shrinkWrap, ) { return CalendarPage( key: _makeValueKey(controller), view: view, databaseController: controller, + shrinkWrap: shrinkWrap, ); } @@ -59,9 +61,11 @@ class CalendarPageTabBarBuilderImpl implements DatabaseTabBarItemBuilder { class CalendarPage extends StatefulWidget { final ViewPB view; final DatabaseController databaseController; + final bool shrinkWrap; const CalendarPage({ required this.view, required this.databaseController, + this.shrinkWrap = false, super.key, }); @@ -95,12 +99,8 @@ class _CalendarPageState extends State { Widget build(BuildContext context) { return CalendarControllerProvider( controller: _eventController, - child: MultiBlocProvider( - providers: [ - BlocProvider.value( - value: _calendarBloc, - ) - ], + child: BlocProvider.value( + value: _calendarBloc, child: MultiBlocListener( listeners: [ BlocListener( @@ -159,14 +159,10 @@ class _CalendarPageState extends State { ], child: BlocBuilder( builder: (context, state) { - return Column( - children: [ - _buildCalendar( - _eventController, - state.settings - .foldLeft(0, (previous, a) => a.firstDayOfWeek), - ), - ], + return _buildCalendar( + context, + _eventController, + state.settings.foldLeft(0, (previous, a) => a.firstDayOfWeek), ); }, ), @@ -175,19 +171,26 @@ class _CalendarPageState extends State { ); } - Widget _buildCalendar(EventController eventController, int firstDayOfWeek) { - return Expanded( - child: Padding( - padding: GridSize.contentInsets, - child: MonthView( + Widget _buildCalendar( + BuildContext context, + EventController eventController, + int firstDayOfWeek, + ) { + return Padding( + padding: GridSize.contentInsets, + child: LayoutBuilder( + // must specify MonthView width for useAvailableVerticalSpace to work properly + builder: (context, constraints) => MonthView( key: _calendarState, controller: _eventController, - cellAspectRatio: .6, + width: constraints.maxWidth, + cellAspectRatio: 0.6, startDay: _weekdayFromInt(firstDayOfWeek), borderColor: Theme.of(context).dividerColor, headerBuilder: _headerNavigatorBuilder, weekDayBuilder: _headerWeekDayBuilder, cellBuilder: _calendarDayBuilder, + useAvailableVerticalSpace: widget.shrinkWrap, ), ), ); diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/grid_page.dart b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/grid_page.dart index 15f4f539bd..0eefacda47 100755 --- a/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/grid_page.dart +++ b/frontend/appflowy_flutter/lib/plugins/database_view/grid/presentation/grid_page.dart @@ -50,6 +50,7 @@ class GridPageTabBarBuilderImpl implements DatabaseTabBarItemBuilder { BuildContext context, ViewPB view, DatabaseController controller, + bool shrinkWrap, ) { return GridPage( key: _makeValueKey(controller), diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/tar_bar/tab_bar_view.dart b/frontend/appflowy_flutter/lib/plugins/database_view/tar_bar/tab_bar_view.dart index f6841cda83..563a6673ad 100644 --- a/frontend/appflowy_flutter/lib/plugins/database_view/tar_bar/tab_bar_view.dart +++ b/frontend/appflowy_flutter/lib/plugins/database_view/tar_bar/tab_bar_view.dart @@ -31,6 +31,7 @@ abstract class DatabaseTabBarItemBuilder { BuildContext context, ViewPB view, DatabaseController controller, + bool shrinkWrap, ); /// Returns the setting bar of the tab bar item. The setting bar is shown on the @@ -48,8 +49,10 @@ abstract class DatabaseTabBarItemBuilder { class DatabaseTabBarView extends StatefulWidget { final ViewPB view; + final bool shrinkWrap; const DatabaseTabBarView({ required this.view, + required this.shrinkWrap, super.key, }); @@ -146,6 +149,7 @@ class _DatabaseTabBarViewState extends State { context, tabBar.view, controller, + widget.shrinkWrap, ); }).toList(); } @@ -215,7 +219,7 @@ class DatabasePluginWidgetBuilder extends PluginWidgetBuilder { Widget tabBarItem(String pluginId) => ViewTabBarItem(view: notifier.view); @override - Widget buildWidget({PluginContext? context}) { + Widget buildWidget({PluginContext? context, required bool shrinkWrap}) { notifier.isDeleted.addListener(() { notifier.isDeleted.value.fold(() => null, (deletedView) { if (deletedView.hasIndex()) { @@ -226,6 +230,7 @@ class DatabasePluginWidgetBuilder extends PluginWidgetBuilder { return DatabaseTabBarView( key: ValueKey(notifier.view.id), view: notifier.view, + shrinkWrap: shrinkWrap, ); } diff --git a/frontend/appflowy_flutter/lib/plugins/database_view/widgets/database_view_widget.dart b/frontend/appflowy_flutter/lib/plugins/database_view/widgets/database_view_widget.dart index 86e7390ec3..955baed317 100644 --- a/frontend/appflowy_flutter/lib/plugins/database_view/widgets/database_view_widget.dart +++ b/frontend/appflowy_flutter/lib/plugins/database_view/widgets/database_view_widget.dart @@ -4,13 +4,15 @@ import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart'; import 'package:flutter/material.dart'; class DatabaseViewWidget extends StatefulWidget { + final ViewPB view; + final bool shrinkWrap; + const DatabaseViewWidget({ super.key, required this.view, + this.shrinkWrap = true, }); - final ViewPB view; - @override State createState() => _DatabaseViewWidgetState(); } @@ -46,7 +48,10 @@ class _DatabaseViewWidgetState extends State { return ValueListenableBuilder( valueListenable: _layoutTypeChangeNotifier, builder: (_, __, ___) { - return view.plugin().widgetBuilder.buildWidget(); + return view + .plugin() + .widgetBuilder + .buildWidget(shrinkWrap: widget.shrinkWrap); }, ); } diff --git a/frontend/appflowy_flutter/lib/plugins/document/document.dart b/frontend/appflowy_flutter/lib/plugins/document/document.dart index 01686c7874..a068441095 100644 --- a/frontend/appflowy_flutter/lib/plugins/document/document.dart +++ b/frontend/appflowy_flutter/lib/plugins/document/document.dart @@ -82,7 +82,7 @@ class DocumentPluginWidgetBuilder extends PluginWidgetBuilder EdgeInsets get contentPadding => EdgeInsets.zero; @override - Widget buildWidget({PluginContext? context}) { + Widget buildWidget({PluginContext? context, required bool shrinkWrap}) { notifier.isDeleted.addListener(() { notifier.isDeleted.value.fold(() => null, (deletedView) { if (deletedView.hasIndex()) { diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/base/built_in_page_widget.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/base/built_in_page_widget.dart index 8305cdbee4..5377c6477c 100644 --- a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/base/built_in_page_widget.dart +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/base/built_in_page_widget.dart @@ -1,4 +1,5 @@ import 'package:appflowy/plugins/document/presentation/editor_plugins/plugins.dart'; +import 'package:appflowy/startup/plugin/plugin.dart'; import 'package:appflowy/startup/startup.dart'; import 'package:appflowy/workspace/application/tabs/tabs_bloc.dart'; import 'package:appflowy/workspace/application/view/view_service.dart'; @@ -90,7 +91,7 @@ class _BuiltInPageWidgetState extends State { onEnter: (_) => widget.editorState.service.scrollService?.disable(), onExit: (_) => widget.editorState.service.scrollService?.enable(), child: SizedBox( - height: 400, + height: viewPB.pluginType == PluginType.calendar ? 700 : 400, child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/database/database_view_block_component.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/database/database_view_block_component.dart index 97532363eb..9dfe23676a 100644 --- a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/database/database_view_block_component.dart +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/database/database_view_block_component.dart @@ -78,6 +78,7 @@ class _DatabaseBlockComponentWidgetState return DatabaseViewWidget( key: ValueKey(viewPB.id), view: viewPB, + shrinkWrap: true, ); }, ); diff --git a/frontend/appflowy_flutter/lib/plugins/trash/trash.dart b/frontend/appflowy_flutter/lib/plugins/trash/trash.dart index 4bebbbbfaf..920c04b793 100644 --- a/frontend/appflowy_flutter/lib/plugins/trash/trash.dart +++ b/frontend/appflowy_flutter/lib/plugins/trash/trash.dart @@ -58,7 +58,8 @@ class TrashPluginDisplay extends PluginWidgetBuilder { Widget? get rightBarItem => null; @override - Widget buildWidget({PluginContext? context}) => const TrashPage( + Widget buildWidget({PluginContext? context, required bool shrinkWrap}) => + const TrashPage( key: ValueKey('TrashPage'), ); diff --git a/frontend/appflowy_flutter/lib/startup/plugin/plugin.dart b/frontend/appflowy_flutter/lib/startup/plugin/plugin.dart index 28c38f5ead..3572fc6488 100644 --- a/frontend/appflowy_flutter/lib/startup/plugin/plugin.dart +++ b/frontend/appflowy_flutter/lib/startup/plugin/plugin.dart @@ -66,7 +66,7 @@ abstract class PluginWidgetBuilder with NavigationItem { EdgeInsets get contentPadding => const EdgeInsets.symmetric(horizontal: 40, vertical: 28); - Widget buildWidget({PluginContext? context}); + Widget buildWidget({PluginContext? context, required bool shrinkWrap}); } class PluginContext { diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/home/home_stack.dart b/frontend/appflowy_flutter/lib/workspace/presentation/home/home_stack.dart index ad9a97aa0e..1b9ead3697 100644 --- a/frontend/appflowy_flutter/lib/workspace/presentation/home/home_stack.dart +++ b/frontend/appflowy_flutter/lib/workspace/presentation/home/home_stack.dart @@ -233,6 +233,7 @@ class PageManager { final builder = notifier.plugin.widgetBuilder; final pluginWidget = builder.buildWidget( context: PluginContext(onDeleted: onDeleted), + shrinkWrap: false, ); return Padding(