我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Flutter Sliver滚动组件怎么用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Flutter Sliver滚动组件怎么用

这篇文章主要介绍了Flutter Sliver滚动组件怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

Flutter Sliver滚动组件

 SliverList & SliverGrid

需要同时滚动ListView和GridView时可以使用SliverList和SliverGrid。

Flutter Sliver滚动组件怎么用

CustomScrollView(    slivers: [        SliverList(            delegate: SliverChildBuilderDelegate(                (context, index) {                    return Container(                        height: 50,                        color: Colors.primaries[index % Colors.primaries.length],                    );                },                childCount: 5,            ),        ),        SliverGrid(            gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(                crossAxisCount: 3,                crossAxisSpacing: 5,                mainAxisSpacing: 5,            ),            delegate: SliverChildBuilderDelegate(                (BuildContext context, int index) {                    return Container(                        color: Colors.primaries[index % Colors.primaries.length],                    );                },                childCount: 20,            ),        ),    ],)

SliverAppBar

pinned:是否固定在屏幕顶部。

expandedHeight:展开区域的高度。

flexibleSpace:展开取消显示内容。

Flutter Sliver滚动组件怎么用

CustomScrollView(    slivers: [        SliverAppBar(            pinned: true,            expandedHeight: 200,            flexibleSpace: FlexibleSpaceBar(                title: const Text("SliverAppBar"),                background: Image.asset("images/avatar.jpg", fit: BoxFit.cover),            ),        ),        SliverFixedExtentList(            delegate: SliverChildBuilderDelegate(                (BuildContext context, int index) {                    return Container(                        alignment: Alignment.center,                        color: Colors.primaries[index % Colors.primaries.length],                        child: Text("$index"),                    );                },            ),            itemExtent: 50.0,        ),    ],)

SliverPersistentHeader

SliverPersistentHeader组件可以控制滚动的最大高度和最小高度,类似SliverAppBar效果。

build:显示内容。

maxExtent & minExtent:滚动的高度范围。

shouldRebuild:是否需要更新。

Flutter Sliver滚动组件怎么用

CustomScrollView(    slivers: [        SliverPersistentHeader(            pinned: true,            delegate: MySliverPersistentHeaderDelegate(),        ),        SliverGrid(            gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(                crossAxisCount: 3,                crossAxisSpacing: 5,                mainAxisSpacing: 5,            ),            delegate: SliverChildBuilderDelegate(                (BuildContext context, int index) {                    return Container(                        color: Colors.primaries[index % Colors.primaries.length],                    );                },            ),        ),    ],)
class MySliverPersistentHeaderDelegate extends SliverPersistentHeaderDelegate {    @override    Widget build(        BuildContext context, double shrinkOffset, bool overlapsContent) {        return Container(            color: Colors.blue,            alignment: Alignment.center,            child: Text(                "hello world",                style: TextStyle(color: Colors.white),            ),        );    }    @override    double get maxExtent => 200;    @override    double get minExtent => 50;    @override    bool shouldRebuild(covariant SliverPersistentHeaderDelegate oldDelegate) {        return false;    }}

SliverToBoxAdapter

CustomScrollView只能包含Sliver组件,如果需要使用普通组件可以使用SliverToBoxAdapter。

Flutter Sliver滚动组件怎么用

CustomScrollView(    slivers: [        SliverToBoxAdapter(            child: Container(                height: 200,                color: Colors.black26,                alignment: Alignment.center,                child: Text("hello world"),            ),        ),        SliverList(            delegate: SliverChildBuilderDelegate(                (BuildContext context, int index) {                    return Container(                        height: 60,                        color: Colors.primaries[index % Colors.primaries.length],                    );                },                childCount: 50,            ),        ),    ],)

CustomScrollView & NestedScrollView

CustomScrollView组件可以将多个组件组合在一起,具有统一的滚动效果,但是CustomScrollView只能嵌套Sliver系列的组件,如SliverList、SliverGrid、SliverPadding、SliverAppBar等。

NestedScrollView可以协调两个滚动组件滑动。NestedScrollView在逻辑上将可滚动组件分为header和body两部分,heade部分只能接收Sliver类型的组件,而body部分可以接收任意类型的组件。

NestedScrollView+SliverAppBar+SliverFixedExtentList+ListView

Flutter Sliver滚动组件怎么用

