flutter - 获得焦点时选择 TextField 内的所有文本

标签 flutter dart

TextField 上,我想选择所有文本,以便在用户开始输入时删除现有文本。

这将替代:Android 中的 android:selectAllOnFocus="true"

如何做到这一点?

最佳答案

显式传递一个 Controller 和focusNode,然后你就可以完全控制:

final _controller = TextEditingController(); 
final _focusNode = FocusNode();

initState() {
  super.initState();
  _focusNode.addListener(() {
    if(_focusNode.hasFocus) {
      _controller.selection = TextSelection(baseOffset: 0, extentOffset: _controller.text.length);
    }
  });
}

build() => TextField(controller: _controller, focusNode: _focusNode);

更新 来自 https://github.com/flutter/flutter/issues/28307#issuecomment-467952074防止死循环:

_controller.addListener(() {
  final newText = _controller.text.toLowerCase();
  _controller.value = _controller.value.copyWith(
    text: newText,
    selection: TextSelection(baseOffset: newText.length, extentOffset: newText.length),
    composing: TextRange.empty,
  );
});

关于flutter - 获得焦点时选择 TextField 内的所有文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52344848/

相关文章:

flutter 如何检测底部导航索引已更改

dart - 在 RichText 小部件中向 TextSpan 背景添加额外的填充

flutter - 使用版本低于 1.0.0 的 Flutter/Dart 依赖 git 包时如何设置版本约束?

dart - 如何在构造函数中将常量值分配为默认值

flutter - 从自定义警报对话框获取回调

ios - 如何为 Flutter 应用程序的 iOS 部分集成 Firebase Crashlytics?

ios - 为什么 xCode 无法构建我的 flutter 应用程序并出现 'sqflite' 未找到错误

flutter - flutter sendMessage() 中的 Firebase 消息传递

flutter - 在Flutter中将字符串转换为文件,反之亦然

android - 我如何在 flutter 中单击交错 GridView 中的项目