Flutter Web禁用鼠标上下文菜单小工具



有没有办法在浏览器上仅针对特定的Widget禁用Flutter Web中的右键上下文菜单?

当然,我可以通过进入index.html并在body标记中禁用它来禁用整个网站。

<body oncontextmenu="return false;">

不太确定如果有办法的话,我会如何只为屏幕上的特定小部件做这件事?

哇,我终于想出了一个在特定小部件上禁用上下文菜单的方法。想法很简单,只需使用bool值并在右键单击和上下文菜单检查后切换即可。下面是一个示例小部件,它创建了一个右键单击的文本小部件,该小部件仅在此小部件上禁用右键单击上下文菜单:

// Remember to add dependency to 'universal_html: ^2.0.8'
import 'package:universal_html/html.dart' as html;
class PreventLinkContext extends StatefulWidget {
const PreventLinkContext({Key? key}) : super(key: key);
@override
State<PreventLinkContext> createState() => _PreventLinkContextState();
}
class _PreventLinkContextState extends State<PreventLinkContext> {
bool linkClicked = false;
var _preventContextMenu;
@override
void initState() {
super.initState();
_preventContextMenu = (html.Event event) => {
if (linkClicked)
{
event.preventDefault(),
linkClicked = false,
}
};
html.document.addEventListener('contextmenu', _preventContextMenu);
}
@override
void dispose() {
html.document.removeEventListener('contextmenu', _preventContextMenu);
super.dispose();
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onSecondaryTap: () {
linkClicked = true;
},
child: const Text(
'Link',
style: TextStyle(
color: Colors.cyan,
decoration: TextDecoration.underline,
),
),
);
}
}

编辑:添加了removeEventListener来处理函数和universal.html包的信息。

相关内容

  • 没有找到相关文章

最新更新