board_cell.dart 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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. 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. }
  30. abstract class EditableCell {
  31. EditableCellNotifier? get editableNotifier;
  32. }
  33. class EditableCellId {
  34. String fieldId;
  35. String rowId;
  36. EditableCellId(this.rowId, this.fieldId);
  37. factory EditableCellId.from(GridCellIdentifier cellIdentifier) =>
  38. EditableCellId(
  39. cellIdentifier.rowId,
  40. cellIdentifier.fieldId,
  41. );
  42. }