ソースを参照

chore: fix warnings

appflowy 3 年 前
コミット
d390ef9a3a

+ 6 - 1
frontend/app_flowy/lib/workspace/application/grid/cell/cell_service.dart

@@ -17,6 +17,7 @@ part 'cell_service.freezed.dart';
 typedef GridDefaultCellContext = GridCellContext<Cell>;
 typedef GridSelectOptionCellContext = GridCellContext<SelectOptionContext>;
 
+// ignore: must_be_immutable
 class GridCellContext<T> extends Equatable {
   final GridCell gridCell;
   final GridCellCache cellCache;
@@ -76,7 +77,6 @@ class GridCellContext<T> extends Equatable {
 
     if (cellDataLoader.reloadOnFieldChanged) {
       _onFieldChangedFn = () {
-        Log.info("reloadCellData ");
         _loadData();
       };
       cellCache.addListener(cacheKey, _onFieldChangedFn!);
@@ -200,6 +200,7 @@ class GridCellCacheKey {
 
 abstract class GridCellFieldDelegate {
   void onFieldChanged(void Function(String) callback);
+  void dispose();
 }
 
 class GridCellCache {
@@ -279,6 +280,10 @@ class GridCellCache {
       }
     }
   }
+
+  Future<void> dispose() async {
+    fieldDelegate.dispose();
+  }
 }
 
 class CellService {

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

@@ -55,8 +55,9 @@ class GridBloc extends Bloc<GridEvent, GridState> {
   @override
   Future<void> close() async {
     await _gridService.closeGrid();
-    await fieldCache.dispose();
+    await cellCache.dispose();
     await rowCache.dispose();
+    await fieldCache.dispose();
     return super.close();
   }
 

+ 34 - 6
frontend/app_flowy/lib/workspace/application/grid/grid_service.dart

@@ -54,10 +54,14 @@ class FieldsNotifier extends ChangeNotifier {
   List<Field> get fields => _fields;
 }
 
+typedef ChangesetListener = void Function(GridFieldChangeset);
+
 class GridFieldCache {
   final String gridId;
   late final GridFieldsListener _fieldListener;
   final FieldsNotifier _fieldNotifier = FieldsNotifier();
+  final List<ChangesetListener> _changesetListener = [];
+
   GridFieldCache({required this.gridId}) {
     _fieldListener = GridFieldsListener(gridId: gridId);
     _fieldListener.start(onFieldsChanged: (result) {
@@ -66,6 +70,9 @@ class GridFieldCache {
           _deleteFields(changeset.deletedFields);
           _insertFields(changeset.insertedFields);
           _updateFields(changeset.updatedFields);
+          for (final listener in _changesetListener) {
+            listener(changeset);
+          }
         },
         (err) => Log.error(err),
       );
@@ -77,8 +84,6 @@ class GridFieldCache {
     _fieldNotifier.dispose();
   }
 
-  void applyChangeset(GridFieldChangeset changeset) {}
-
   UnmodifiableListView<Field> get unmodifiableFields => UnmodifiableListView(_fieldNotifier.fields);
 
   List<Field> get clonedFields => [..._fieldNotifier.fields];
@@ -111,6 +116,17 @@ class GridFieldCache {
     _fieldNotifier.removeListener(f);
   }
 
+  void addChangesetListener(ChangesetListener listener) {
+    _changesetListener.add(listener);
+  }
+
+  void removeChangesetListener(ChangesetListener listener) {
+    final index = _changesetListener.indexWhere((element) => element == listener);
+    if (index != -1) {
+      _changesetListener.removeAt(index);
+    }
+  }
+
   void _deleteFields(List<FieldOrder> deletedFields) {
     if (deletedFields.isEmpty) {
       return;
@@ -172,14 +188,26 @@ class GridRowCacheDelegateImpl extends GridRowFieldDelegate {
 
 class GridCellCacheDelegateImpl extends GridCellFieldDelegate {
   final GridFieldCache _cache;
+  ChangesetListener? _changesetFn;
   GridCellCacheDelegateImpl(GridFieldCache cache) : _cache = cache;
 
   @override
   void onFieldChanged(void Function(String) callback) {
-    _cache.addListener(onChanged: (fields) {
-      for (final field in fields) {
-        callback(field.id);
+    changesetFn(GridFieldChangeset changeset) {
+      for (final updatedField in changeset.updatedFields) {
+        callback(updatedField.id);
       }
-    });
+    }
+
+    _cache.addChangesetListener(changesetFn);
+    _changesetFn = changesetFn;
+  }
+
+  @override
+  void dispose() {
+    if (_changesetFn != null) {
+      _cache.removeChangesetListener(_changesetFn!);
+      _changesetFn = null;
+    }
   }
 }

+ 5 - 8
frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/cell/selection_cell/selection_cell.dart

@@ -3,6 +3,7 @@ import 'package:app_flowy/workspace/application/grid/prelude.dart';
 import 'package:app_flowy/workspace/presentation/plugins/grid/src/widgets/cell/cell_builder.dart';
 import 'package:flowy_infra/theme.dart';
 import 'package:flowy_infra_ui/style_widget/text.dart';
+// ignore: unused_import
 import 'package:flowy_sdk/log.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_bloc/flutter_bloc.dart';
@@ -43,7 +44,7 @@ class _SingleSelectCellState extends State<SingleSelectCell> {
 
   @override
   void initState() {
-    Log.info("init widget $hashCode");
+    // Log.trace("init widget $hashCode");
     _cellBloc = getIt<SelectionCellBloc>(param1: widget.cellContext)..add(const SelectionCellEvent.initial());
     super.initState();
   }
@@ -51,7 +52,7 @@ class _SingleSelectCellState extends State<SingleSelectCell> {
   @override
   Widget build(BuildContext context) {
     final theme = context.watch<AppTheme>();
-    Log.info("build widget $hashCode");
+    // Log.trace("build widget $hashCode");
     return BlocProvider.value(
       value: _cellBloc,
       child: BlocBuilder<SelectionCellBloc, SelectionCellState>(
@@ -83,18 +84,14 @@ class _SingleSelectCellState extends State<SingleSelectCell> {
   @override
   void didUpdateWidget(covariant SingleSelectCell oldWidget) {
     if (oldWidget.cellContext != widget.cellContext) {
-      // setState(() {
-
-      // });
-      // _cellBloc = getIt<SelectionCellBloc>(param1: widget.cellContext)..add(const SelectionCellEvent.initial());
-      Log.info("did update widget $hashCode");
+      // Log.trace("did update widget $hashCode");
     }
     super.didUpdateWidget(oldWidget);
   }
 
   @override
   Future<void> dispose() async {
-    Log.info("dispose widget $hashCode");
+    // Log.trace("dispose widget $hashCode");
     _cellBloc.close();
     super.dispose();
   }

+ 1 - 1
frontend/app_flowy/packages/flowy_sdk/lib/log.dart

@@ -31,7 +31,7 @@ class Log {
   }
 
   static void trace(dynamic msg) {
-    Log.shared._logger.d(msg);
+    Log.shared._logger.v(msg);
   }
 
   static void error(dynamic msg) {

+ 4 - 6
frontend/rust-lib/flowy-grid/src/services/block_meta_manager.rs

@@ -3,17 +3,15 @@ use crate::manager::GridUser;
 use crate::services::block_meta_editor::ClientGridBlockMetaEditor;
 use crate::services::persistence::block_index::BlockIndexPersistence;
 use crate::services::row::{group_row_orders, GridBlockSnapshot};
-use std::borrow::Cow;
-
 use dashmap::DashMap;
-use flowy_error::{FlowyError, FlowyResult};
+use flowy_error::FlowyResult;
 use flowy_grid_data_model::entities::{
-    Cell, CellChangeset, CellMeta, GridBlockMeta, GridBlockMetaChangeset, GridRowsChangeset, IndexRowOrder, Row,
-    RowMeta, RowMetaChangeset, RowOrder, UpdatedRowOrder,
+    CellChangeset, CellMeta, GridBlockMeta, GridBlockMetaChangeset, GridRowsChangeset, IndexRowOrder, Row, RowMeta,
+    RowMetaChangeset, RowOrder, UpdatedRowOrder,
 };
 use flowy_revision::disk::SQLiteGridBlockMetaRevisionPersistence;
 use flowy_revision::{RevisionManager, RevisionPersistence};
-use lib_infra::future::FutureResult;
+use std::borrow::Cow;
 use std::collections::HashMap;
 use std::sync::Arc;
 

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

@@ -430,11 +430,6 @@ impl ClientGridEditor {
         self.grid_pad.read().await.delta_bytes()
     }
 
-    async fn row_builder(&self, row_meta: Arc<RowMeta>) -> FlowyResult<Option<Row>> {
-        let field_metas = self.get_field_metas::<FieldOrder>(None).await?;
-        Ok(make_rows_from_row_metas(&field_metas, &[row_meta]).pop())
-    }
-
     async fn modify<F>(&self, f: F) -> FlowyResult<()>
     where
         F: for<'a> FnOnce(&'a mut GridMetaPad) -> FlowyResult<Option<GridChangeset>>,

+ 1 - 1
frontend/rust-lib/flowy-grid/src/services/row/row_loader.rs

@@ -48,7 +48,7 @@ pub(crate) fn make_row_orders_from_row_metas(row_metas: &[Arc<RowMeta>]) -> Vec<
 }
 
 pub(crate) fn make_row_from_row_meta(fields: &[FieldMeta], row_meta: Arc<RowMeta>) -> Option<Row> {
-    make_rows_from_row_metas(fields, &vec![row_meta]).pop()
+    make_rows_from_row_metas(fields, &[row_meta]).pop()
 }
 
 pub(crate) fn make_rows_from_row_metas(fields: &[FieldMeta], row_metas: &[Arc<RowMeta>]) -> Vec<Row> {