menu_bloc.dart 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import 'dart:async';
  2. import 'package:app_flowy/home/domain/i_app.dart';
  3. import 'package:app_flowy/home/domain/page_context.dart';
  4. import 'package:dartz/dartz.dart';
  5. import 'package:flowy_sdk/protobuf/flowy-workspace/errors.pb.dart';
  6. import 'package:flutter/material.dart';
  7. import 'package:freezed_annotation/freezed_annotation.dart';
  8. import 'package:flutter_bloc/flutter_bloc.dart';
  9. part 'menu_event.dart';
  10. part 'menu_state.dart';
  11. part 'menu_bloc.freezed.dart';
  12. class MenuBloc extends Bloc<MenuEvent, MenuState> {
  13. final IApp iAppImpl;
  14. MenuBloc(this.iAppImpl) : super(MenuState.initial());
  15. @override
  16. Stream<MenuState> mapEventToState(
  17. MenuEvent event,
  18. ) async* {
  19. yield* event.map(
  20. collapse: (e) async* {
  21. final isCollapse = state.isCollapse;
  22. yield state.copyWith(isCollapse: !isCollapse);
  23. },
  24. openPage: (e) async* {
  25. yield* _performActionOnOpenPage(e);
  26. },
  27. createApp: (event) async* {
  28. yield* _performActionOnCreateApp(event);
  29. },
  30. );
  31. }
  32. Stream<MenuState> _performActionOnOpenPage(_OpenPage e) async* {
  33. yield state.copyWith(pageContext: some(e.context));
  34. }
  35. Stream<MenuState> _performActionOnCreateApp(_CreateApp event) async* {
  36. await iAppImpl
  37. .createApp(name: event.name, desc: event.desc)
  38. .then((result) async* {
  39. result.fold(
  40. (app) => {},
  41. (error) async* {
  42. yield state.copyWith(successOrFailure: right(error));
  43. },
  44. );
  45. });
  46. }
  47. @override
  48. Future<void> close() {
  49. return super.close();
  50. }
  51. }