第八节:Flutter中Button按钮

1. 对于Flutter中按钮的认识

1.1 Flutter中的按钮

Flutter里有很多的Button组件,常见的按钮组件有:RaisedButton, FlatButton,IconButton,OutlineButton, ButtonBar, FloatingActionButton等

说明:

  1. RaisedButton : 凸起的按钮,其实就是Material Design 风格发Button
  2. FlatButton: 扁平化的按钮
  3. OutlineButton: 线框按钮
  4. IconButton : 图标按钮
  5. ButtonBar: 按钮组
  6. FloatingActionButton: 浮动按钮

按钮源码中的所有属性

const RaisedButton({
    Key key,
    @required VoidCallback onPressed,
    VoidCallback onLongPress,
    ValueChanged<bool> onHighlightChanged,
    ButtonTextTheme textTheme,
    Color textColor,
    Color disabledTextColor,
    Color color,
    Color disabledColor,
    Color focusColor,
    Color hoverColor,
    Color highlightColor,
    Color splashColor,
    Brightness colorBrightness,
    double elevation,
    double focusElevation,
    double hoverElevation,
    double highlightElevation,
    double disabledElevation,
    EdgeInsetsGeometry padding,
    VisualDensity visualDensity,
    ShapeBorder shape,
    Clip clipBehavior = Clip.none,
    FocusNode focusNode,
    bool autofocus = false,
    MaterialTapTargetSize materialTapTargetSize,
    Duration animationDuration,
    Widget child,
})

我们只看一些常用的


1.2 Flutter中按钮的属性

Flutter 按钮组件中的一些属性

属性名称 值的类型 属性值
onPressed VoildCallback,接受一个方法 必填参数,按钮按下时触发的回调,<br />传null表示按钮禁用
child Widget 文本控件
textColor Color 文本颜色
color Color 按钮颜色
disabledColor Color 按钮禁用时文本颜色
splashColor Color 点击按钮是水波纹的颜色
highlightColor Color 点击按钮后按钮的颜色
elevation double 阴影的范围,值越大范围越大
padding 内边距
Shape 设置按钮的形状


1.3 圆角和圆形圆形

Shape按钮的形状

1.圆角按钮

shape:RoundedRectangleBorder(
    borderRadius: BorderRadius.circular(10)
)

2.圆形按钮

shape: CircleBorder(
    side: BorderSide(
        color: Colors.white
    )
)


2. Flutter按钮属性的使用

我们以RiasedButton 按钮为例,理解属性的使用和意思, 其他按钮也一样

2.1 禁用按钮

如果没有添加onPressed属性,按钮默认为禁用按钮

通常禁用按钮会选择将onPressed属性值设置为null

class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(

            child: Container(

                // 按钮
                child: RaisedButton(
                    child:Text("普通按钮"),
                    onPressed: (){    // 如果使用onPressed, 则为禁用按钮,
                        print("普通按钮");
                    }
                )
            )
        );
    }
}


2.2 按钮禁用时的文字颜色
class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(

            child: Container(

                // 按钮
                child: RaisedButton(
                    child:Text("普通按钮"),
                    disabledColor:Colors.pink,  // 按钮禁用时的颜色
                    disabledTextColor: Colors.green, // 按钮禁用时的文本颜色
                    onPressed: null  // 禁用按钮
                )
            )
        );
    }
}


2.3 普通按钮

只使用onPressed属性,按钮为可以用按钮,其他样式为默认的

class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(
            child: Container(

                // 按钮
                child: RaisedButton(
                    child:Text("普通按钮"),
                    onPressed: (){    // 如果使用onPressed, 则为禁用按钮
                        print("普通按钮");
                    }
                )
            )
        );
    }
}


2.4 添加按钮颜色和文字颜色
class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(

            child: Container(

                // 按钮
                child: RaisedButton(
                    child:Text("普通按钮"),
                    color:Colors.blue,        // 按钮颜色
                    textColor: Colors.white,  // 按钮文字颜色
                    onPressed: (){    // 如果使用onPressed, 则为禁用按钮
                        print("普通按钮");
                    }
                )
            )
        );
    }
}


2.5 按钮的阴影
class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(

            child: Container(

                // 按钮
                child: RaisedButton(
                    child:Text("普通按钮"),
                    color:Colors.blue,        // 按钮颜色
                    textColor: Colors.white,  // 按钮文字颜色
                    elevation: 30.0,          // 按钮的阴影
                    onPressed: (){    //  如果使用onPressed, 则为禁用按钮
                        print("普通按钮");
                    }
                )
            )
        );
    }
}


2.6 修改按钮按下时的颜色
class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(

            child: Container(

                // 按钮
                child: RaisedButton(
                    child:Text("普通按钮"),
                    color:Colors.blue,        // 按钮颜色
                    textColor: Colors.white,  // 按钮文字颜色
                    elevation: 30.0,          // 按钮的阴影
                    highlightColor: Colors.green,  // 按钮按下的颜色
                    onPressed: (){    //  如果使用onPressed, 则为禁用按钮
                        print("普通按钮");
                    }
                )
            )
        );
    }
}


