group_controller.dart 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import 'package:flowy_sdk/log.dart';
  2. import 'package:flowy_sdk/protobuf/flowy-grid/protobuf.dart';
  3. import 'group_listener.dart';
  4. abstract class GroupControllerDelegate {
  5. void removeRow(String groupId, String rowId);
  6. void insertRow(String groupId, RowPB row, int? index);
  7. void updateRow(String groupId, RowPB row);
  8. }
  9. class GroupController {
  10. final GroupPB group;
  11. final GroupListener _listener;
  12. final GroupControllerDelegate delegate;
  13. GroupController({required this.group, required this.delegate})
  14. : _listener = GroupListener(group);
  15. void startListening() {
  16. _listener.start(onGroupChanged: (result) {
  17. result.fold(
  18. (GroupRowsChangesetPB changeset) {
  19. for (final insertedRow in changeset.insertedRows) {
  20. final index = insertedRow.hasIndex() ? insertedRow.index : null;
  21. delegate.insertRow(
  22. group.groupId,
  23. insertedRow.row,
  24. index,
  25. );
  26. }
  27. for (final deletedRow in changeset.deletedRows) {
  28. delegate.removeRow(group.groupId, deletedRow);
  29. }
  30. for (final updatedRow in changeset.updatedRows) {
  31. delegate.updateRow(group.groupId, updatedRow);
  32. }
  33. },
  34. (err) => Log.error(err),
  35. );
  36. });
  37. }
  38. Future<void> dispose() async {
  39. _listener.stop();
  40. }
  41. }