util.dart 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import 'package:appflowy/startup/plugin/plugin.dart';
  2. import 'package:appflowy/startup/startup.dart';
  3. import 'package:appflowy/workspace/application/view/view_ext.dart';
  4. import 'package:appflowy/workspace/application/view/view_listener.dart';
  5. import 'package:dartz/dartz.dart';
  6. import 'package:appflowy_backend/log.dart';
  7. import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
  8. import 'package:flutter/material.dart';
  9. import '../workspace/presentation/home/home_stack.dart';
  10. class ViewPluginNotifier extends PluginNotifier<Option<DeletedViewPB>> {
  11. final ViewListener? _viewListener;
  12. ViewPB view;
  13. @override
  14. final ValueNotifier<Option<DeletedViewPB>> isDeleted = ValueNotifier(none());
  15. ViewPluginNotifier({
  16. required this.view,
  17. required bool listenOnViewChanged,
  18. }) : _viewListener = ViewListener(viewId: view.id) {
  19. if (listenOnViewChanged) {
  20. _viewListener?.start(
  21. onViewUpdated: (updatedView) {
  22. // If the layout is changed, we need to create a new plugin for it.
  23. if (view.layout != updatedView.layout) {
  24. getIt<HomeStackManager>().setPlugin(
  25. updatedView.plugin(
  26. listenOnViewChanged: listenOnViewChanged,
  27. ),
  28. );
  29. } else {
  30. view = updatedView;
  31. }
  32. },
  33. onViewMoveToTrash: (result) {
  34. result.fold(
  35. (deletedView) => isDeleted.value = some(deletedView),
  36. (err) => Log.error(err),
  37. );
  38. },
  39. );
  40. }
  41. }
  42. @override
  43. void dispose() {
  44. isDeleted.dispose();
  45. _viewListener?.stop();
  46. }
  47. }