tabs_bloc.dart 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import 'package:appflowy/plugins/util.dart';
  2. import 'package:appflowy/startup/plugin/plugin.dart';
  3. import 'package:appflowy/startup/startup.dart';
  4. import 'package:appflowy/workspace/presentation/home/home_stack.dart';
  5. import 'package:appflowy/workspace/presentation/home/menu/menu.dart';
  6. import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
  7. import 'package:bloc/bloc.dart';
  8. import 'package:flutter/foundation.dart';
  9. import 'package:freezed_annotation/freezed_annotation.dart';
  10. part 'tabs_event.dart';
  11. part 'tabs_state.dart';
  12. part 'tabs_bloc.freezed.dart';
  13. class TabsBloc extends Bloc<TabsEvent, TabsState> {
  14. late final MenuSharedState menuSharedState;
  15. TabsBloc() : super(TabsState()) {
  16. menuSharedState = getIt<MenuSharedState>();
  17. on<TabsEvent>((event, emit) async {
  18. event.when(
  19. selectTab: (int index) {
  20. if (index != state.currentIndex) {
  21. emit(state.copyWith(newIndex: index));
  22. _setLatestOpenView();
  23. }
  24. },
  25. moveTab: () {},
  26. closeTab: (String pluginId) {
  27. emit(state.closeView(pluginId));
  28. _setLatestOpenView();
  29. },
  30. openTab: (Plugin plugin, ViewPB view) {
  31. emit(state.openView(plugin, view));
  32. _setLatestOpenView(view);
  33. },
  34. openPlugin: (Plugin plugin, ViewPB? view) {
  35. emit(state.openPlugin(plugin: plugin));
  36. _setLatestOpenView(view);
  37. },
  38. );
  39. });
  40. }
  41. void _setLatestOpenView([ViewPB? view]) {
  42. if (view != null) {
  43. menuSharedState.latestOpenView = view;
  44. } else {
  45. final pageManager = state.currentPageManager;
  46. final notifier = pageManager.plugin.notifier;
  47. if (notifier is ViewPluginNotifier) {
  48. menuSharedState.latestOpenView = notifier.view;
  49. }
  50. }
  51. }
  52. }