Flutter 常用Widget-按钮

按钮,是我们开发中最常用的部件之一,在Flutter中也提供了丰富的按钮部件。

MaterialButton

  • RaisedButton
  • OutlineButton
  • FlatButton
  • IconButton

MaterialButton,依赖于widget tree中最近的ButtonTheme和Theme的Material按钮。

按钮的大小将扩展以适合子窗口小部件。

其onPressed处理函数为null的MaterialButtons将被禁用。 要启用按钮,请确保为onPressed传递非null值。

官方建议考虑使用FlatButton,OutlineButton或RaisedButton,它们会使用与material设计规范相匹配的适当默认值来配置按钮。

如果不继承主题默认值,直接创建按钮,请使用RawMaterialButton。

如果希望保持涟漪效果,但又不想使用按钮,请直接使用InkWell。

=================================================================================================

MaterialButton

class ButtonPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: MaterialButton(
          onPressed: () {},
          child: Text(
            '我是MaterialButton',
          ),
        ),
      ),
    );
  }
}

我们可以看到由于没有配置按钮颜色大小等信息,所以所有的配置都是默认的,点击之后会有涟漪效果。如果onPressed: 属性不设置,那么按钮被禁用。因为button的配置都差不多,所以关于主题颜色配置,我们后面一起研究。

RaisedButton

RaisedButton是material设计规范中的“凸起按钮”。material设计规范中建议,凸起按钮应该添加在平面布局中,避免在已升高的内容(例如对话框或卡片)上使用凸起的按钮。默认带有阴影和灰色背景。按下后,阴影会变大

同样,onPressed回调为null,则该按钮将被禁用,并且默认情况下将类似于DisabledColor中的平面按钮。 如果尝试更改按钮的颜色并且没有任何效果,请检查是否传递了非null的onPressed函数。

凸起的按钮的最小尺寸为88.0 x 36.0,可以用ButtonTheme覆盖。

class ButtonPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: RaisedButton(
          onPressed: () {},
          child: Text(
            '我是RaisedButton',
          ),
        ),
      ),
    );
  }
}

FlatButton

FlatButton是material设计规范中的的“扁平按钮”。平面按钮没有可见的边框,默认背景透明并不带阴影。按下后,会有背景色。

同样的,onPressed回调为null,则该按钮将被禁用,不会对触摸产生反应,并且将按照disabledColor属性而不是color属性指定的颜色进行着色。如果您尝试更改按钮的颜色并且没有任何效果,请检查是否传递了非null的onPressed处理函数。

平面按钮的最小尺寸为88.0 x 36.0,可以用ButtonTheme覆盖。

class ButtonPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: FlatButton(
          onPressed: () {},
          child: Text(
            '我是FlatButton',
          ),
        ),
      ),
    );
  }
}

OutlineButton

介于RaisedButton和FlatButton的特性之间:带边框的按钮,不带阴影且背景透明。按下后,边框颜色会变亮、同时出现背景和阴影。轮廓按钮的边框由形状定义,外观由borderSide,disabledBorderColor和highlightedBorderColor定义。

同样,onPressed回调为null,则该按钮将被禁用,并且默认情况下将类似于DisabledColor中的平面按钮。

按钮的最小大小为88.0 x 36.0,可以用ButtonTheme覆盖。

class ButtonPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: OutlineButton(
          onPressed: () {},
          child: Text(
            '我是OutlineButton',
          ),
        ),
      ),
    );
  }
}

IconButton

material设计中的图标按钮。要求父节点中之一是material widget。图标按钮通常在AppBar.actions字段中使用,但也不限于此。

同样,onPressed回调为null,则该按钮将被禁用,并且不会对触摸做出反应。无论实际的iconSize大小如何,图标按钮的点击区域都将至少为48.0像素大小,以满足material设计规范中对触摸目标尺寸的要求。 

class ButtonPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: IconButton(
          onPressed: () {},
          icon: Icon(Icons.adb),
        ),
      ),
    );
  }
}

此外,RaisedButton、OutlineButton、FlatButton都为我们提供了icon的构造函数。类似这样的效果。

class ButtonPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: RaisedButton.icon(
          onPressed: () {},
          icon: Icon(Icons.accessible),
          label: Text('我是带icon的RaisedButton'),
        ),
      ),
    );
  }
}

外观参数说明

  const RaisedButton({
    Key key,
    @required VoidCallback onPressed,// 点击事件,如果null,按钮禁用

    ButtonTextTheme textTheme,// button 的主题设置

    Color textColor,// 文字颜色
    Color disabledTextColor,// 禁用态颜色
    Color color,// 填充颜色
    Color disabledColor,// 禁用颜色
    Color focusColor,// 焦点颜色
    Color hoverColor,// 悬浮颜色
    Color highlightColor,// 高亮
    Color splashColor,// 涟漪颜色

    double elevation,// 阴影部分
    double focusElevation,
    double hoverElevation,
    double highlightElevation,
    double disabledElevation,

    EdgeInsetsGeometry padding,// padding填充

    ShapeBorder shape,// 外形

    Widget child,
  })

按钮的自定义属性,相信大部分属性大家都知道怎么使用,这里不在赘述了。但是有一点需要注意,ButtonTextTheme这个属性,由于这个地方的属性容易相互覆盖,其中的关系会在后面theme主题系列文章中详细阐。

总结:flutter中button的基本用法和属性就先介绍到这里,接下来的文章会继续将常用Widget逐一介绍,在最后的系列中,会公开一个商业级的项目,感兴趣的小伙伴关注。如果您在阅读过程中发现错误,请及时留言给我,我会第一时间改正,争取不误导他人。感谢支持!

猜你喜欢

转载自blog.csdn.net/z2008q/article/details/108466315