NestedScrollView(    //Sliver组件    headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {        return [            SliverAppBar(                title: const Text("嵌套ListView"),                pinned: true, //固定AppBar                             forceElevated: true,            ),            SliverFixedExtentList(                itemExtent: 50,                delegate: SliverChildBuilderDelegate(                    (BuildContext context, int index) {                        return ListTile(title: Text("$index"));                    },                    childCount: 5,                ),            ),        ];    },    //滚动组件    body: ListView.builder(        padding: const EdgeInsets.all(8),        physics: const ClampingScrollPhysics(), //需要        itemCount: 30,        itemBuilder: (BuildContext context, int index) {            return SizedBox(                height: 50,                child: Center(child: Text("item $index")),            );        },    ),)
NestedScrollView+SliverAppBar+CustomScrollView

Flutter Sliver滚动组件怎么用

NestedScrollView(    headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {        return [            SliverAppBar(                floating: true,                snap: true,                expandedHeight: 200,                forceElevated: innerBoxIsScrolled,                flexibleSpace: FlexibleSpaceBar(                    background: Image.asset(                        "images/logo.png",                        fit: BoxFit.cover,                    ),                ),            ),        ];    },    body: CustomScrollView(        slivers: [buildSliverList(50)],    ),)
优化联动效果

SliverAppBar+CustomScrollView组合,当反向滑动时,SliverAppBar就会整体回到屏幕顶部,出现遮挡问题,为了解决该问题,可以用在header里用SliverOverlapAbsorber组件包裹SliverAppBar,body里Sliver列表最前面添加一个SliverOverlapInjector。

NestedScrollView(    headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {        return [            SliverOverlapAbsorber(                handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),                sliver: SliverAppBar(                    floating: true,                    snap: true,                    expandedHeight: 200,                    forceElevated: innerBoxIsScrolled,                    flexibleSpace: FlexibleSpaceBar(                        background: Image.asset(                            "images/logo.png",                            fit: BoxFit.cover,                        ),                    ),                ),            ),        ];    },    body: Builder(        builder: (BuildContext context) {            return CustomScrollView(                slivers: [                    SliverOverlapInjector(                        handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),                    ),                    buildSliverList(50),                ],            );        },    ),)
NestedScrollView+TabBarView

Flutter Sliver滚动组件怎么用

class MyPageView extends StatefulWidget {    late List<String> tabs;    MyPageView({Key? key, required this.tabs}) : super(key: key);    @override    State<StatefulWidget> createState() {        return _MyPageViewState();    }}class _MyPageViewState extends State<MyPageView>    with SingleTickerProviderStateMixin {    late TabController _controller;    @override    void initState() {        super.initState();        _controller = TabController(length: widget.tabs.length, vsync: this);    }    @override    void dispose() {        super.dispose();        _controller.dispose();    }    @override    Widget build(BuildContext context) {        return NestedScrollView(            headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {                return [                    SliverOverlapAbsorber(                        handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),                        sliver: SliverAppBar(                            title: const Text("hi Flutter"),                            floating: true,                            snap: true,                            forceElevated: innerBoxIsScrolled,                            bottom: TabBar(                                controller: _controller,                                tabs: widget.tabs.map((e) => Tab(text: e)).toList(),                            ),                        ),                    ),                ];            },            body: TabBarView(                controller: _controller,                children: widget.tabs.map((e) {                    return Builder(builder: (BuildContext context) {                        return CustomScrollView(                            key: PageStorageKey(e),                            slivers: [                                SliverOverlapInjector(                                    handle:                                    NestedScrollView.sliverOverlapAbsorberHandleFor(context),                                ),                                SliverPadding(                                    padding: const EdgeInsets.all(9),                                    sliver: buildSliverList(50),                                ),                            ],                        );                    });                }).toList(),            ),        );    }}

感谢你能够认真阅读完这篇文章,希望小编分享的“Flutter Sliver滚动组件怎么用”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Flutter Sliver滚动组件怎么用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Flutter Sliver滚动组件怎么用

这篇文章主要介绍了Flutter Sliver滚动组件怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Flutter Sliver滚动组件 SliverList & Sl
2023-06-25

Flutter之可滚动组件实例详解

这篇文章主要为大家介绍了Flutter之可滚动组件实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

vue3无限滚动组件怎么用

这篇“vue3无限滚动组件怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue3无限滚动组件怎么用”文章吧。什么是无限
2023-06-29

Flutter之可滚动组件子项缓存 KeepAlive详解

这篇文章主要为大家详细介绍了Flutter之可滚动组件子项缓存 KeepAlive,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
2022-11-13

vue-seamless-scroll无缝滚动组件怎么使用

今天小编给大家分享一下vue-seamless-scroll无缝滚动组件怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧
2023-06-29

flutter怎么实现头部tabTop滚动栏

这篇文章主要介绍了flutter怎么实现头部tabTop滚动栏的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇flutter怎么实现头部tabTop滚动栏文章都会有所收获,下面我们一起来看看吧。效果图如下:mai
2023-06-29

Flutter怎么实现滚动选择数字

这篇“Flutter怎么实现滚动选择数字”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Flutter怎么实现滚动选择数字”文
2023-06-29

Flutter有状态组件怎么使用

今天小编给大家分享一下Flutter有状态组件怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。有状态组件flutter
2023-06-26

Flutter基本组件Basics Widget怎么用

这篇文章主要介绍Flutter基本组件Basics Widget怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. 概述Basics Widget 并不是 Flutter 的一个专门的Widget类别,而是 F
2023-06-22

Android开发中Flutter组件怎么用

这篇“Android开发中Flutter组件怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Android开发中Flut
2023-06-30

怎么使用Flutter叠加组件Stack

本篇内容介绍了“怎么使用Flutter叠加组件Stack”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!注意:无特殊说明,Flutter版本及
2023-06-04

flutter listview滚动到指定位置怎么实现

在Flutter中,要滚动到ListView的指定位置,可以使用ScrollController来控制滚动的位置。具体的实现步骤如下:1. 创建一个ScrollController对象,可以在StatefulWidget的initState
2023-10-11

element select怎么实现组件虚拟滚动优化

本篇内容介绍了“element select怎么实现组件虚拟滚动优化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!不知道大家在开发过程中有没
2023-07-06

Flutter Widget开发之Focus组件怎么使用

本篇内容介绍了“Flutter Widget开发之Focus组件怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!正文就网络和应用程序而
2023-07-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录