Flutter Sliver家族(一)SliverAppBar、SliverList、SliverGrid

1,172 阅读2分钟

前文提到Flutter CustomScrollView和SingleChildScrollView的区别那么这篇文章就讲讲CustomScrollView需要用到的Sliver组件。

Flutter中的Sliver组件

在Flutter中,Sliver是指可以滚动的可重叠区域,通常用于实现自定义滚动效果。Sliver组件通常与CustomScrollView一起使用,可以创建具有灵活布局的滚动视图。Sliver组件具有高度的可定制性,可以实现许多复杂的布局和动画效果。

Sliver的基本结构

Sliver组件的基本结构如下:

SliverXxx(
  // 一些属性
  child: Xxx(),
)

其中,SliverXxx表示不同类型的Sliver组件,如SliverAppBar、SliverList、SliverGrid等等。Sliver组件中最常用的属性是child属性,表示Sliver组件的子组件。

SliverAppBar

SliverAppBar是一个可以滚动的AppBar,通常用于实现带有滚动效果的顶部导航栏。SliverAppBar具有以下常用属性:

  • pinned:bool类型,表示AppBar是否保持固定在顶部。如果设置为true,则AppBar将在滚动到顶部时停止滚动,并保持固定在顶部。
  • floating:bool类型,表示AppBar是否浮动在内容上方。如果设置为true,则AppBar将在滚动到顶部时停止滚动,并浮动在内容上方。
  • expandedHeight:double类型,表示AppBar在展开状态下的高度。
  • flexibleSpace:Widget类型,表示AppBar在滚动过程中可以展开的区域。
  • title:Widget类型,表示AppBar中的标题。

下面是一个SliverAppBar的示例:

SliverAppBar(
  pinned: true,
  floating: false,
  expandedHeight: 200.0,
  flexibleSpace: FlexibleSpaceBar(
    title: Text('SliverAppBar'),
    background: Image.asset('assets/images/header.jpg', fit: BoxFit.cover),
  ),
)

SliverList

SliverList是一个可以滚动的列表,通常用于实现长列表。SliverList具有以下常用属性:

  • delegate:SliverChildDelegate类型,表示SliverList中的子组件集合。

下面是一个SliverList的示例:

SliverList(
  delegate: SliverChildBuilderDelegate(
    (BuildContext context, int index) {
      return ListTile(title: Text('Item $index'));
    },
    childCount: 20,
  ),
)

SliverGrid

SliverGrid是一个可以滚动的网格视图,通常用于实现网格布局。SliverGrid具有以下常用属性:

  • delegate:SliverChildDelegate类型,表示SliverGrid中的子组件集合。
  • gridDelegate:SliverGridDelegate类型,表示SliverGrid中的网格布局规则。

下面是一个SliverGrid的示例:

SliverGrid(
  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
    crossAxisCount: 2,
    crossAxisSpacing: 10.0,
    mainAxisSpacing: 10.0,
    childAspectRatio: 0.7,
  ),
  delegate: SliverChildBuilderDelegate(
    (BuildContext context, int index) {