第二章●第十二节:仿写简书App首页

我们通过前面1~12节,简单的了解了基础组件的使用。本节我们将使用前面所说的各类组件,仿写简书首页。

1. 我们先来分析一下简书首页都具有哪些功能

简书App首页功能划分图
按照我们对简书APP首页的拆分,将其划分为五大区域,①底部切换选项卡;②顶部导航条,也叫顶部选项卡;③顶部搜索按钮;④悬浮按钮;⑤内容列表。接下来我们从这五大区域开始分别实现。

2. 各模块代码实现

(1)底部选项卡

使用Scaffold.bottomNavigationBar属性来显示底部选项卡。

bottomNavigationBar: BottomNavigationBar(
  type: BottomNavigationBarType.fixed,
  currentIndex: 0,
  items: [
    BottomNavigationBarItem(
      icon: Icon(Icons.home, color:  Color.fromRGBO(195, 195, 195, 1.0)),
      activeIcon: Icon(Icons.home, color: Color.fromRGBO(234, 111, 90, 1.0),),
      title: Text("首页", style: TextStyle(color: Color.fromRGBO(157, 157, 157, 1.0)),),
    ),
    BottomNavigationBarItem(
        icon: Icon(Icons.beenhere, color: Color.fromRGBO(195, 195, 195, 1.0)),
        activeIcon: Icon(Icons.home, color: Color.fromRGBO(234, 111, 90, 1.0),),
        title: Text("关注", style: TextStyle(color:  Color.fromRGBO(157, 157, 157, 1.0)),),
    ),
    BottomNavigationBarItem(
        icon: Icon(Icons.favorite, color:  Color.fromRGBO(195, 195, 195, 1.0)),
        activeIcon: Icon(Icons.home, color: Color.fromRGBO(234, 111, 90, 1.0),),
        title: Text("简书钻", style: TextStyle(color: Color.fromRGBO(157, 157, 157, 1.0)),)
    ),
    BottomNavigationBarItem(
        icon: Icon(Icons.message, color:  Color.fromRGBO(195, 195, 195, 1.0)),
        activeIcon: Icon(Icons.home, color: Color.fromRGBO(234, 111, 90, 1.0),),
        title: Text("消息", style: TextStyle(color: Color.fromRGBO(157, 157, 157, 1.0)),)
    ),
    BottomNavigationBarItem(
        icon: Icon(Icons.account_circle, color:  Color.fromRGBO(195, 195, 195, 1.0)),
        activeIcon: Icon(Icons.home, color: Color.fromRGBO(234, 111, 90, 1.0),),
        title: Text("我的", style: TextStyle(color: Color.fromRGBO(157, 157, 157, 1.0)),)
    ),
  ],
),
(2)顶部导航条

我们通过分析,将顶部导航条划分在AppBar中,将其放置在title属性中,并使用TabBar组件。

title: TabBar(
  tabs: topTabs,
  controller: _tabController,
  isScrollable: true,
  indicatorColor: Color.fromRGBO(227, 95, 72, 1.0),
  indicatorWeight: 2.0,
  indicatorSize: TabBarIndicatorSize.label,
  indicatorPadding: EdgeInsets.fromLTRB(0, 0, 0, 3.0),
  labelColor: Color.fromRGBO(234, 104, 83, 1.0),
  labelStyle: TextStyle(fontSize: 16.0, fontWeight: FontWeight.w600),
  labelPadding: EdgeInsets.all(8.0),
  unselectedLabelColor: Color.fromRGBO(54, 54, 54, 1.0),
),
(3)顶部搜索按钮

搜索按钮我们可以通过设置AppBar的actions属性,并使用IconButton组件来实现。

actions: <Widget>[
  IconButton(
    icon: Icon(Icons.search),
    onPressed: (){},
    padding: EdgeInsets.fromLTRB(0, 0, 20.0, 0),
    color: Color.fromRGBO(54, 54, 54, 1.0),
  )
],
(4)悬浮按钮

使用Scaffold.floatingActionButton属性设置悬浮按钮。

floatingActionButton: FloatingActionButton(
  onPressed: (){},
  child: Icon(Icons.edit),
  backgroundColor: Color.fromRGBO(234, 104, 83, 1.0),
)
(5)内容列表

使用容器来将其他组件包装起来,最后以ListView来显示容器内容。

Container(
  height: 170.0,
  child: Column(
    crossAxisAlignment: CrossAxisAlignment.start,
    children: <Widget>[
      Expanded(
        child: Text(
          "【九辩儿】小东西磕我心缝里了2",
          style: TextStyle(
            fontSize: 18.0,
            fontWeight: FontWeight.w600,
          ),
        ),
      ),
      Text(
        "两人的呼吸交织在一起,馕咬住辩儿的嘴唇,惊的小辫儿娇躯一颤。馕高兴的笑笑,用舌尖暧昧的润染辩儿的嘴唇,又将白牙轻轻地触着辩的皓齿。轻悄悄地",
        maxLines: 3,
        overflow: TextOverflow.ellipsis,
        style: TextStyle(
            fontSize: 16.0
        ),
      ),
      Expanded(
        child: Row(
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[
            Icon(Icons.favorite, color: Color.fromRGBO(234, 104, 83, 1.0),),
            Text("1.739", style: TextStyle(color:  Color.fromRGBO(234, 104, 83, 1.0)),),
            Text("天空飞过一条...", style: TextStyle(color: Colors.black54),),
            Text("533阅读", style: TextStyle(color: Colors.black54)),
            Text("1评论", style: TextStyle(color: Colors.black54)),
            Text("11赞", style: TextStyle(color: Colors.black54)),
            Expanded(
              child: Icon(Icons.clear, color: Colors.black54, size: 14.0,),
            )
          ],
        ),
      )
    ],
  ),
  padding: EdgeInsets.fromLTRB(15.0, 15.0, 15.0, 10.0),
  color: Colors.white,
),

3. 最终效果

效果展示
注:若有侵权,望告知!

总目录结构

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

推荐阅读更多精彩内容