前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flutter轻松实现Adobe全家桶Logo列表

Flutter轻松实现Adobe全家桶Logo列表

作者头像
AWeiLoveAndroid
发布2019-11-15 12:23:09
6090
发布2019-11-15 12:23:09
举报

版权声明:本文为博主原创文章,未经博主允许不得转载。

https://cloud.tencent.com/developer/article/1539362

转载请标明出处:

https://cloud.tencent.com/developer/article/1539362

本文出自 AWeiLoveAndroid的博客

Flutter系列博文链接 ↓:

工具安装:

Flutter基础篇:

Flutter进阶篇:

Dart语法系列博文链接 ↓:

Dart语法基础篇:

Dart语法进阶篇:

Adobe公司的产品大家应该都是很熟悉了,我们就看它的产品Logo,一看就可以记住好几个,比如:PS、Ai、Pr、Dw等。而且绝大多数Logo都是很一致的,外面要么方正,要么是带圆弧的矩形,中间是两个英文字母,第一个字母大写,第二个字母小写。总之,一看就可以让人记住,真是具有的魔性Logo,不得不佩服Adobe公司设计Logo的团队的创意人才,今天我要给大家带来的是使用Flutter实现Adobe公司的Logo并让它们同屏展出,全部用代码实现,不借助任何外部工具,一次性带领大家看看这些有趣的Logo。作者写文章不容易,觉得好看的话,点个赞支持一下吧,谢谢大家。

本文内容图文并茂,希望大家可以认真看完。为了避免大家犯困,我这里特意准备了本文配套的两个视频,下面这个是腾讯视频的播放链接:

腾讯视频链接

如果你喜欢去B站观看本文配套的视频讲解,请点击Bilibili链接:

B站链接

按照国际惯例,先来一张效果图镇楼。

Flutter打造Adobe全家桶Logo

怎么样?是不是很牛逼!!!下面开始带领大家直接撸码:


首先创建列表

首先我们创建一个GridView,我们使用GridView.count,然后我们先用10个Container填充一下,也就说每一个item都是Container,里面是一个居中的Text,Container的代码如下:

 Container(
  decoration: BoxDecoration(
    color: Colors.grey,
    border: Border.all(color: Colors.blue, width: 5),
  ),
  child: Center(
    child: Text(
      'No.1',
      style: TextStyle(
        fontSize: 35.0,
        color: Colors.blue,
        fontWeight: FontWeight.bold,
      ),
    ),
  ),
),

看看效果:

上边缘和左右两侧没有边距,看起来不太直观,给每一个Container外边加一点边距,修改后的代码如下:

Padding(
    padding: EdgeInsets.all(15),
    child: Container(...)
)

效果如图所示:

这里面由于文字太多了,所以一行显示不下了,可以把文字大小调小一点就OK了(暂且不用管它),接下来我们看我们的Padding加上Container的代码接近200行了,特别难看,不方便使用和管理,下面对它做一个封装,具体操作请看后文描述。


封装列表内容

首先我们看,哪些是变化的,哪些是不变的,方便我们传参。 padding属性是一致的,不用管它。 BoxDecoration里面的color属性和 BoxDecorationborder属性里的color属性都是变化的,需要外部传入的。接下来就是Text的文字内容,以及color都是需要外部传入的。所以这四个属性需要封装一下。我这里封装了一个函数,我把Padding加上Container的那一段代码拿过来了,然后把里面要传参的4个参数提取出来,作为函数的参数,然后我们调用这个函数,传入这4个参数返回是一个widget类型,这个要记住。接下来看一下代码:

Widget buildItems(
      String text, Color textColor, Color borderColor, Color bgColor) {
    return Padding(
      padding: EdgeInsets.all(15),
      child: Container(
        decoration: BoxDecoration(
          color: bgColor,
          border: Border.all(color: borderColor, width: 5),
        ),
        child: Center(
          child: Text(
            text,
            style: TextStyle(
              fontSize: 35.0,
              color: textColor,
              fontWeight: FontWeight.bold,
            ),
          ),
        ),
      ),
    );
  }

下面看看GridView代码对应的修改部分,代码如下所示:

