home_bloc.dart 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import 'package:app_flowy/home/domain/edit_context.dart';
  2. import 'package:app_flowy/home/domain/page_context.dart';
  3. import 'package:app_flowy/home/presentation/widgets/blank_page.dart';
  4. import 'package:flutter_bloc/flutter_bloc.dart';
  5. import 'package:freezed_annotation/freezed_annotation.dart';
  6. import 'package:dartz/dartz.dart';
  7. part 'home_bloc.freezed.dart';
  8. class HomeBloc extends Bloc<HomeEvent, HomeState> {
  9. HomeBloc() : super(HomeState.initial());
  10. @override
  11. Stream<HomeState> mapEventToState(
  12. HomeEvent event,
  13. ) async* {
  14. yield* event.map(
  15. setPage: (e) async* {
  16. yield state.copyWith(pageContext: e.context);
  17. },
  18. showLoading: (e) async* {
  19. yield state.copyWith(isLoading: e.isLoading);
  20. },
  21. setEditPannel: (e) async* {
  22. yield state.copyWith(editContext: some(e.editContext));
  23. },
  24. dismissEditPannel: (value) async* {
  25. yield state.copyWith(editContext: none());
  26. },
  27. forceCollapse: (e) async* {
  28. yield state.copyWith(forceCollapse: e.forceCollapse);
  29. },
  30. );
  31. }
  32. @override
  33. Future<void> close() {
  34. return super.close();
  35. }
  36. }
  37. @freezed
  38. abstract class HomeEvent with _$HomeEvent {
  39. const factory HomeEvent.showLoading(bool isLoading) = _ShowLoading;
  40. const factory HomeEvent.forceCollapse(bool forceCollapse) = _ForceCollapse;
  41. //page
  42. const factory HomeEvent.setPage(PageContext context) = SetCurrentPage;
  43. //edit pannel
  44. const factory HomeEvent.setEditPannel(EditPannelContext editContext) =
  45. _ShowEditPannel;
  46. const factory HomeEvent.dismissEditPannel() = _DismissEditPannel;
  47. }
  48. @freezed
  49. abstract class HomeState implements _$HomeState {
  50. const factory HomeState({
  51. required bool isLoading,
  52. required bool forceCollapse,
  53. required PageContext pageContext,
  54. required Option<EditPannelContext> editContext,
  55. }) = _HomeState;
  56. factory HomeState.initial() => HomeState(
  57. isLoading: false,
  58. forceCollapse: false,
  59. pageContext: const BlankPageContext(),
  60. editContext: none(),
  61. );
  62. }