keyboard.dart 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import 'package:flutter/services.dart';
  2. import '../render/selectable.dart';
  3. import 'editor_state.dart';
  4. import 'package:flutter/material.dart';
  5. class Keyboard extends StatelessWidget {
  6. final Widget child;
  7. final focusNode = FocusNode();
  8. final EditorState editorState;
  9. Keyboard({
  10. Key? key,
  11. required this.child,
  12. required this.editorState,
  13. }) : super(key: key);
  14. @override
  15. Widget build(BuildContext context) {
  16. return Focus(
  17. focusNode: focusNode,
  18. autofocus: true,
  19. onKey: _onKey,
  20. child: child,
  21. );
  22. }
  23. KeyEventResult _onKey(FocusNode node, RawKeyEvent event) {
  24. if (event is! RawKeyDownEvent) {
  25. return KeyEventResult.ignored;
  26. }
  27. List<KeyEventResult> result = [];
  28. for (final node in editorState.selectedNodes) {
  29. if (node.key != null &&
  30. node.key?.currentState is KeyboardEventsRespondable) {
  31. final respondable = node.key!.currentState as KeyboardEventsRespondable;
  32. result.add(respondable.onKeyDown(event));
  33. }
  34. }
  35. if (result.contains(KeyEventResult.handled)) {
  36. return KeyEventResult.handled;
  37. }
  38. return KeyEventResult.ignored;
  39. }
  40. }