使用 Flutter Button

简介: 使用 Flutter Button

改变 button style 主要有两种方法,styleFrom,ButtonStyle。

styleFrom

styleFrom 是静态方法,内部调用 ButtonStyle,从这个逻辑上就可以看出来,styleFrom 用起来简单,但灵活性不如 ButtonStyle。设置的值对所有 MaterialState 都生效。

ElevatedButton(
      style: ElevatedButton.styleFrom(
        foregroundColor: Colors.green
      ),
      child: Text(
        'IAM17 flutter 天天更新',
      ),
      onPressed: () {
        print('a');
      }
 );
复制代码

想精细的控制颜色,直接用 ButtonStyle

ButtonStyle

把刚才的 foregroundColor 换成 buttonStyle 这样写

ElevatedButton(
      style: ButtonStyle(foregroundColor: MaterialStateProperty.all<Color>(Colors.green)),
      child: Text(
        'IAM17',
      ),
      onPressed: () {
        print('pressed');
      }
 );
复制代码

看起来代码更多了,用 buttonStyle 更多的是用 resolveWith,更精细的控制样式。当 return null  的时候,就用默认的样式。

ElevatedButton(
  style: ButtonStyle( 
    overlayColor:
       MaterialStateProperty.resolveWith<Color?>((states) {
     if (states.contains(MaterialState.hovered)) {
       return Colors.green;
     }
     return null;
   })),
   child: Text(
     'flutter',
   ),
   onPressed: () {
     print('pressed');
   });
复制代码

如果有很多地方用,每次都写 resolveWith 方法还是很麻烦的,我们可以定义一个类。

class _TextButtonDefaultOverlay extends MaterialStateProperty<Color?> {
  _TextButtonDefaultOverlay(this.primary);
  final Color primary;
  @override
  Color? resolve(Set<MaterialState> states) {
    if (states.contains(MaterialState.hovered))
      return primary.withOpacity(0.04);
    if (states.contains(MaterialState.focused) || states.contains(MaterialState.pressed))
      return primary.withOpacity(0.12);
    return null;
  }
  @override
  String toString() {
    return '{hovered: ${primary.withOpacity(0.04)}, focused,pressed: ${primary.withOpacity(0.12)}, otherwise: null}';
  }
}
复制代码

override resolve 方法就可以了。

ElevatedButton(
  style: ButtonStyle( 
    overlayColor:_TextButtonDefaultOverlay(Colors.green),
   child: Text(
     '天天更新',
   ),
   onPressed: () {
     print('pressed');
   });
复制代码

上面说的两种方法都是改变某个 button,要想改变整个树中的 button,用 TextButtonTheme, ElevatedButtonTheme, 和 OutlinedButtonTheme

比如

ElevatedButtonTheme(
     data: ElevatedButtonThemeData(
         style: ButtonStyle(
             textStyle: MaterialStateProperty.all<TextStyle>(
                 TextStyle(fontSize: 20)))),
     child: ElevatedButton(
     ...
复制代码

需要注意几点。

  1. foregroundColor 用来定义文本颜色,就不要用 textStyle 中的 color了。
  2. 优先设置属性值,属性没有的再设置 style,style 没有的,再设置 child 的属性值。
  3. fixedSize 可以设置按钮的大小,但是会受到 minimumSize 和 maximumSize 的限制。
  4. 按钮默认是有 padding的。
  5. tapTargetSize 可以增加点击区域。

MaterialState 枚举

直接到这里看吧。有图有讲解。我不就搬过来了。ButtonStyle 和 MaterialStateProperty

其它的属性什么的就都很简单了,试试就都知道了,就不再赘述了。

目录
相关文章
Flutter Button 实例
Flutter Button 实例
140 0
Flutter Button 实例
Flutter入门:Button
IconButton 如果即是一个图标又想点击,那么就用这个 IconButton( icon: Icon(Icons.close), onPressed: (){ // } )
191 0
|
容器
Flutter 62: 图解基本 Button 按钮小结 (二)
0 基础学习 Flutter,第六十一节:学习基础按钮第二节!
1604 0
|
Android开发 容器
Flutter 61: 图解基本 Button 按钮小结 (一)
0 基础学习 Flutter,第六十一节:学习基础按钮第一节!
9868 0
|
3月前
|
缓存 监控 前端开发
【Flutter 前端技术开发专栏】Flutter 应用的启动优化策略
【4月更文挑战第30天】本文探讨了Flutter应用启动优化策略,包括理解启动过程、资源加载优化、减少初始化工作、界面布局简化、异步初始化、预加载关键数据、性能监控分析以及案例和未来优化方向。通过这些方法,可以缩短启动时间,提升用户体验。使用Flutter DevTools等工具可助于识别和解决性能瓶颈,实现持续优化。
156 0
【Flutter 前端技术开发专栏】Flutter 应用的启动优化策略
|
2月前
|
开发框架 前端开发 测试技术
Flutter开发常见问题解答
Flutter开发常见问题解答
|
3月前
|
前端开发 C++ 容器
Flutter-完整开发实战详解(一、Dart-语言和-Flutter-基础)(1)
Flutter-完整开发实战详解(一、Dart-语言和-Flutter-基础)(1)
|
8天前
|
移动开发 前端开发 JavaScript
"跨界大战!React Native、Weex、Flutter:三大混合开发王者正面交锋,揭秘谁才是你移动应用开发的终极利器?"
【8月更文挑战第12天】随着移动应用开发的需求日益增长,高效构建跨平台应用成为关键。React Native、Weex与Flutter作为主流混合开发框架各具特色。React Native依托Facebook的强大支持,以接近原生的性能和丰富的组件库著称;Weex由阿里巴巴开发,性能优越尤其在大数据处理上表现突出;Flutter则凭借Google的支持及独特的Dart语言和Skia渲染引擎,提供出色的定制能力和开发效率。选择时需考量项目特性、团队技能及生态系统的成熟度。希望本文对比能助你做出最佳决策。
29 1
|
2月前
|
开发框架 移动开发 Android开发
构建高效移动应用:探索Flutter开发框架
【6月更文挑战第28天】随着移动设备的普及,用户对移动应用的需求日益增长。开发者面临着在众多平台间提供无缝体验的挑战。本文深入探讨了Flutter框架如何通过其跨平台特性、热重载功能以及丰富的组件库简化移动应用的开发流程,同时确保高性能和优雅的用户界面设计。
39 2
|
3月前
|
Dart 安全
简化代码、提高效率:Dart和Flutter开发小技巧
在日常开发中,我们常常会使用一些常用的技巧或语法糖,以简化代码、提高开发效率。本文将分享一些在Dart和Flutter中常用的小贴士,帮助你更轻松地编写优雅高效的代码。
简化代码、提高效率:Dart和Flutter开发小技巧