board_cell.dart 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import 'package:app_flowy/plugins/grid/application/prelude.dart';
  2. import 'package:flowy_infra/notifier.dart';
  3. abstract class FocusableBoardCell {
  4. set becomeFocus(bool isFocus);
  5. }
  6. class EditableCellNotifier {
  7. final Notifier becomeFirstResponder = Notifier();
  8. final Notifier resignFirstResponder = Notifier();
  9. EditableCellNotifier();
  10. }
  11. class EditableRowNotifier {
  12. final Map<EditableCellId, EditableCellNotifier> _cells = {};
  13. void insertCell(
  14. GridCellIdentifier cellIdentifier,
  15. EditableCellNotifier notifier,
  16. ) {
  17. _cells[EditableCellId.from(cellIdentifier)] = notifier;
  18. }
  19. void becomeFirstResponder() {
  20. for (final notifier in _cells.values) {
  21. notifier.becomeFirstResponder.notify();
  22. }
  23. }
  24. void resignFirstResponder() {
  25. for (final notifier in _cells.values) {
  26. notifier.resignFirstResponder.notify();
  27. }
  28. }
  29. void clear() {
  30. _cells.clear();
  31. }
  32. void dispose() {
  33. for (final notifier in _cells.values) {
  34. notifier.resignFirstResponder.notify();
  35. }
  36. _cells.clear();
  37. }
  38. }
  39. abstract class EditableCell {
  40. EditableCellNotifier? get editableNotifier;
  41. }
  42. class EditableCellId {
  43. String fieldId;
  44. String rowId;
  45. EditableCellId(this.rowId, this.fieldId);
  46. factory EditableCellId.from(GridCellIdentifier cellIdentifier) =>
  47. EditableCellId(
  48. cellIdentifier.rowId,
  49. cellIdentifier.fieldId,
  50. );
  51. }