fix: update database layout in document (#2757)

* fix: update database layout in document

* feat: create or ref calendar

* Update frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/calendar/calendar_menu_item.dart

Co-authored-by: Mathias Mogensen <42929161+Xazin@users.noreply.github.com>

* fix: stop listen

* feat: remove the redundant database view files

* chore: rename the grid state

---------

Co-authored-by: Mathias Mogensen <42929161+Xazin@users.noreply.github.com>
Co-authored-by: Lucas.Xu <lucas.xu@appflowy.io>
This commit is contained in:
Nathan.fooo
2023-06-11 08:49:10 +08:00
committed by GitHub
parent ed04e247ba
commit c7f73551c7
26 changed files with 310 additions and 267 deletions

View File

@ -69,11 +69,11 @@ class BoardPluginWidgetBuilder extends PluginWidgetBuilder {
Widget get leftBarItem => ViewLeftBarItem(view: view);
@override
Widget buildWidget(PluginContext context) {
Widget buildWidget({PluginContext? context}) {
notifier.isDeleted.addListener(() {
notifier.isDeleted.value.fold(() => null, (deletedView) {
if (deletedView.hasIndex()) {
context.onDeleted(view, deletedView.index);
context?.onDeleted(view, deletedView.index);
}
});
});

View File

@ -69,11 +69,11 @@ class CalendarPluginWidgetBuilder extends PluginWidgetBuilder {
Widget get leftBarItem => ViewLeftBarItem(view: view);
@override
Widget buildWidget(PluginContext context) {
Widget buildWidget({PluginContext? context}) {
notifier.isDeleted.addListener(() {
notifier.isDeleted.value.fold(() => null, (deletedView) {
if (deletedView.hasIndex()) {
context.onDeleted(view, deletedView.index);
context?.onDeleted(view, deletedView.index);
}
});
});

View File

@ -31,6 +31,12 @@ class DatabaseViewPlugin extends Plugin {
@override
PluginWidgetBuilder get widgetBuilder => _innerPlugin.widgetBuilder;
@override
void dispose() {
_viewListener.stop();
super.dispose();
}
void _listenOnLayoutChanged() {
_viewListener.start(
onViewUpdated: (result) {

View File

@ -69,11 +69,11 @@ class GridPluginWidgetBuilder extends PluginWidgetBuilder {
Widget get leftBarItem => ViewLeftBarItem(view: view);
@override
Widget buildWidget(PluginContext context) {
Widget buildWidget({PluginContext? context}) {
notifier.isDeleted.addListener(() {
notifier.isDeleted.value.fold(() => null, (deletedView) {
if (deletedView.hasIndex()) {
context.onDeleted(view, deletedView.index);
context?.onDeleted(view, deletedView.index);
}
});
});

View File

@ -0,0 +1,75 @@
import 'package:appflowy/startup/plugin/plugin.dart';
import 'package:appflowy/workspace/application/view/view_ext.dart';
import 'package:appflowy/workspace/application/view/view_listener.dart';
import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
import 'package:flutter/material.dart';
class DatabaseViewWidget extends StatefulWidget {
const DatabaseViewWidget({
super.key,
required this.view,
});
final ViewPB view;
@override
State<DatabaseViewWidget> createState() => _DatabaseViewWidgetState();
}
class _DatabaseViewWidgetState extends State<DatabaseViewWidget> {
/// Listens to the view updates.
late final ViewListener _listener;
/// Notifies the view layout type changes. When the layout type changes,
/// the widget of the view will be updated.
late final ValueNotifier<ViewLayoutPB> _layoutTypeChangeNotifier;
/// The view will be updated by the [ViewListener].
late ViewPB view;
@override
void initState() {
super.initState();
view = widget.view;
_listenOnViewUpdated();
}
@override
void dispose() {
_layoutTypeChangeNotifier.dispose();
_listener.stop();
super.dispose();
}
@override
Widget build(BuildContext context) {
return ValueListenableBuilder<ViewLayoutPB>(
valueListenable: _layoutTypeChangeNotifier,
builder: (_, __, ___) {
return makePlugin(pluginType: view.pluginType, data: view)
.widgetBuilder
.buildWidget();
},
);
}
void _listenOnViewUpdated() {
_listener = ViewListener(view: widget.view)
..start(
onViewUpdated: (result) {
result.fold(
(updatedView) {
if (mounted) {
view = updatedView;
_layoutTypeChangeNotifier.value = view.layout;
}
},
(r) => null,
);
},
);
_layoutTypeChangeNotifier = ValueNotifier(widget.view.layout);
}
}