加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flutter 1.22版本新增的Button

发布时间:2020-12-14 14:46:59 所属栏目:百科 来源:网络整理
导读:Flutter 1.22版本新增了3个按钮, TextButton、OutlinedButton、ElevatedButton ,虽然以前的 Button 没有被废弃,但还是建议使用新的 Button 。 为什么会新增 Button ?因为想要将以前的按钮调整为统一的外观比较麻烦,因此以前经常使用自定义的按钮,而新

Flutter 1.22版本新增了3个按钮,TextButton、OutlinedButton、ElevatedButton,虽然以前的Button没有被废弃,但还是建议使用新的Button

为什么会新增 Button?因为想要将以前的按钮调整为统一的外观比较麻烦,因此以前经常使用自定义的按钮,而新增的按钮解决了此类问题,可以非常方便的设置整体外观。

1.22版本前的按钮 主题 1.22版本后的按钮 主题
FlatButton ButtonTheme TextButton TextButtonTheme
OutlineButton ButtonTheme OutlinedButton OutlinedButtonTheme
RaisedButton ButtonTheme ElevatedButton ElevatedButtonTheme

样式对比:

外观上并没有很大的不同,但TextButton、OutlinedButton、ElevatedButton 将外观属性集合为一个 ButtonStyle,非常方便统一控制。

TextButton、OutlinedButton、ElevatedButton 这3个按钮的用法和属性完全相同,下面以 TextButton 为例。

简单使用:

TextButton(
  child: Text('TextButton'),)

onPressed 不设置或者设置为 null 时,按钮为不可用状态。

TextButton(
  child: Text('TextButton'),onPressed: (){},)

onPressed 为点击回调,onLongPress 为长按回调。

下面是最重要的属性 ButtonStyle,一切外观都是通过这个属性进行控制,属性如下:

const ButtonStyle({
  this.textStyle,//字体
  this.backgroundColor,//背景色
  this.foregroundColor,//前景色
  this.overlayColor,// 高亮色,按钮处于focused,hovered,or pressed时的颜色
  this.shadowColor,// 阴影颜色
  this.elevation,// 阴影值
  this.padding,// padding
  this.minimumSize,//最小尺寸
  this.side,//边框
  this.shape,//形状
  this.mouseCursor,//鼠标指针的光标进入或悬停在此按钮的[InkWell]上时。
  this.visualDensity,// 按钮布局的紧凑程度
  this.tapTargetSize,// 响应触摸的区域
  this.animationDuration,//[shape]和[elevation]的动画更改的持续时间。
  this.enableFeedback,// 检测到的手势是否应提供声音和/或触觉反馈。例如,在Android上,点击会产生咔哒声,启用反馈后,长按会产生短暂的振动。通常,组件默认值为true。
});

这些属性的用法也和以前的不一样,比如 textStyle 并不是直接设置 TextStyle,下面设置字体:

TextButton(
  child: Text('TextButton'),onPressed: () {},style: ButtonStyle(
    textStyle: MaterialStateProperty.all(TextStyle(fontSize: 20)),),)

注意:字体颜色的设置不通过textStyle 设置,而是通过 foregroundColor

TextButton(
  child: Text('TextButton'),style: ButtonStyle(
    foregroundColor: MaterialStateProperty.all(Colors.red),)

根据按钮的状态改变字体颜色:

TextButton(
                    child: Text('TextButton'),style: ButtonStyle(
                      foregroundColor:
                          MaterialStateProperty.resolveWith((states) {
                        return states.contains(MaterialState.pressed)
                            ? Colors.blue
                            : Colors.red;
                      }),)

其他属性用法和上面类似,不在一一介绍。

进行全局控制:

MaterialApp(
  title: 'Flutter Demo',theme: ThemeData(
    textButtonTheme: TextButtonThemeData(
      style: ButtonStyle()
    ),elevatedButtonTheme: ElevatedButtonThemeData(
        style: ButtonStyle()
    ),outlinedButtonTheme: OutlinedButtonThemeData(
        style: ButtonStyle()
    )
  ),home: MyHomePage(title: 'Flutter Demo Home Page'),)

ButtonStyle 内的属性配置和单个按钮的用法是一致的。

通过上面的介绍,建议使用 TextButton、OutlinedButton、ElevatedButton 替换 FlatButton、OutlineButton、RaisedButton

交流

老孟Flutter博客(330个控件用法+实战入门系列文章):http://laomengit.com

欢迎加入Flutter交流群(微信:laomengit)、关注公众号【老孟Flutter】:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读