calendar.dart 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import 'package:app_flowy/generated/locale_keys.g.dart';
  2. import 'package:app_flowy/startup/plugin/plugin.dart';
  3. import 'package:app_flowy/workspace/presentation/home/home_stack.dart';
  4. import 'package:app_flowy/workspace/presentation/widgets/left_bar_item.dart';
  5. import 'package:easy_localization/easy_localization.dart';
  6. import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
  7. import 'package:flutter/material.dart';
  8. import '../util.dart';
  9. import 'presentation/calendar_page.dart';
  10. class CalendarPluginBuilder extends PluginBuilder {
  11. @override
  12. Plugin build(dynamic data) {
  13. if (data is ViewPB) {
  14. return CalendarPlugin(pluginType: pluginType, view: data);
  15. } else {
  16. throw FlowyPluginException.invalidData;
  17. }
  18. }
  19. @override
  20. String get menuName => LocaleKeys.calendar_menuName.tr();
  21. @override
  22. String get menuIcon => "editor/date";
  23. @override
  24. PluginType get pluginType => PluginType.calendar;
  25. @override
  26. ViewDataFormatPB get dataFormatType => ViewDataFormatPB.DatabaseFormat;
  27. @override
  28. ViewLayoutTypePB? get layoutType => ViewLayoutTypePB.Calendar;
  29. }
  30. class CalendarPluginConfig implements PluginConfig {
  31. @override
  32. bool get creatable => false;
  33. }
  34. class CalendarPlugin extends Plugin {
  35. @override
  36. final ViewPluginNotifier notifier;
  37. final PluginType _pluginType;
  38. CalendarPlugin({
  39. required ViewPB view,
  40. required PluginType pluginType,
  41. }) : _pluginType = pluginType,
  42. notifier = ViewPluginNotifier(view: view);
  43. @override
  44. PluginDisplay get display => CalendarPluginDisplay(notifier: notifier);
  45. @override
  46. PluginId get id => notifier.view.id;
  47. @override
  48. PluginType get ty => _pluginType;
  49. }
  50. class CalendarPluginDisplay extends PluginDisplay {
  51. final ViewPluginNotifier notifier;
  52. CalendarPluginDisplay({required this.notifier, Key? key});
  53. ViewPB get view => notifier.view;
  54. @override
  55. Widget get leftBarItem => ViewLeftBarItem(view: view);
  56. @override
  57. Widget buildWidget(PluginContext context) {
  58. notifier.isDeleted.addListener(() {
  59. notifier.isDeleted.value.fold(() => null, (deletedView) {
  60. if (deletedView.hasIndex()) {
  61. context.onDeleted(view, deletedView.index);
  62. }
  63. });
  64. });
  65. return CalendarPage(key: ValueKey(view.id));
  66. // return CalendarPage(key: ValueKey(view.id), view: view);
  67. }
  68. @override
  69. List<NavigationItem> get navigationItems => [this];
  70. }