GridView.count(
  crossAxisCount: 4,
  crossAxisSpacing: 5.0,
  mainAxisSpacing: 5.0,
  children: [
      buildItems('1', Colors.blue, Colors.blue, Colors.grey),
      buildItems('2', Colors.blue, Colors.blue, Colors.grey),
      buildItems('3', Colors.blue, Colors.blue, Colors.grey),
      buildItems('4', Colors.blue, Colors.blue, Colors.grey),
      buildItems('5', Colors.blue, Colors.blue, Colors.grey),
      buildItems('6', Colors.blue, Colors.blue, Colors.grey),
      buildItems('6', Colors.blue, Colors.blue, Colors.grey),
      buildItems('7', Colors.blue, Colors.blue, Colors.grey),
      buildItems('8', Colors.blue, Colors.blue, Colors.grey),
      buildItems('9', Colors.blue, Colors.blue, Colors.grey),
      buildItems('10', Colors.blue, Colors.blue, Colors.grey),
  ]
),

我们可以看到代码明显简洁了许多,看看使用效果图如何:


接下来填充具体的数据

部分代码如下所示:

GridView.count(
  crossAxisCount: 4,
  crossAxisSpacing: 5.0,
  mainAxisSpacing: 5.0,
  children: [
      buildItems('Ps',
        const Color(0XFF00C8FD),
        const Color(0XFF00C8FD),
        const Color(0XFF001C25)
      ),
      buildItems('Ai',
        const Color(0XFFFF7C00),
        const Color(0XFFFF7C00),
        const Color(0XFF271403)
      ),
      buildItems('Id',
        const Color(0XFFDA007A),
        const Color(0XFFDA007A),
        const Color(0XFF412E34)
      ),
      buildItems('Xd',
        const Color(0XFFFE2BC0),
        const Color(0XFFFE2BC0),
        const Color(0XFF2D001D)
      ),
      ...
  ]
),
...

截图如下所示:

自定义圆角弧度

我们发现有的有圆角,有的是没有圆角弧度的,所以这时候要对每一个Item进行个性化设置,圆角是在Container里面设置的,我么要对它进行操作,传入一个bool类型的值(也就是showRectRadis参数)进去判断即可,如果为true,那么就添加进去,如果为false,就保持默认的样式就好了,由于它是可选的参数,所以外面加一个大括号,同时这里面还用到“三目运算符”(不清楚 三目运算符 的可以看看我得博客Flutter基础篇(2)-- 老司机用一篇博客带你快速熟悉Dart语法)。下面看看代码是如何封装的:

  Widget buildItems(
      String text, Color textColor, Color borderColor, Color bgColor,
      {bool showRectRadis = false}) {
    return Padding(
      padding: EdgeInsets.all(15),
      child: Container(
        decoration: BoxDecoration(
          color: bgColor,
          border: Border.all(color: borderColor, width: 5),
          borderRadius: showRectRadis == true
              ? BorderRadius.circular(15)
              : BorderRadius.circular(0),
        ),
        child: Center(
          child: Text(
            text,
            style: TextStyle(
              fontSize: 35.0,
              color: textColor,
              fontWeight: FontWeight.bold,
            ),
          ),
        ),
      ),
    );
  }

然后我们要把children里面的代码也相应的做一个调整,如果要显示圆角的,就加上showRectRadis: true这句,其他的保持不变,修改后的部分代码如下所示:

GridView.count(
  crossAxisCount: 4,
  crossAxisSpacing: 5.0,
  mainAxisSpacing: 5.0,
  children: [
      buildItems('Ps',
        const Color(0XFF00C8FD),
        const Color(0XFF00C8FD),
        const Color(0XFF001C25),
        showRectRadis: true
      ),
      buildItems('Ai',
        const Color(0XFFFF7C00),
        const Color(0XFFFF7C00),
        const Color(0XFF271403)
      ),
      buildItems('Id',
        const Color(0XFFDA007A),
        const Color(0XFFDA007A),
        const Color(0XFF412E34)
      ),
      buildItems('Xd',
        const Color(0XFFFE2BC0),
        const Color(0XFFFE2BC0),
        const Color(0XFF2D001D),
        showRectRadis: true
      ),
      ...
  ]
),
...

我们来看看最终的效果,如下图所示:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Flutter系列博文链接 ↓:
  • Dart语法系列博文链接 ↓:
  • 首先创建列表
  • 封装列表内容
  • 接下来填充具体的数据
  • 自定义圆角弧度
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档