startEditing method

void startEditing(
  1. MeshElement element,
  2. String attributeName
)

Implementation

void startEditing(docs.MeshElement element, String attributeName) {
  String text = element.attributes[attributeName] ?? "";
  _controller = TextEditingController(text: text);
  _controller!.selection = TextSelection(baseOffset: 0, extentOffset: text.length);
  editingValue = _controller!.text;
  _editing = element;
  _editingAttribute = attributeName;
  _editingFocusNode?.dispose();
  _editingFocusNode = FocusNode(
    onKeyEvent: (_, evt) {
      if (evt.logicalKey == LogicalKeyboardKey.escape) {
        _editing = null;
        _editingAttribute = null;

        notifyListeners();

        return KeyEventResult.handled;
      } else if (evt.logicalKey == LogicalKeyboardKey.enter) {
        _editingFocusNode!.unfocus();

        _editing = null;
        _editingAttribute = null;

        notifyListeners();
      }
      return KeyEventResult.ignored;
    },
  );
  _editingFocusNode!.requestFocus();
  _editingFocusNode!.addListener(() {
    if (!_editingFocusNode!.hasFocus) {
      element.setAttribute(attributeName, editingValue);

      _editing = null;
      _editingAttribute = null;

      notifyListeners();
    }
  });

  notifyListeners();
}