FlutterUI-自定义Button

Flutter版本-v1.0.0
按钮控件常用api

基础用法参考:https://book.flutterchina.club/chapter3/buttons.html

常用普通圆角按钮

常用按钮的写法,很简单也很美观。

        new RaisedButton(
          child: new Text("登录"),
          color: Colors.blue,
          textColor: Colors.white,
          onPressed: () {
            _login();
          },
          disabledColor: Colors.grey,
          disabledTextColor: Colors.white,
          disabledElevation: 4,
//          onPressed: null,// 设置为null即为不可点击(disabled)状态
          shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20.0)), //圆角大小
        ),

效果:
普通圆角按钮

但是UI稿往往会出现各种按钮,所以又会踩坑

图片+文字按钮

用InkWell + Stack来形成层级

        new InkWell(
          child: new Stack(
            alignment: Alignment.center,
            children: <Widget>[
              new Image.asset("images/ic_launcher_round.png"),
              new Text("登录",
              style: new TextStyle(
                fontSize: 24,
                fontWeight: FontWeight.bold,
                color: Colors.red
              ),),
            ],
          ),
          onTap: () { },
        ),

效果:
图片+文字按钮

渐变色+圆角+文字 按钮

这个看似也容易,但由于RawMaterialButton有最小宽高,如果child宽高较小,会出现多余的灰色背景,例如:

child宽高较小

用了InkWell + Container的方案,结果也不理想,因为没有点击的阴影效果,波纹作用于背景也不明显。

查阅了很多,最终找到了buttonTheme这个属性,可以在MaterialApptheme里设置即可作用全局,使全局的button都没有最小宽高。

void main() {
//  debugPaintSizeEnabled=true;
  runApp(new MaterialApp(
      theme: new ThemeData(
          primaryColor: AppColors.colorPrimary,
          accentColor: Colors.blue,
          buttonTheme: new ButtonThemeData(
            minWidth: 0,
            height: 0,
            padding: EdgeInsets.all(0),
            buttonColor: Colors.transparent
          )),
      home: new WanAndroidApp()));
}

然后再运用RaisedButton + Container即可达到渐变色+圆角+文字 按钮的效果,同理其他特殊的按钮均可按此实现。

        new RaisedButton(
          child: new Container(
            decoration: BoxDecoration(
              border: Border.all(color: Colors.red, width: 1.0),
              borderRadius: BorderRadius.circular(8.0),
              gradient: LinearGradient(colors: <Color>[
                Colors.orange,
                Colors.blue,
              ]),
            ),
            child: new Text("登录"),
            padding: EdgeInsets.fromLTRB(16, 8, 16, 8),
            alignment: Alignment.center,
          ),
          shape: RoundedRectangleBorder(
              borderRadius: BorderRadius.circular(8.0)), //圆角大小,与BoxDecoration保持一致,更美观
          onPressed: () {},
          textColor: Colors.white,
        ),

效果:
渐变色+圆角+文字 按钮

至此,大部分的Button样式应该都可以实现了~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,019评论 3 119
  • 2017年4月1日星期六13—23度晴 读经时间:9:30AM 读经方式:跟音频读 茵茵读经内容:1、《易经》系辞...
    育心茵可妈阅读 398评论 0 1
  • 今天推送了一个app,叫做网易美学。这款App主要的人群是女性用户,美妆UGC社区。由于我是男生就不往内容去评价了...
    走遍全球阅读 881评论 0 1
  • 一,治疗拖延症 我是个拖延症患者,因此只要开始考虑要不要跑步时,就总能找到不跑步的理由,什么天气冷了,腿不舒服了,...
    老祝读书阅读 381评论 0 1
  • 什么叫正则表达式 正则表达式是对字符串进行操作的一种逻辑公式,就是用一些特定的字符组合成一个规则字符串,称之为正则...
    纵我不往矣阅读 24,876评论 1 7