mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
fix: height for calendar view in document (#3073)
This commit is contained in:
@ -46,7 +46,8 @@ class BlankPagePluginWidgetBuilder extends PluginWidgetBuilder
|
|||||||
Widget tabBarItem(String pluginId) => leftBarItem;
|
Widget tabBarItem(String pluginId) => leftBarItem;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget buildWidget({PluginContext? context}) => const BlankPage();
|
Widget buildWidget({PluginContext? context, required bool shrinkWrap}) =>
|
||||||
|
const BlankPage();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<NavigationItem> get navigationItems => [this];
|
List<NavigationItem> get navigationItems => [this];
|
||||||
|
@ -35,6 +35,7 @@ class BoardPageTabBarBuilderImpl implements DatabaseTabBarItemBuilder {
|
|||||||
BuildContext context,
|
BuildContext context,
|
||||||
ViewPB view,
|
ViewPB view,
|
||||||
DatabaseController controller,
|
DatabaseController controller,
|
||||||
|
bool shrinkWrap,
|
||||||
) {
|
) {
|
||||||
return BoardPage(
|
return BoardPage(
|
||||||
key: _makeValueKey(controller),
|
key: _makeValueKey(controller),
|
||||||
|
@ -27,11 +27,13 @@ class CalendarPageTabBarBuilderImpl implements DatabaseTabBarItemBuilder {
|
|||||||
BuildContext context,
|
BuildContext context,
|
||||||
ViewPB view,
|
ViewPB view,
|
||||||
DatabaseController controller,
|
DatabaseController controller,
|
||||||
|
bool shrinkWrap,
|
||||||
) {
|
) {
|
||||||
return CalendarPage(
|
return CalendarPage(
|
||||||
key: _makeValueKey(controller),
|
key: _makeValueKey(controller),
|
||||||
view: view,
|
view: view,
|
||||||
databaseController: controller,
|
databaseController: controller,
|
||||||
|
shrinkWrap: shrinkWrap,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,9 +61,11 @@ class CalendarPageTabBarBuilderImpl implements DatabaseTabBarItemBuilder {
|
|||||||
class CalendarPage extends StatefulWidget {
|
class CalendarPage extends StatefulWidget {
|
||||||
final ViewPB view;
|
final ViewPB view;
|
||||||
final DatabaseController databaseController;
|
final DatabaseController databaseController;
|
||||||
|
final bool shrinkWrap;
|
||||||
const CalendarPage({
|
const CalendarPage({
|
||||||
required this.view,
|
required this.view,
|
||||||
required this.databaseController,
|
required this.databaseController,
|
||||||
|
this.shrinkWrap = false,
|
||||||
super.key,
|
super.key,
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -95,12 +99,8 @@ class _CalendarPageState extends State<CalendarPage> {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return CalendarControllerProvider(
|
return CalendarControllerProvider(
|
||||||
controller: _eventController,
|
controller: _eventController,
|
||||||
child: MultiBlocProvider(
|
child: BlocProvider<CalendarBloc>.value(
|
||||||
providers: [
|
value: _calendarBloc,
|
||||||
BlocProvider<CalendarBloc>.value(
|
|
||||||
value: _calendarBloc,
|
|
||||||
)
|
|
||||||
],
|
|
||||||
child: MultiBlocListener(
|
child: MultiBlocListener(
|
||||||
listeners: [
|
listeners: [
|
||||||
BlocListener<CalendarBloc, CalendarState>(
|
BlocListener<CalendarBloc, CalendarState>(
|
||||||
@ -159,14 +159,10 @@ class _CalendarPageState extends State<CalendarPage> {
|
|||||||
],
|
],
|
||||||
child: BlocBuilder<CalendarBloc, CalendarState>(
|
child: BlocBuilder<CalendarBloc, CalendarState>(
|
||||||
builder: (context, state) {
|
builder: (context, state) {
|
||||||
return Column(
|
return _buildCalendar(
|
||||||
children: [
|
context,
|
||||||
_buildCalendar(
|
_eventController,
|
||||||
_eventController,
|
state.settings.foldLeft(0, (previous, a) => a.firstDayOfWeek),
|
||||||
state.settings
|
|
||||||
.foldLeft(0, (previous, a) => a.firstDayOfWeek),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@ -175,19 +171,26 @@ class _CalendarPageState extends State<CalendarPage> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildCalendar(EventController eventController, int firstDayOfWeek) {
|
Widget _buildCalendar(
|
||||||
return Expanded(
|
BuildContext context,
|
||||||
child: Padding(
|
EventController eventController,
|
||||||
padding: GridSize.contentInsets,
|
int firstDayOfWeek,
|
||||||
child: MonthView(
|
) {
|
||||||
|
return Padding(
|
||||||
|
padding: GridSize.contentInsets,
|
||||||
|
child: LayoutBuilder(
|
||||||
|
// must specify MonthView width for useAvailableVerticalSpace to work properly
|
||||||
|
builder: (context, constraints) => MonthView(
|
||||||
key: _calendarState,
|
key: _calendarState,
|
||||||
controller: _eventController,
|
controller: _eventController,
|
||||||
cellAspectRatio: .6,
|
width: constraints.maxWidth,
|
||||||
|
cellAspectRatio: 0.6,
|
||||||
startDay: _weekdayFromInt(firstDayOfWeek),
|
startDay: _weekdayFromInt(firstDayOfWeek),
|
||||||
borderColor: Theme.of(context).dividerColor,
|
borderColor: Theme.of(context).dividerColor,
|
||||||
headerBuilder: _headerNavigatorBuilder,
|
headerBuilder: _headerNavigatorBuilder,
|
||||||
weekDayBuilder: _headerWeekDayBuilder,
|
weekDayBuilder: _headerWeekDayBuilder,
|
||||||
cellBuilder: _calendarDayBuilder,
|
cellBuilder: _calendarDayBuilder,
|
||||||
|
useAvailableVerticalSpace: widget.shrinkWrap,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
@ -50,6 +50,7 @@ class GridPageTabBarBuilderImpl implements DatabaseTabBarItemBuilder {
|
|||||||
BuildContext context,
|
BuildContext context,
|
||||||
ViewPB view,
|
ViewPB view,
|
||||||
DatabaseController controller,
|
DatabaseController controller,
|
||||||
|
bool shrinkWrap,
|
||||||
) {
|
) {
|
||||||
return GridPage(
|
return GridPage(
|
||||||
key: _makeValueKey(controller),
|
key: _makeValueKey(controller),
|
||||||
|
@ -31,6 +31,7 @@ abstract class DatabaseTabBarItemBuilder {
|
|||||||
BuildContext context,
|
BuildContext context,
|
||||||
ViewPB view,
|
ViewPB view,
|
||||||
DatabaseController controller,
|
DatabaseController controller,
|
||||||
|
bool shrinkWrap,
|
||||||
);
|
);
|
||||||
|
|
||||||
/// Returns the setting bar of the tab bar item. The setting bar is shown on the
|
/// 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 {
|
class DatabaseTabBarView extends StatefulWidget {
|
||||||
final ViewPB view;
|
final ViewPB view;
|
||||||
|
final bool shrinkWrap;
|
||||||
const DatabaseTabBarView({
|
const DatabaseTabBarView({
|
||||||
required this.view,
|
required this.view,
|
||||||
|
required this.shrinkWrap,
|
||||||
super.key,
|
super.key,
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -146,6 +149,7 @@ class _DatabaseTabBarViewState extends State<DatabaseTabBarView> {
|
|||||||
context,
|
context,
|
||||||
tabBar.view,
|
tabBar.view,
|
||||||
controller,
|
controller,
|
||||||
|
widget.shrinkWrap,
|
||||||
);
|
);
|
||||||
}).toList();
|
}).toList();
|
||||||
}
|
}
|
||||||
@ -215,7 +219,7 @@ class DatabasePluginWidgetBuilder extends PluginWidgetBuilder {
|
|||||||
Widget tabBarItem(String pluginId) => ViewTabBarItem(view: notifier.view);
|
Widget tabBarItem(String pluginId) => ViewTabBarItem(view: notifier.view);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget buildWidget({PluginContext? context}) {
|
Widget buildWidget({PluginContext? context, required bool shrinkWrap}) {
|
||||||
notifier.isDeleted.addListener(() {
|
notifier.isDeleted.addListener(() {
|
||||||
notifier.isDeleted.value.fold(() => null, (deletedView) {
|
notifier.isDeleted.value.fold(() => null, (deletedView) {
|
||||||
if (deletedView.hasIndex()) {
|
if (deletedView.hasIndex()) {
|
||||||
@ -226,6 +230,7 @@ class DatabasePluginWidgetBuilder extends PluginWidgetBuilder {
|
|||||||
return DatabaseTabBarView(
|
return DatabaseTabBarView(
|
||||||
key: ValueKey(notifier.view.id),
|
key: ValueKey(notifier.view.id),
|
||||||
view: notifier.view,
|
view: notifier.view,
|
||||||
|
shrinkWrap: shrinkWrap,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,13 +4,15 @@ import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class DatabaseViewWidget extends StatefulWidget {
|
class DatabaseViewWidget extends StatefulWidget {
|
||||||
|
final ViewPB view;
|
||||||
|
final bool shrinkWrap;
|
||||||
|
|
||||||
const DatabaseViewWidget({
|
const DatabaseViewWidget({
|
||||||
super.key,
|
super.key,
|
||||||
required this.view,
|
required this.view,
|
||||||
|
this.shrinkWrap = true,
|
||||||
});
|
});
|
||||||
|
|
||||||
final ViewPB view;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<DatabaseViewWidget> createState() => _DatabaseViewWidgetState();
|
State<DatabaseViewWidget> createState() => _DatabaseViewWidgetState();
|
||||||
}
|
}
|
||||||
@ -46,7 +48,10 @@ class _DatabaseViewWidgetState extends State<DatabaseViewWidget> {
|
|||||||
return ValueListenableBuilder<ViewLayoutPB>(
|
return ValueListenableBuilder<ViewLayoutPB>(
|
||||||
valueListenable: _layoutTypeChangeNotifier,
|
valueListenable: _layoutTypeChangeNotifier,
|
||||||
builder: (_, __, ___) {
|
builder: (_, __, ___) {
|
||||||
return view.plugin().widgetBuilder.buildWidget();
|
return view
|
||||||
|
.plugin()
|
||||||
|
.widgetBuilder
|
||||||
|
.buildWidget(shrinkWrap: widget.shrinkWrap);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -82,7 +82,7 @@ class DocumentPluginWidgetBuilder extends PluginWidgetBuilder
|
|||||||
EdgeInsets get contentPadding => EdgeInsets.zero;
|
EdgeInsets get contentPadding => EdgeInsets.zero;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget buildWidget({PluginContext? context}) {
|
Widget buildWidget({PluginContext? context, required bool shrinkWrap}) {
|
||||||
notifier.isDeleted.addListener(() {
|
notifier.isDeleted.addListener(() {
|
||||||
notifier.isDeleted.value.fold(() => null, (deletedView) {
|
notifier.isDeleted.value.fold(() => null, (deletedView) {
|
||||||
if (deletedView.hasIndex()) {
|
if (deletedView.hasIndex()) {
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import 'package:appflowy/plugins/document/presentation/editor_plugins/plugins.dart';
|
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/startup/startup.dart';
|
||||||
import 'package:appflowy/workspace/application/tabs/tabs_bloc.dart';
|
import 'package:appflowy/workspace/application/tabs/tabs_bloc.dart';
|
||||||
import 'package:appflowy/workspace/application/view/view_service.dart';
|
import 'package:appflowy/workspace/application/view/view_service.dart';
|
||||||
@ -90,7 +91,7 @@ class _BuiltInPageWidgetState extends State<BuiltInPageWidget> {
|
|||||||
onEnter: (_) => widget.editorState.service.scrollService?.disable(),
|
onEnter: (_) => widget.editorState.service.scrollService?.disable(),
|
||||||
onExit: (_) => widget.editorState.service.scrollService?.enable(),
|
onExit: (_) => widget.editorState.service.scrollService?.enable(),
|
||||||
child: SizedBox(
|
child: SizedBox(
|
||||||
height: 400,
|
height: viewPB.pluginType == PluginType.calendar ? 700 : 400,
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
@ -78,6 +78,7 @@ class _DatabaseBlockComponentWidgetState
|
|||||||
return DatabaseViewWidget(
|
return DatabaseViewWidget(
|
||||||
key: ValueKey(viewPB.id),
|
key: ValueKey(viewPB.id),
|
||||||
view: viewPB,
|
view: viewPB,
|
||||||
|
shrinkWrap: true,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
@ -58,7 +58,8 @@ class TrashPluginDisplay extends PluginWidgetBuilder {
|
|||||||
Widget? get rightBarItem => null;
|
Widget? get rightBarItem => null;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget buildWidget({PluginContext? context}) => const TrashPage(
|
Widget buildWidget({PluginContext? context, required bool shrinkWrap}) =>
|
||||||
|
const TrashPage(
|
||||||
key: ValueKey('TrashPage'),
|
key: ValueKey('TrashPage'),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ abstract class PluginWidgetBuilder with NavigationItem {
|
|||||||
EdgeInsets get contentPadding =>
|
EdgeInsets get contentPadding =>
|
||||||
const EdgeInsets.symmetric(horizontal: 40, vertical: 28);
|
const EdgeInsets.symmetric(horizontal: 40, vertical: 28);
|
||||||
|
|
||||||
Widget buildWidget({PluginContext? context});
|
Widget buildWidget({PluginContext? context, required bool shrinkWrap});
|
||||||
}
|
}
|
||||||
|
|
||||||
class PluginContext {
|
class PluginContext {
|
||||||
|
@ -233,6 +233,7 @@ class PageManager {
|
|||||||
final builder = notifier.plugin.widgetBuilder;
|
final builder = notifier.plugin.widgetBuilder;
|
||||||
final pluginWidget = builder.buildWidget(
|
final pluginWidget = builder.buildWidget(
|
||||||
context: PluginContext(onDeleted: onDeleted),
|
context: PluginContext(onDeleted: onDeleted),
|
||||||
|
shrinkWrap: false,
|
||||||
);
|
);
|
||||||
|
|
||||||
return Padding(
|
return Padding(
|
||||||
|
Reference in New Issue
Block a user