123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart';
- import 'package:flutter_bloc/flutter_bloc.dart';
- import 'package:freezed_annotation/freezed_annotation.dart';
- import 'dart:async';
- import '../field/field_controller.dart';
- import 'setting_service.dart';
- part 'group_bloc.freezed.dart';
- class GridGroupBloc extends Bloc<GridGroupEvent, GridGroupState> {
- final GridFieldController _fieldController;
- final SettingFFIService _settingFFIService;
- Function(List<GridFieldContext>)? _onFieldsFn;
- GridGroupBloc(
- {required String viewId, required GridFieldController fieldController})
- : _fieldController = fieldController,
- _settingFFIService = SettingFFIService(viewId: viewId),
- super(GridGroupState.initial(viewId, fieldController.fieldContexts)) {
- on<GridGroupEvent>(
- (event, emit) async {
- event.when(
- initial: () {
- _startListening();
- },
- didReceiveFieldUpdate: (fieldContexts) {
- emit(state.copyWith(fieldContexts: fieldContexts));
- },
- setGroupByField: (String fieldId, FieldType fieldType) {
- _settingFFIService.groupByField(
- fieldId: fieldId,
- fieldType: fieldType,
- );
- },
- );
- },
- );
- }
- @override
- Future<void> close() async {
- if (_onFieldsFn != null) {
- _fieldController.removeListener(onFieldsListener: _onFieldsFn!);
- _onFieldsFn = null;
- }
- return super.close();
- }
- void _startListening() {
- _onFieldsFn = (fieldContexts) =>
- add(GridGroupEvent.didReceiveFieldUpdate(fieldContexts));
- _fieldController.addListener(
- onFields: _onFieldsFn,
- listenWhen: () => !isClosed,
- );
- }
- }
- @freezed
- class GridGroupEvent with _$GridGroupEvent {
- const factory GridGroupEvent.initial() = _Initial;
- const factory GridGroupEvent.setGroupByField(
- String fieldId,
- FieldType fieldType,
- ) = _GroupByField;
- const factory GridGroupEvent.didReceiveFieldUpdate(
- List<GridFieldContext> fields) = _DidReceiveFieldUpdate;
- }
- @freezed
- class GridGroupState with _$GridGroupState {
- const factory GridGroupState({
- required String gridId,
- required List<GridFieldContext> fieldContexts,
- }) = _GridGroupState;
- factory GridGroupState.initial(
- String gridId, List<GridFieldContext> fieldContexts) =>
- GridGroupState(
- gridId: gridId,
- fieldContexts: fieldContexts,
- );
- }
|