Flutter Web - TextFormField 禁用复制和粘贴
Posted
技术标签:
【中文标题】Flutter Web - TextFormField 禁用复制和粘贴【英文标题】:Flutter Web - TextFormField disable copy and paste 【发布时间】:2021-10-11 18:21:42 【问题描述】:我想在我的文本字段上禁用复制和粘贴功能,但不幸的是,它在 网络 上没有按预期工作。我尝试了以下enableInteractiveSelection
和toolbarOptions
,但我仍然可以在网络上的文本字段上复制和粘贴。这有什么解决办法。谢谢
TextFormField(
enableInteractiveSelection: false,
toolbarOptions: ToolbarOptions(
copy: false,
paste: false,
cut: false,
selectAll: false,
),
)
【问题讨论】:
如果你改用TextField
,enableInteractiveSelection
会起作用吗?
toolbarOptions
是您在文本字段上长按/长按时会看到的选项。所以设置toolbarOptions
属性并没有真正禁用复制粘贴功能,它只是从工具栏中删除了复制、粘贴等选项。
@ikerfah 是的,结果还是一样,它在网络上不起作用
@Wahyu 我知道文本字段上的交互。我希望它可以在网络上运行。有解决办法吗?也许用 LogicalKeyboardKey 包装它并从那里禁用?
是否要禁用整个页面的复制、粘贴等功能?然后我认为可以通过创建一个javascript代码来禁用这些功能,并使用<script>
标签将其放入您的index.html文件中。
【参考方案1】:
如果您正在考虑使用快捷键,我们需要听LogicalKeySet
。
结果
我是这样做的:
对于复制粘贴键
///* for mac replace LogicalKeyboardKey.control, with LogicalKeyboardKey.meta
final selectableKeySetwindows = LogicalKeySet(
LogicalKeyboardKey.control,
LogicalKeyboardKey.keyA,
);
final pasteKeySetwindows = LogicalKeySet(
LogicalKeyboardKey.control,
LogicalKeyboardKey.keyV,
);
/// i dont have any ios device ?,let me know what it produce.
final selectableKeySetMac = LogicalKeySet(
LogicalKeyboardKey.meta,
LogicalKeyboardKey.keyA,
);
class SelectionIntent extends Intent
class PasteIntent extends Intent
将处理事件的小部件
class DisableShortcut extends StatelessWidget
final Widget child;
const DisableShortcut(
Key? key,
required this.child,
) : super(key: key);
@override
Widget build(BuildContext context)
return FocusableActionDetector(
shortcuts:
selectableKeySetwindows: SelectionIntent(),
pasteKeySetwindows: PasteIntent(),
,
actions:
SelectionIntent: CallbackAction(
onInvoke: (intent)
ScaffoldMessenger.of(context)
.showSnackBar(SnackBar(content: Text("Copy is forbidden")));
return FocusScope.of(context).requestFocus(FocusNode());
,
),
PasteIntent: CallbackAction(
onInvoke: (intent) async
// ClipboardData? data = await Clipboard.getData('text/plain');
// print(" paste callBack $data!.text");
return ScaffoldMessenger.of(context)
.showSnackBar(SnackBar(content: Text("Paste is forbidden")));
,
)
,
autofocus: true,
child: child,
);
我的 testWidget
@override
Widget build(BuildContext context)
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextField(),
TextField(),
DisableShortcut(
child: TextField(
enableInteractiveSelection: false,
toolbarOptions: ToolbarOptions(
copy: false,
cut: false,
paste: false,
selectAll: false,
),
),
),
],
),
),
);
【讨论】:
不错。这将在此期间完成。谢谢以上是关于Flutter Web - TextFormField 禁用复制和粘贴的主要内容,如果未能解决你的问题,请参考以下文章