2.7 按钮的水波颜色
class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(

            child: Container(

                // 按钮
                child: RaisedButton(
                    child:Text("普通按钮"),
                    color:Colors.blue,        // 按钮颜色
                    textColor: Colors.white,  // 按钮文字颜色
                    elevation: 30.0,          // 按钮的阴影
                    highlightColor: Colors.green,  // 按钮按下的颜色
                    splashColor:Colors.red,     // 按钮的水波颜色
                    onPressed: (){    //  如果使用onPressed, 则为禁用按钮
                        print("普通按钮");
                    }
                )
            )
        );
    }
}


2.8 设置按钮的大小

在按钮的参数中没有修改按钮大小的配置, 如果需要修改按钮大小

则需要将按钮放在容器中, 改变容器的大小

class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(

            child: Container(
                // 修改容器大小,进而修改按钮的大小
                height:50.0,
                width:100.0,

                // 按钮
                child: RaisedButton(
                    child:Text("普通按钮"),
                    color:Colors.blue,        // 按钮颜色
                    textColor: Colors.white,  // 按钮文字颜色
                    elevation: 30.0,          // 按钮的阴影
                    highlightColor: Colors.green,  // 按钮按下的颜色
                    splashColor:Colors.red,     // 按钮的水波颜色
                    onPressed: (){    //  如果使用onPressed, 则为禁用按钮
                        print("普通按钮");
                    }
                )
            )
        );
    }
}



2.9 圆角和圆形按钮

通过shape参数来修改圆角和圆形按钮

圆角按钮(用的比较多)

class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(

            child: Container(
                // 修改容器大小,进而修改按钮的大小
                height:50.0,
                width:100.0,

                // 按钮
                child: RaisedButton(
                    child:Text("普通按钮"),
                    color:Colors.blue,        // 按钮颜色
                    textColor: Colors.white,  // 按钮文字颜色
                    elevation: 30.0,          // 按钮的阴影
                    highlightColor: Colors.green,  // 按钮按下的颜色
                    splashColor:Colors.red,     // 按钮的水波颜色
                    shape: RoundedRectangleBorder(
                        borderRadius: BorderRadius.circular(20)
                    ),
                    onPressed: (){    //  如果使用onPressed, 则为禁用按钮
                        print("普通按钮");
                    }
                )
            )
        );
    }
}

圆形按钮

class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(

            child: Container(
                // 修改容器大小,进而修改按钮的大小
                height:50.0,
                width:100.0,

                // 按钮
                child: RaisedButton(
                    child:Text("普通按钮"),
                    color:Colors.blue,        // 按钮颜色
                    textColor: Colors.white,  // 按钮文字颜色
                    elevation: 30.0,          // 按钮的阴影
                    highlightColor: Colors.green,  // 按钮按下的颜色
                    splashColor:Colors.red,     // 按钮的水波颜色
                    shape:CircleBorder(
                        side: BorderSide(
                            color:Colors.white
                        )
                    ),
                    onPressed: (){    //  如果使用onPressed, 则为禁用按钮
                        print("普通按钮");
                    }
                )
            )
        );
    }
}



3. Flutter其他按钮的使用

3.1 FlatButton

扁平按钮,默认背景透明并不带阴影。按下后,会有背景色

class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(

            child: Container(
                // 修改容器大小,进而修改按钮的大小
                height:50.0,
                width:100.0,

                // 按钮
                child: FlatButton(
                    child:Text("扁平按钮"),
                    onPressed: (){    //  如果使用onPressed, 则为禁用按钮
                        print("扁平按钮");
                    }
                )
            )
        );
    }
}


3.2 OutlineButton 边框按钮

默认有一个边框,不带阴影且背景透明。按下后,边框颜色会变亮、同时出现背景和阴影(较弱),

color参数无效

class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(

            child: Container(
                // 修改容器大小,进而修改按钮的大小
                height:50.0,
                width:100.0,

                // 按钮
                child: OutlineButton(
                    child:Text("扁平按钮"),
                    color:Colors.blue,        // 按钮颜色无效
                    highlightColor: Colors.green,  // 按钮按下的颜色
                    splashColor:Colors.red,     // 按钮的水波颜色

                    onPressed: (){    //  如果使用onPressed, 则为禁用按钮
                        print("扁平按钮");
                    }
                )
            )
        );
    }
}


3.3 IconButton 图标按钮

IconButton是一个可点击的Icon,不包括文字,默认没有背景,点击后会出现背景,

class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(
            child: Container(
                // 修改容器大小,进而修改按钮的大小
                height:50.0,
                width:100.0,

                // 按钮
                child: IconButton(
                    icon:Icon(Icons.search),
                    onPressed: (){    //  如果使用onPressed, 则为禁用按钮
                        print("图标按钮");
                    }
                )
            )
        );
    }
}


3.4 带图标的按钮

RaisedButtonFlatButtonOutlineButton都有一个icon 构造函数,通过它可以轻松创建带图标的按钮,

class Home extends StatelessWidget{
    @override
    Widget build(BuildContext content){
        return Center(

            child: Container(
                // 修改容器大小,进而修改按钮的大小
                height:50.0,
                width:100.0,

                // 带图标的按钮
                child: RaisedButton.icon(

                    icon:Icon(Icons.search),
                    label:Text("搜索"),
                    color:Colors.blue,
                    textColor: Colors.white,
                    onPressed: (){    //  如果使用onPressed, 则为禁用按钮
                        print("搜索");
                    }
                )
            )
        );
    }
}


至于按钮组和浮动按钮,后面再说

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351