edit_select_option_bloc.dart 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import 'package:flowy_sdk/protobuf/flowy-grid/selection_type_option.pb.dart';
  2. import 'package:flutter_bloc/flutter_bloc.dart';
  3. import 'package:freezed_annotation/freezed_annotation.dart';
  4. import 'dart:async';
  5. import 'package:protobuf/protobuf.dart';
  6. import 'package:dartz/dartz.dart';
  7. part 'edit_select_option_bloc.freezed.dart';
  8. class EditSelectOptionBloc extends Bloc<EditSelectOptionEvent, EditSelectOptionState> {
  9. EditSelectOptionBloc({required SelectOption option}) : super(EditSelectOptionState.initial(option)) {
  10. on<EditSelectOptionEvent>(
  11. (event, emit) async {
  12. event.map(
  13. updateName: (_UpdateName value) {
  14. emit(state.copyWith(option: _updateName(value.name)));
  15. },
  16. updateColor: (_UpdateColor value) {
  17. emit(state.copyWith(option: _updateColor(value.color)));
  18. },
  19. delete: (_Delete value) {
  20. emit(state.copyWith(deleted: const Some(true)));
  21. },
  22. );
  23. },
  24. );
  25. }
  26. @override
  27. Future<void> close() async {
  28. return super.close();
  29. }
  30. SelectOption _updateColor(SelectOptionColor color) {
  31. state.option.freeze();
  32. return state.option.rebuild((option) {
  33. option.color = color;
  34. });
  35. }
  36. SelectOption _updateName(String name) {
  37. state.option.freeze();
  38. return state.option.rebuild((option) {
  39. option.name = name;
  40. });
  41. }
  42. }
  43. @freezed
  44. class EditSelectOptionEvent with _$EditSelectOptionEvent {
  45. const factory EditSelectOptionEvent.updateName(String name) = _UpdateName;
  46. const factory EditSelectOptionEvent.updateColor(SelectOptionColor color) = _UpdateColor;
  47. const factory EditSelectOptionEvent.delete() = _Delete;
  48. }
  49. @freezed
  50. class EditSelectOptionState with _$EditSelectOptionState {
  51. const factory EditSelectOptionState({
  52. required SelectOption option,
  53. required Option<bool> deleted,
  54. }) = _EditSelectOptionState;
  55. factory EditSelectOptionState.initial(SelectOption option) => EditSelectOptionState(
  56. option: option,
  57. deleted: none(),
  58. );
  59. }