Kaynağa Gözat

fix: blockService exception

appflowy 3 yıl önce
ebeveyn
işleme
1f657f3bf8

+ 7 - 7
frontend/app_flowy/lib/workspace/application/grid/grid_bloc.dart

@@ -16,12 +16,12 @@ part 'grid_bloc.freezed.dart';
 class GridBloc extends Bloc<GridEvent, GridState> {
   final View view;
   final GridService service;
-  late GridFieldsListener _fieldListener;
-  late GridBlockService _blockService;
-
-  GridBloc({required this.view, required this.service}) : super(GridState.initial()) {
-    _fieldListener = GridFieldsListener(gridId: view.id);
+  final GridFieldsListener _fieldListener;
+  GridBlockService? _blockService;
 
+  GridBloc({required this.view, required this.service})
+      : _fieldListener = GridFieldsListener(gridId: view.id),
+        super(GridState.initial()) {
     on<GridEvent>(
       (event, emit) async {
         await event.map(
@@ -48,7 +48,7 @@ class GridBloc extends Bloc<GridEvent, GridState> {
   @override
   Future<void> close() async {
     await _fieldListener.stop();
-    await _blockService.stop();
+    await _blockService?.stop();
     return super.close();
   }
 
@@ -70,7 +70,7 @@ class GridBloc extends Bloc<GridEvent, GridState> {
       blockOrders: grid.blockOrders,
     );
 
-    _blockService.blocksUpdateNotifier?.addPublishListener((result) {
+    _blockService?.blocksUpdateNotifier?.addPublishListener((result) {
       result.fold(
         (blockMap) => add(GridEvent.didReceiveRowUpdate(_buildRows(blockMap))),
         (err) => Log.error('$err'),

+ 2 - 5
frontend/rust-lib/flowy-grid/src/services/grid_editor.rs

@@ -365,11 +365,8 @@ impl ClientGridEditor {
         F: for<'a> FnOnce(&'a mut GridMetaPad) -> FlowyResult<Option<GridChangeset>>,
     {
         let mut write_guard = self.pad.write().await;
-        match f(&mut *write_guard)? {
-            None => {}
-            Some(change) => {
-                let _ = self.apply_change(change).await?;
-            }
+        if let Some(changeset) = f(&mut *write_guard)? {
+            let _ = self.apply_change(changeset).await?;
         }
         Ok(())
     }