如果您正在考虑使用快捷键,我们需要听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,
),
),
),
],
),
),
);