Flutter Widget 之 MouseRegion

665 阅读1分钟

操作手机时可用的输入机制很有限,你试过点击的单个像素而非旁边的像素吗?

ezgif.com-gif-maker.gif 手机上可能办不到,但在其他平台,我们有mouse。

可利用MouseRegion小部件得知mouse是否位于特定区域

选用能感应mouse动作的小部件,并以MouseRegion包裹,便能得知mouse是否处于特定范围

MouseRegion(
    child: Container(),
)

为此,一开始先更改指标以给用户提示,利用cursor属性,最常见光标的相关定义都包含在SystemMouseCursors类

  • SystemMouseCursors.basic

image.png

  • SystemMouseCursors.text

image.png

  • SystemMouseCursors.click

image.png

  • SystemMouseCursors.forbidden

image.png

MouseRegion(
    child: Container(),
    cursor: SystemMouseCursors.basic
)

接着,MouseRegion会有一系列回调,可用以监听mouse.当鼠标首次进入MouseRegion占用区就会调用onEnter,回调将被赋予一指标输入事件,籍此提供鼠标坐标或按钮动作在内的各种资讯,onHover和onExit也差不多。

每次鼠标在MOuseRegioon小部件易位或离开时都会被调用

MouseRegion(
    child: Container(),
    cursor: SystemMouseCursors.click,
    onEnter: (event) => {},
    onHover: (event) => {},
    onExit: (event) => {},
)

现在各位或许会认为在调用方面,onEnter和onExit是联动的,毕竟有进必有出,对吧?

ezgif.com-gif-maker (1).gif

不是的,若小部件就是消失了怎么办?

MouseRegion有时可能会离开小部件树,这不算退出mouse,且不会调用onExit回调

如果想了解有关MouseRegion 的内容,或者关于Flutter的其他功能,请访问flutter.dev

原文翻译自视频:视频地址