如何解决在 Flutter 中的 TextFormField 和 TextField 中复制和粘贴不起作用
已解决:复制和粘贴在 TextFormField 中不起作用
发现我正在使用 Listener
的 onPointerDown 方法在用户点击应用程序中的任何其他地方时移除焦点。但这导致了错误。
但现在的问题是如果有人点击其他地方,如何移除焦点。
Listener(
onPointerDown: (_) {
FocusScopeNode currentFocus = FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus &&
currentFocus.focusedChild != null) {
currentFocus.focusedChild.unfocus();
}
},)
我正在尝试在我的 Flutter 应用程序的 TextFormField
中具有复制和粘贴功能。我尝试了很多方法,但还是不行。
这是我的代码
Widget textFormWidget(
String label,TextEditingController controller,bool enabled) {
return Padding(
padding: const EdgeInsets.all(8.0),child: TextFormField(
enabled: true,enableInteractiveSelection: true,readOnly: false,toolbarOptions:
ToolbarOptions(paste: true,cut: true,selectAll: true,copy: true),textAlign: TextAlign.center,cursorColor: Colors.white,cursorWidth: 3,controller: controller,style: bold.copyWith(fontSize: 18),decoration: Inputdecoration(
focusColor: Colors.white,hoverColor: Colors.white,labelText: label,alignLabelWithHint: true,labelStyle: normal),),);
}
将其称为 textFormWidget('Name',nameController,true),
解决方法
找到了两个解决方案。
如果您检查 TextField 小部件,您会发现它将使用 EditableText 来显示其简单的文本输入。 EditableText 有一个 selectionControls 属性。此属性用于呈现选择工具栏。另外,我发现 material 和 Cupertino 对它的实现不同。
第一个解决方案:您可以创建自己的自定义 TextField,它将使用 EditableText 并将您的自定义 selectionControl 传递给您的小部件。我认为这将是一项非常艰巨的工作。创建您自己的小部件实现、处理动画和...
第二种解决方案:您可以简单地将 TextField 的所有相关文件复制到一个新文件中,并根据需要进行更新。对于此解决方案,我创建了一个 repo in GitHub。您可以查看源代码以了解如何在粘贴选项中显示对话框。这就是代码应该如何工作。
注意:我只是简单地更新了 selectionControls 的 Material 实现的粘贴功能。如果需要,您也可以更新 Cupertino selectionControls。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。