Flutter Web:鼠标相关处理

简介: 我们在利用Flutter Web开发pc端可以访问的网站,所以会有一些关于鼠标的处理。

前言


我们在利用Flutter Web开发pc端可以访问的网站,所以会有一些关于鼠标的处理。


悬停


可以点击的widget,如button。如果鼠标悬停到这部分,会出现阴影,并且按下和释放都有阴影。这样虽然有交互效果,但是有时候很不美观。

我们可以通过设置相关的属性来解决这个问题。


MaterialButton


先看如何改变单个按钮的阴影效果,MaterialButton及其子类(FlatButton等)可以通过为hoverColor等属性设置自定义颜色,或者设置透明颜色来去除这些效果,如下:

MaterialButton(
      onPressed: () {
        ...
      },
      hoverColor: Colors.transparent,
      focusColor: Colors.transparent,
      splashColor: Colors.transparent,
      child: ...,
      ...
    );
复制代码


hoverColor就是悬停时显示的底部颜色,focusColor则是获取焦点(即按下),splashColor则是释放(即up)的时候。

当然Button还有更多的相关属性,通过这些属性可以设置美观的效果。


TextButton


在Flutter2.0中如果使用FlatButton就会提示已不建议使用,替代的是2.0新加入的TextButton。它并不是MaterialButton的子类,所以没有hoverColor等属性,那么怎么设置自定义阴影,或去除它的阴影效果?通过设置它的style,如下:


TextButton(
      onPressed: () {
        ...
      },
      style: ButtonStyle(
        overlayColor: MaterialStateProperty.all(Colors.transparent),
      ),
      ...
      child: ...,
      ...
    );
复制代码


设置ButtonStyle的overlayColor属性即可,这个属性就是阴影效果。


全局配置


基本上视觉不会接受任何按钮默认的阴影效果,所以如果一个个按钮去设置很麻烦,我们可以全局设置,在app中通过配置theme即可,如下:


MaterialApp(
      title: title,
      theme: ThemeData(
        ...   
        buttonTheme: ButtonThemeData(
          focusColor: Colors.transparent,
          hoverColor: Colors.transparent,
          splashColor: Colors.transparent,
        ),
        textButtonTheme: TextButtonThemeData(
          style: ButtonStyle(
            overlayColor: MaterialStateProperty.all(Colors.transparent),
          )
        ),
        ...
      ),
      ...
    )
复制代码


注意buttonTheme和textButtonTheme,一个是负责MaterialButton及其子类的,一个是负责TextButton及其子类的,如果app中两类button都使用了,那么就需要将两个都进行配置。


区域显示隐藏


pc上会有一种需求,当鼠标移到某个区域则显示,移出则隐藏。比如播放器的底部操作栏,平时是隐藏的,不影响观看,当鼠标移到底部则显示。

这种需求可以通过MouseRegion实现,它类似GestureDetector,GestureDetector只能处理手势相关的,比如点击、拖动等等,而MouseRegion则处理鼠标相关,包含进入onEnter,退出onExit和悬停onHover。实现代码如下:


MouseRegion(
  onEnter: (event){
    setState(() {
      _hide = false;
    });
  },
  onExit: (event){
    setState(() {
      _hide = true;
    });
  },
  child: _hide ? _buildDefault() : _buildBar()
);
复制代码


_hide是一个类变量。_buildBar则是要显示的内容,而_buildDefault则是一个空白的区域,用来检测鼠标Enter事件的,比如:


Widget _buildDefault(){
    return Container(
      width: double.infinity,
      height: 40,
    );
  }
复制代码


一个40高,屏幕宽度的透明区域,当鼠标进入这个区域,则显示_buildBar的内容,如果移出则重新显示这个透明区域。这样就实现了上面的需求。


目录
相关文章
|
3月前
|
Dart 前端开发 Java
|
3月前
|
前端开发 JavaScript Android开发
Flutter 调用本地 web
Flutter 调用本地 web
38 0
|
5月前
|
监控 Serverless 持续交付
阿里云云效产品使用问题之如何让流水线支持构建 flutter web 应用到 OSS
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
5月前
|
开发框架 Dart JavaScript
深入探讨Flutter中的Web支持功能,以及如何利用Flutter构建跨平台Web应用的最佳实践
【6月更文挑战第11天】Flutter,Google的开源跨平台框架,已延伸至Web支持,让开发者能用同一代码库构建移动和Web应用。Flutter Web基于Dart转JavaScript,利用WebAssembly和JavaScript在Web上运行。构建Web应用最佳实践包括选择合适项目、优化性能、进行兼容性测试和利用Flutter的声明式UI、热重载等优势。尽管性能挑战存在,Flutter Web为跨平台开发提供了更多机会和潜力。
92 1
|
4月前
|
机器人 开发工具 Android开发
flutter web 优化和flutter_admin_template
flutter web 优化和flutter_admin_template
|
5月前
|
移动开发 小程序 安全
基础入门-APP架构&小程序&H5+Vue语言&Web封装&原生开发&Flutter
基础入门-APP架构&小程序&H5+Vue语言&Web封装&原生开发&Flutter
|
5月前
|
Dart 前端开发 JavaScript
Flutter for Web:跨平台移动与Web开发的新篇章
Flutter for Web是Google的开源UI工具包Flutter的延伸,用于构建高性能、高保真的跨平台应用,包括Web。它基于Dart语言和Flutter的核心框架,利用Skia渲染引擎通过WebAssembly在Web上运行。开发流程包括安装SDK、创建项目、编写Dart代码和部署。性能优化涉及减少渲染开销、代码压缩等。与传统Web框架相比,Flutter for Web在开发效率和性能上有优势,但兼容性和生态系统尚待完善。
83 0
|
6月前
|
开发框架 Dart 前端开发
【Flutter前端技术开发专栏】Flutter中的Web支持:构建跨平台Web应用
【4月更文挑战第30天】Flutter,Google的开源跨平台框架,已延伸至Web领域,让开发者能用同一代码库构建移动和Web应用。Flutter Web通过将Dart代码编译成JavaScript和WASM运行在Web上。尽管性能可能不及原生Web应用,但适合交互性强、UI复杂的应用。开发者应关注性能优化、兼容性测试,并利用Flutter的声明式UI、热重载等优势。随着其发展,Flutter Web为跨平台开发带来更多潜力。
135 0
【Flutter前端技术开发专栏】Flutter中的Web支持:构建跨平台Web应用
|
6月前
|
开发框架 Dart 前端开发
构建响应式Web界面:Flutter的跨界前端技术
【2月更文挑战第23天】随着移动互联网的飞速发展,响应式Web设计成为现代前端开发的重要趋势。在众多框架中,Google推出的Flutter以其高效的渲染性能、跨平台能力及丰富的组件生态,为前端开发者带来了新的选择。本文将深入探讨如何利用Flutter进行高效、美观的响应式界面构建,同时剖析其与传统前端技术的差异和优势。
|
6月前
|
Web App开发 Ubuntu 应用服务中间件
Flutter笔记:Web支持原理与实践
Flutter笔记:Web支持原理与实践
260 0