| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | 
							- import 'package:flowy_sdk/log.dart';
 
- import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
 
- import 'package:flowy_sdk/protobuf/flowy-grid/protobuf.dart';
 
- import 'group_listener.dart';
 
- typedef OnGroupError = void Function(FlowyError);
 
- abstract class GroupControllerDelegate {
 
-   void removeRow(String groupId, String rowId);
 
-   void insertRow(String groupId, RowPB row, int? index);
 
-   void updateRow(String groupId, RowPB row);
 
- }
 
- class GroupController {
 
-   final GroupPB group;
 
-   final GroupListener _listener;
 
-   final GroupControllerDelegate delegate;
 
-   GroupController({
 
-     required String gridId,
 
-     required this.group,
 
-     required this.delegate,
 
-   }) : _listener = GroupListener(group);
 
-   RowPB? rowAtIndex(int index) {
 
-     if (index < group.rows.length) {
 
-       return group.rows[index];
 
-     } else {
 
-       return null;
 
-     }
 
-   }
 
-   void startListening() {
 
-     _listener.start(onGroupChanged: (result) {
 
-       result.fold(
 
-         (GroupRowsChangesetPB changeset) {
 
-           for (final insertedRow in changeset.insertedRows) {
 
-             final index = insertedRow.hasIndex() ? insertedRow.index : null;
 
-             delegate.insertRow(
 
-               group.groupId,
 
-               insertedRow.row,
 
-               index,
 
-             );
 
-           }
 
-           for (final deletedRow in changeset.deletedRows) {
 
-             delegate.removeRow(group.groupId, deletedRow);
 
-           }
 
-           for (final updatedRow in changeset.updatedRows) {
 
-             delegate.updateRow(group.groupId, updatedRow);
 
-           }
 
-         },
 
-         (err) => Log.error(err),
 
-       );
 
-     });
 
-   }
 
-   Future<void> dispose() async {
 
-     _listener.stop();
 
-   }
 
- }
 
 
  |