diff --git a/frontend/app_flowy/lib/plugin/plugin.dart b/frontend/app_flowy/lib/plugin/plugin.dart index 8d30b122ad..3d21756605 100644 --- a/frontend/app_flowy/lib/plugin/plugin.dart +++ b/frontend/app_flowy/lib/plugin/plugin.dart @@ -14,6 +14,7 @@ enum DefaultPlugin { blank, trash, grid, + board, } extension FlowyDefaultPluginExt on DefaultPlugin { @@ -27,6 +28,8 @@ extension FlowyDefaultPluginExt on DefaultPlugin { return 2; case DefaultPlugin.grid: return 3; + case DefaultPlugin.board: + return 4; } } } diff --git a/frontend/app_flowy/lib/startup/tasks/load_plugin.dart b/frontend/app_flowy/lib/startup/tasks/load_plugin.dart index fd4bb7e2b9..d89bc83b37 100644 --- a/frontend/app_flowy/lib/startup/tasks/load_plugin.dart +++ b/frontend/app_flowy/lib/startup/tasks/load_plugin.dart @@ -1,6 +1,7 @@ import 'package:app_flowy/plugin/plugin.dart'; import 'package:app_flowy/startup/startup.dart'; import 'package:app_flowy/workspace/presentation/plugins/blank/blank.dart'; +import 'package:app_flowy/workspace/presentation/plugins/board/board.dart'; import 'package:app_flowy/workspace/presentation/plugins/doc/document.dart'; import 'package:app_flowy/workspace/presentation/plugins/grid/grid.dart'; import 'package:app_flowy/workspace/presentation/plugins/trash/trash.dart'; @@ -15,5 +16,6 @@ class PluginLoadTask extends LaunchTask { registerPlugin(builder: TrashPluginBuilder(), config: TrashPluginConfig()); registerPlugin(builder: DocumentPluginBuilder()); registerPlugin(builder: GridPluginBuilder(), config: GridPluginConfig()); + registerPlugin(builder: BoardPluginBuilder(), config: BoardPluginConfig()); } } diff --git a/frontend/app_flowy/lib/workspace/application/board/board_bloc.dart b/frontend/app_flowy/lib/workspace/application/board/board_bloc.dart new file mode 100644 index 0000000000..e69de29bb2 diff --git a/frontend/app_flowy/lib/workspace/presentation/home/home_screen.dart b/frontend/app_flowy/lib/workspace/presentation/home/home_screen.dart index 7e6d4abba2..df232b71e0 100644 --- a/frontend/app_flowy/lib/workspace/presentation/home/home_screen.dart +++ b/frontend/app_flowy/lib/workspace/presentation/home/home_screen.dart @@ -108,7 +108,10 @@ class _HomeScreenState extends State { final workspaceSetting = state.workspaceSetting; if (initialView == null && workspaceSetting.hasLatestView()) { initialView = workspaceSetting.latestView; - final plugin = makePlugin(pluginType: initialView!.pluginType, data: initialView); + final plugin = makePlugin( + pluginType: initialView!.pluginType, + data: initialView, + ); getIt().setPlugin(plugin); } diff --git a/frontend/app_flowy/lib/workspace/presentation/plugins/board/board.dart b/frontend/app_flowy/lib/workspace/presentation/plugins/board/board.dart new file mode 100644 index 0000000000..fb55fc70c1 --- /dev/null +++ b/frontend/app_flowy/lib/workspace/presentation/plugins/board/board.dart @@ -0,0 +1,66 @@ +import 'package:app_flowy/workspace/presentation/home/home_stack.dart'; +import 'package:app_flowy/workspace/presentation/plugins/widgets/left_bar_item.dart'; +import 'package:flowy_sdk/protobuf/flowy-folder-data-model/view.pb.dart'; +import 'package:app_flowy/plugin/plugin.dart'; +import 'package:flutter/material.dart'; + +import 'src/board_page.dart'; + +class BoardPluginBuilder implements PluginBuilder { + @override + Plugin build(dynamic data) { + if (data is View) { + return BoardPlugin(pluginType: pluginType, view: data); + } else { + throw FlowyPluginException.invalidData; + } + } + + @override + String get menuName => "Board"; + + @override + PluginType get pluginType => DefaultPlugin.board.type(); + + @override + ViewDataType get dataType => ViewDataType.Grid; +} + +class BoardPluginConfig implements PluginConfig { + @override + bool get creatable => true; +} + +class BoardPlugin extends Plugin { + final View _view; + final PluginType _pluginType; + + BoardPlugin({ + required View view, + required PluginType pluginType, + }) : _pluginType = pluginType, + _view = view; + + @override + PluginDisplay get display => GridPluginDisplay(view: _view); + + @override + PluginId get id => _view.id; + + @override + PluginType get ty => _pluginType; +} + +class GridPluginDisplay extends PluginDisplay { + final View _view; + GridPluginDisplay({required View view, Key? key}) : _view = view; + + @override + Widget get leftBarItem => ViewLeftBarItem(view: _view); + + @override + Widget buildWidget() => BoardPage(view: _view); + + @override + List get navigationItems => [this]; +} diff --git a/frontend/app_flowy/lib/workspace/presentation/plugins/board/src/board_page.dart b/frontend/app_flowy/lib/workspace/presentation/plugins/board/src/board_page.dart new file mode 100644 index 0000000000..6ef88d7fe6 --- /dev/null +++ b/frontend/app_flowy/lib/workspace/presentation/plugins/board/src/board_page.dart @@ -0,0 +1,15 @@ +import 'package:flowy_sdk/protobuf/flowy-folder-data-model/view.pb.dart'; +import 'package:flutter/material.dart'; + +class BoardPage extends StatelessWidget { + final View _view; + + const BoardPage({required View view, Key? key}) + : _view = view, + super(key: key); + + @override + Widget build(BuildContext context) { + return Container(); + } +}