【Flutter】微信項目實戰(zhàn)【03】我的界面搭建(下)

1. 寫在前面

上篇文章中已經(jīng)對微信的界面的頭部進行了界面的布局搭建,還有下面列表部分沒有弄完,那么今天就繼續(xù)來寫微信實戰(zhàn)項目,包括自定義cell

GitHub項目地址

最終效果.gif

2. 列表實現(xiàn)分析

我們先來分析一下列表List 的結(jié)構(gòu)組成,有圖片,有文字,有左邊的有右邊的,cell 之間還有灰色的間隔,還有分割線。

List組成

一個 cell 的整體肯定是一個Container,左右也是一個Container,圖片和文字可以是Container包裹一個Row,是左右的布局。

整個列表的肯定是ListViewcell 之間是上下結(jié)構(gòu),可以使用Column來布局。

3. 自定義 cell

自定義 cell,我們要考慮擴展性,看看是否其他頁面也可以共用,的界面的 cell 里面是有圖片、文字、箭頭。

發(fā)現(xiàn)頁面的 cell 還有子標題和子圖片,如下:

發(fā)現(xiàn)頁面 cell 布局

那么在cell 的屬性就有標題、圖片、子標題、子圖標,箭頭,箭頭是每個 cell 都有的,就不需要設(shè)置屬性了,直接代碼里面寫就可以了。

  final String? title;//標題
  final String? subTitle;//子標題
  final String? imageName;//圖標
  final String? subImageName;//子圖標
  //構(gòu)造方法
  const MineCell({this.title, this.subTitle, this.imageName, this.subImageName});

在構(gòu)造方法里面用{ }括起來的就是可選的參數(shù),號修飾是表示空安全,可以為 null,就是類型于Swift里面的可選的意思,使用的時候要用!號修飾,表示不為 null 是有值的,下面代碼里面會有使用到。

cell要響應(yīng)點擊的事件,那么就需要一個GestureDetector來包裹起來,并且實現(xiàn)點擊的方法。

cell 代碼的大體結(jié)構(gòu)
  • left
//left
            Container(
              padding: const EdgeInsets.all(10),
              child: Row(
                children: <Widget>[
                  Image(
                    image: AssetImage(imageName!),
                    width: 20,
                  ),
                  SizedBox(
                    width: 15,
                  ),
                  Text(title!),
                ],
              ),
            )

SizedBox可以創(chuàng)建一個固定大小的框,具有固定寬高的組件,可以設(shè)置寬高,這里是用來分割、占位用的。

  • right
Container(
              padding: EdgeInsets.all(10),
              child: Row(
                children: <Widget>[
                  subTitle != null ? Text(subTitle!) : const Text(''),
                  subImageName != null
                      ? Image(
                    image: AssetImage(subImageName!),
                    width: 12,
                  )
                      : Container(),
                  //箭頭
                  const Image(
                    image: AssetImage('images/icon_right.png'),
                    width: 14,
                  )
                ],
              ),
            )

現(xiàn)在就實現(xiàn)了 cell 的自定義了,那么接下來就是列表的整體實現(xiàn)了。

4. ListView 實現(xiàn)列表

我們把自定義的 cell的頭文件導(dǎo)入到我的界面mine_page 里面。大體代碼結(jié)構(gòu)如下:

列表代碼結(jié)構(gòu)
  • ListView 代碼如下

........部分代碼省略............

children: [
                    const SizedBox(height: 10,),
                    const MineCell(
                      imageName: 'images/微信支付.png',
                      title: '支付',
                    ),
                    const SizedBox(
                      height: 10,
                    ),
                    const MineCell(
                      imageName: 'images/微信收藏.png',
                      title: '收藏',
                    ),
                    //cell 底部分割線
                    Row(
                      children: <Widget>[
                        //左右
                        Container(width: 50, height: 0.5, color: Colors.white),
                        //Container(height: 0.5, color: Colors.grey)
                      ],
                    )
                    
  ........部分代碼省略............
  
                ]

cell之間大的間隙我們使用SizedBox來實現(xiàn),cell 底部的間隙,這里的實現(xiàn)是:

Row(
   children: <Widget>[
   //左右
  Container(width: 50, height: 0.5, color:  Colors.white),
  Container(height: 0.5, color: Colors.grey)
        ],
 )

cell底部的分割線是沒有占滿屏幕寬度的,我們可以使用Row左右布局,左邊固定一個寬度和高度的Container,右邊固定一個高度Container,那么寬度就自動拉滿了,然后設(shè)置一下顏色就 OK 了。

最終效果.gif

Flutter的布局還是很方便的,也很靈活,有興趣的老鐵自己動手去實現(xiàn)一下吧!

GitHub項目地址

5. 寫在后面

關(guān)注我,更多內(nèi)容持續(xù)輸出

【Flutter】基礎(chǔ)組件【01】Text

【Flutter】基礎(chǔ)組件【02】Container

【Flutter】基礎(chǔ)組件【03】Scaffold

【Flutter】基礎(chǔ)組件【04】Row/Column

【Flutter】基礎(chǔ)組件【05】Icon

【Flutter】基礎(chǔ)組件【06】Image

【Flutter】基礎(chǔ)組件【07】Appbar

【Flutter】基礎(chǔ)組件【08】BottomNavigationBar

【Flutter】基礎(chǔ)組件【09】Button

  • [項目實戰(zhàn)合集]

【Flutter】微信項目實戰(zhàn)【01】基本框架搭建

【Flutter】微信項目實戰(zhàn)【02】我的界面搭建(上)

?? 喜歡就點個贊吧????

?? 覺得有收獲的,可以來一波 收藏+關(guān)注,以免你下次找不到我????

??歡迎大家留言交流,批評指正,轉(zhuǎn)發(fā)請注明出處,謝謝支持!??

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容