refactor: move row params

This commit is contained in:
appflowy
2022-08-17 19:29:14 +08:00
parent 3a27413dfc
commit f32068d64b
14 changed files with 268 additions and 99 deletions

View File

@ -21,7 +21,7 @@ part 'board_bloc.freezed.dart';
class BoardBloc extends Bloc<BoardEvent, BoardState> {
final BoardDataController _dataController;
late final AFBoardDataController afBoardDataController;
List<GroupController> groupControllers = [];
Map<String, GroupController> groupControllers = {};
GridFieldCache get fieldCache => _dataController.fieldCache;
String get gridId => _dataController.gridId;
@ -38,13 +38,17 @@ class BoardBloc extends Bloc<BoardEvent, BoardState> {
columnId,
fromIndex,
toIndex,
) {},
) {
groupControllers[columnId]?.moveRow(fromIndex, toIndex);
},
onMoveColumnItemToColumn: (
fromColumnId,
fromIndex,
toColumnId,
toIndex,
) {},
) {
//
},
);
on<BoardEvent>(
@ -84,7 +88,7 @@ class BoardBloc extends Bloc<BoardEvent, BoardState> {
@override
Future<void> close() async {
await _dataController.dispose();
for (final controller in groupControllers) {
for (final controller in groupControllers.values) {
controller.dispose();
}
return super.close();
@ -94,11 +98,12 @@ class BoardBloc extends Bloc<BoardEvent, BoardState> {
for (final group in groups) {
final delegate = GroupControllerDelegateImpl(afBoardDataController);
final controller = GroupController(
gridId: state.gridId,
group: group,
delegate: delegate,
);
controller.startListening();
groupControllers.add(controller);
groupControllers[controller.group.groupId] = (controller);
}
}

View File

@ -1,8 +1,12 @@
import 'package:app_flowy/plugins/grid/application/row/row_service.dart';
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);
@ -12,12 +16,36 @@ abstract class GroupControllerDelegate {
class GroupController {
final GroupPB group;
final GroupListener _listener;
final MoveRowFFIService _rowService;
final GroupControllerDelegate delegate;
OnGroupError? _onError;
GroupController({required this.group, required this.delegate})
: _listener = GroupListener(group);
GroupController({
required String gridId,
required this.group,
required this.delegate,
}) : _rowService = MoveRowFFIService(gridId: gridId),
_listener = GroupListener(group);
void startListening() {
Future<void> moveRow(int fromIndex, int toIndex) async {
if (fromIndex < group.rows.length && toIndex < group.rows.length) {
final fromRow = group.rows[fromIndex];
final toRow = group.rows[toIndex];
final result = await _rowService.moveRow(
rowId: fromRow.id,
fromIndex: fromIndex,
toIndex: toIndex,
upperRowId: toRow.id,
layout: GridLayout.Board,
);
result.fold((l) => null, (r) => _onError?.call(r));
}
}
void startListening({OnGroupError? onError}) {
_onError = onError;
_listener.start(onGroupChanged: (result) {
result.fold(
(GroupRowsChangesetPB changeset) {