11import 'dart:async' ;
22import 'package:dartz/dartz.dart' ;
3+ import 'package:equatable/equatable.dart' ;
34import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart' ;
45import 'package:flowy_sdk/protobuf/flowy-folder-data-model/view.pb.dart' ;
56import 'package:flowy_sdk/protobuf/flowy-grid-data-model/protobuf.dart' ;
@@ -8,6 +9,7 @@ import 'package:freezed_annotation/freezed_annotation.dart';
89import 'cell/cell_service/cell_service.dart' ;
910import 'grid_service.dart' ;
1011import 'row/row_service.dart' ;
12+ import 'dart:collection' ;
1113
1214part 'grid_bloc.freezed.dart' ;
1315
@@ -33,19 +35,19 @@ class GridBloc extends Bloc<GridEvent, GridState> {
3335
3436 on < GridEvent > (
3537 (event, emit) async {
36- await event.map (
37- initial: (InitialGrid value ) async {
38+ await event.when (
39+ initial: () async {
3840 _startListening ();
3941 await _loadGrid (emit);
4042 },
41- createRow: (_CreateRow value ) {
43+ createRow: () {
4244 _gridService.createRow ();
4345 },
44- didReceiveRowUpdate: (_DidReceiveRowUpdate value ) {
45- emit (state.copyWith (rows: value. rows, listState: value. listState));
46+ didReceiveRowUpdate: (rows, listState ) {
47+ emit (state.copyWith (rows: rows, listState: listState));
4648 },
47- didReceiveFieldUpdate: (_DidReceiveFieldUpdate value ) {
48- emit (state.copyWith (rows: rowCache.clonedRows, fields: value. fields));
49+ didReceiveFieldUpdate: (fields ) {
50+ emit (state.copyWith (rows: rowCache.clonedRows, fields: GridFieldEquatable ( fields) ));
4951 },
5052 );
5153 },
@@ -93,7 +95,7 @@ class GridBloc extends Bloc<GridEvent, GridState> {
9395
9496 emit (state.copyWith (
9597 grid: Some (grid),
96- fields: fieldCache.fields,
98+ fields: GridFieldEquatable ( fieldCache.fields) ,
9799 rows: rowCache.clonedRows,
98100 loadingState: GridLoadingState .finish (left (unit)),
99101 ));
@@ -117,14 +119,14 @@ class GridState with _$GridState {
117119 const factory GridState ({
118120 required String gridId,
119121 required Option <Grid > grid,
120- required List < Field > fields,
122+ required GridFieldEquatable fields,
121123 required List <GridRow > rows,
122124 required GridLoadingState loadingState,
123125 required GridRowChangeReason listState,
124126 }) = _GridState ;
125127
126128 factory GridState .initial (String gridId) => GridState (
127- fields: [] ,
129+ fields: const GridFieldEquatable ([]) ,
128130 rows: [],
129131 grid: none (),
130132 gridId: gridId,
@@ -138,3 +140,19 @@ class GridLoadingState with _$GridLoadingState {
138140 const factory GridLoadingState .loading () = _Loading ;
139141 const factory GridLoadingState .finish (Either <Unit , FlowyError > successOrFail) = _Finish ;
140142}
143+
144+ class GridFieldEquatable extends Equatable {
145+ final List <Field > _fields;
146+
147+ const GridFieldEquatable (List <Field > fields) : _fields = fields;
148+
149+ @override
150+ List <Object ?> get props {
151+ return [
152+ _fields.length,
153+ _fields.map ((field) => field.width).reduce ((value, element) => value + element),
154+ ];
155+ }
156+
157+ UnmodifiableListView <Field > get value => UnmodifiableListView (_fields);
158+ }
0 commit comments