最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Flutter學習之SliverList和SliverGird的使用詳解

 更新時間:2023年02月14日 08:21:43   作者:程序那些事  
Sliver的組件一般都用在CustomScrollView中,除了SliverAppBar之外,我們還可以為CustomScrollView添加List或者Grid來實現(xiàn)更加復雜的組合效果。本文就來聊聊SliverList和SliverGird的使用吧

簡介

在上一篇文章我們講解SliverAppBar的時候有提到過,Sliver的組件一般都用在CustomScrollView中。除了SliverAppBar之外,我們還可以為CustomScrollView添加List或者Grid來實現(xiàn)更加復雜的組合效果。

今天要向大家介紹的就是SliverList和SliverGird。

SliverList和SliverGird詳解

從名字就可以看出SliverList和SliverGird分別是List和Grid的一種,他們和List與Grid最大的區(qū)別在于,他們可以控制子widget在main axis和cross axis之間的間隔,并且可以通過Extent屬性來控制子widget的大小,非常的強大。

我們先來看下這兩個組件的定義和構造函數(shù):

class SliverList extends SliverMultiBoxAdaptorWidget {
  /// Creates a sliver that places box children in a linear array.
  const SliverList({
    Key? key,
    required SliverChildDelegate delegate,
  }) : super(key: key, delegate: delegate);

SliverList繼承自SliverMultiBoxAdaptorWidget,它的構造函數(shù)比較簡單,需要傳入一個SliverChildDelegate的參數(shù),這里的SliverChildDelegate使用的是delegate的方法來創(chuàng)建SliverList的子組件。

SliverChildDelegate是一個抽象類,它有兩個實現(xiàn)類,分別是SliverChildBuilderDelegate和SliverChildListDelegate。

其中SliverChildBuilderDelegate是用的builder模式來生成子widget,在上一篇文章中,我們構建SliverList就是使用的這個builder類。

SliverChildBuilderDelegate使用builder來生成子Widget,而SliverChildListDelegate需要傳入一個childList來完成構造,也就是說SliverChildListDelegate需要一個確切的childList,而不是用builder來構建。

要注意的是SliverList并不能指定子widget的extent大小,如果你想指定List中的子widget的extent大小的話,那么可以使用SliverFixedExtentList:

class SliverFixedExtentList extends SliverMultiBoxAdaptorWidget {
  const SliverFixedExtentList({
    Key? key,
    required SliverChildDelegate delegate,
    required this.itemExtent,
  }) : super(key: key, delegate: delegate);

可以看到SliverFixedExtentList和SliverList相比,多了一個itemExtent參數(shù),用來控制子widget在main axis上的大小。

然后我們再來看一下SliverGird:

class SliverGrid extends SliverMultiBoxAdaptorWidget {
  /// Creates a sliver that places multiple box children in a two dimensional
  /// arrangement.
  const SliverGrid({
    Key? key,
    required SliverChildDelegate delegate,
    required this.gridDelegate,
  }) : super(key: key, delegate: delegate);

SliverGrid也是繼承自SliverMultiBoxAdaptorWidget,和SliverList一樣,它也有一個SliverChildDelegate的參數(shù),另外它還多了一個gridDelegate的參數(shù)用來控制gird的布局。

這里的gridDelegate是一個SliverGridDelegate類型的參數(shù),用來控制children的size和position。

SliverGridDelegate也是一個抽象類,它有兩個實現(xiàn)類,分別是SliverGridDelegateWithMaxCrossAxisExtent和SliverGridDelegateWithFixedCrossAxisCount,這兩個實現(xiàn)類的區(qū)別就在于MaxCrossAxisExtent和FixedCrossAxisCount的區(qū)別。

怎么理解MaxCrossAxisExtent呢?比如說這個Grid是豎向的,然后Gird的寬度是500.0,如果MaxCrossAxisExtent=100,那么delegate將會創(chuàng)建5個column,每個column的寬度是100。

crossAxisCount則是直接指定cross axis的child個數(shù)有多少。

SliverList和SliverGird的使用

有了上面介紹的SliverList和SliverGird的構造函數(shù),接下來我們具體來看下如何在項目中使用SliverList和SliverGird。

默認情況下SliverList和SliverGird是需要和CustomScrollView一起使用的,所以我們先創(chuàng)建一個CustomScrollView,在它的slivers屬性中,放入一個SliverAppBar組件:

CustomScrollView(
      slivers: <Widget>[
        const SliverAppBar(
          pinned: true,
          snap: false,
          floating: false,
          expandedHeight: 200.0,
          flexibleSpace: FlexibleSpaceBar(
            title: Text('SliverList and SliverGrid'),
          ),
        ),
      ],
    );

SliverAppBar只是一個AppBar,運行可以得到下面的界面:

我們還需要為它繼續(xù)添加其他的slivers組件。

首先給他添加一個SliverGrid:

SliverGrid(
          gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent(
            maxCrossAxisExtent: 200.0,
            mainAxisSpacing: 20.0,
            crossAxisSpacing: 50.0,
            childAspectRatio: 4.0,
          ),
          delegate: SliverChildBuilderDelegate(
                (BuildContext context, int index) {
              return Container(
                alignment: Alignment.center,
                color: Colors.green[100 * (index % 9)],
                child: Text('grid item $index'),
              );
            },
            childCount: 20,
          ),
        ),

這里我們設置了gridDelegate屬性,并且自定義了SliverChildBuilderDelegate,用來生成20個Container。

運行得到的界面如下:

然后為其添加SliverList:

SliverList(
          delegate: SliverChildBuilderDelegate(
                (BuildContext context, int index) {
              return Container(
                color: index.isOdd ? Colors.white : Colors.green,
                height: 50.0,
                child: Center(
                  child: ListTile(
                    title: Text(
                      '100' + index.toString(),
                      style: const TextStyle(fontWeight: FontWeight.w500),
                    ),
                    leading: Icon(
                      Icons.account_box,
                      color: Colors.green[100 * (index % 9)],
                    ),
                  ),
                ),
              );
            },
            childCount: 15,
          ),
        ),

因為SliverList只需要傳入一個delegate參數(shù),這里我們生成了15個child組件。生成的界面如下:

因為SliverList不能控制List中子widget的extent,所以我們再添加一個SliverFixedExtentList看看效果:

SliverFixedExtentList(
          itemExtent: 100.0,
          delegate: SliverChildBuilderDelegate(
                (BuildContext context, int index) {
              return Container(
                color: index.isOdd ? Colors.white : Colors.green,
                height: 50.0,
                child: Center(
                  child: ListTile(
                    title: Text(
                      '200' + index.toString(),
                      style: const TextStyle(fontWeight: FontWeight.w500),
                    ),
                    leading: Icon(
                      Icons.account_box,
                      color: Colors.green[100 * (index % 9)],
                    ),
                  ),
                ),
              );
            },
            childCount: 15,
          ),

SliverFixedExtentList和SliverList相比多了一個itemExtent屬性,這里我們將其設置為100,運行可以得到下面的界面:

可以看到List中的子Widget高度發(fā)生了變化。

總結

在CustomScrollView中使用SliverList和SliverGird,可以實現(xiàn)靈活的呈現(xiàn)效果。

本文的例子:https://github.com/ddean2009/learn-flutter

以上就是Flutter學習之SliverList和SliverGird的使用詳解的詳細內(nèi)容,更多關于Flutter SliverList SliverGird的資料請關注腳本之家其它相關文章!

相關文章

  • Android StatusBar 透明化方法(不同的版本適配)

    Android StatusBar 透明化方法(不同的版本適配)

    本篇文章主要介紹了Android StatusBar 透明化方法(不同的版本適配),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Android基于OpenCV實現(xiàn)QR二維碼檢測

    Android基于OpenCV實現(xiàn)QR二維碼檢測

    QR碼比普通一維條碼具有快速讀取和更大的存儲資料容量,也無需要像一維條碼般在掃描時需要直線對準掃描儀。因此其應用范圍已經(jīng)擴展到包括產(chǎn)品跟蹤,物品識別,文檔管理,庫存營銷等方面。本文講解Android基于OpenCV實現(xiàn)QR二維碼檢測的步驟
    2021-06-06
  • Android?WebView基礎舉例詳解

    Android?WebView基礎舉例詳解

    在Android開發(fā)中Webview是一個重要的組件,它允許我們在原生應用中內(nèi)嵌網(wǎng)頁內(nèi)容,提供混合式應用的用戶體驗,這篇文章主要給大家介紹了關于Android?WebView基礎的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-07-07
  • Android運用onTouchEvent自定義滑動布局

    Android運用onTouchEvent自定義滑動布局

    這篇文章主要為大家詳細介紹了Android運用onTouchEvent寫一個上下滑動的布局,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • JSON解析和XML解析區(qū)別對比

    JSON解析和XML解析區(qū)別對比

    JSON解析和XML解析是較為普遍的兩種解析方式,其中JSON解析的市場分額更大。這篇文章主要介紹了JSON解析和XML解析區(qū)別對比,需要的朋友可以參考下
    2016-10-10
  • Android框架Volley之利用Imageloader和NetWorkImageView加載圖片的方法

    Android框架Volley之利用Imageloader和NetWorkImageView加載圖片的方法

    這篇文章主要介紹了Android框架Volley之利用Imageloader和NetWorkImageView加載圖片的實現(xiàn)方法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-05-05
  • Android分享微信小程序技巧之圖片優(yōu)化

    Android分享微信小程序技巧之圖片優(yōu)化

    這篇文章主要給大家介紹了關于Android分享微信小程序技巧之圖片優(yōu)化的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-11-11
  • Android實現(xiàn)仿excel數(shù)據(jù)表格效果

    Android實現(xiàn)仿excel數(shù)據(jù)表格效果

    這篇文章主要介紹了Android實現(xiàn)仿excel數(shù)據(jù)表格效果的實現(xiàn)代碼,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-10-10
  • Android清除應用緩存的兩種方法

    Android清除應用緩存的兩種方法

    這篇文章主要介紹了Android清除應用緩存的兩種方法,幫助大家更好的理解和學習使用Android,感興趣的朋友可以了解下
    2021-03-03
  • android游戲載入的activity跳轉(zhuǎn)到游戲主菜單的activity具體實現(xiàn)

    android游戲載入的activity跳轉(zhuǎn)到游戲主菜單的activity具體實現(xiàn)

    停止2s后由游戲載入頁面再跳轉(zhuǎn)到游戲菜單頁面,具體實現(xiàn)代碼如下,感興趣的朋友可以參考下哈
    2013-06-06

最新評論

肇源县| 沂源县| 九江市| 桦川县| 邹城市| 大渡口区| 闸北区| 图们市| 台江县| 平山县| 清徐县| 西林县| 靖边县| 麻江县| 洛南县| 南安市| 三门县| 交城县| 临沧市| 康保县| 苍溪县| 农安县| 天门市| 彩票| 弋阳县| 六安市| 榆中县| 兰州市| 盘锦市| 武功县| 阿鲁科尔沁旗| 温州市| 子长县| 东平县| 色达县| 晋城| 永丰县| 巧家县| 仁怀市| 高淳县| 兴化市|