flutter 按钮插入\删除TextField , emoji 表情 UTF-16 code

插入文本到TextField

void insertText(String text) {
    final currentText = _textEditingController.text;
    int cursorIndex = _textEditingController.selection.baseOffset;
    if (cursorIndex == -1) cursorIndex = 0;
    final beforeText = currentText.substring(0, cursorIndex);
    final afterText = currentText.substring(cursorIndex, currentText.length);
    cursorIndex += text.length;
    final selection = TextSelection(baseOffset: cursorIndex, extentOffset: cursorIndex);
    _textEditingController.value = TextEditingValue(
      text: "$beforeText$text$afterText",
      selection: selection,
    );
  }

删除文本到TextField

 void deleteText() {
    int getNewCursorPos(List<int> runes, int runeOffset) {
      return String.fromCharCodes(runes.sublist(0, runeOffset)).length;
    }

    final int cursorPos = _textEditingController.selection.baseOffset;
    if (cursorPos > 0) {
      final String text = _textEditingController.text;
      final List<int> textRunes = text.runes.toList();
      final runeOffset = text.substring(0, cursorPos).runes.length;
      if (runeOffset > 0) {
        textRunes.removeAt(runeOffset - 1);
        _textEditingController.text = String.fromCharCodes(textRunes);
        _textEditingController.selection = TextSelection.fromPosition(
          TextPosition(offset: getNewCursorPos(textRunes, runeOffset - 1)),
        );
      }
    }
  }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容