Flutter&鸿蒙next 的 Sliver 实现自定义滚动效果

简介: Flutter 提供了强大的滚动组件,如 ListView 和 GridView,但当需要更复杂的滚动效果时,Sliver 组件是一个强大的工具。本文介绍了如何使用 Sliver 实现自定义滚动效果,包括 SliverAppBar、SliverList 等常用组件的使用方法,以及通过 CustomScrollView 组合多个 Sliver 组件实现复杂布局的示例。通过具体代码示例,展示了如何实现带有可伸缩 AppBar 和可滚动列表的页面。

Flutter 提供了一些非常强大的滚动组件,如 ListView、GridView 等,它们可以在滑动时自动处理内容的显示和滚动。但当我们需要更复杂的滚动效果时,Sliver 组件便是一个强大的工具。通过自定义 Sliver,我们可以实现高度定制化的滚动效果,譬如吸顶、悬浮效果、流畅的动画效果等。

本文将详细介绍如何使用 Sliver 实现自定义的滚动效果,包括如何理解和使用 Flutter 中的 Sliver 组件,如何将其与其他布局组合使用,以及如何通过自定义 Sliver 实现更复杂的滚动效果。

什么是 Sliver?
Sliver 是 Flutter 提供的一类滚动视图的子组件,用于自定义滚动区域的外观和行为。不同于传统的 ListView 或 GridView,Sliver 可以实现非常灵活的滚动效果,例如弹性效果、吸顶、滚动变换等。

Sliver 是“可滚动区域”的抽象,可以与 CustomScrollView 一起使用,CustomScrollView 允许我们将多个不同类型的 Sliver 组件组合成一个滚动区域。这使得我们能够更精细地控制内容的显示、滚动行为及其动画。

基本的 Sliver 组件
Flutter 提供了几种常用的 Sliver 组件,常见的有:

SliverAppBar:通常用于实现带有可伸缩效果的 AppBar。
SliverList:类似于 ListView,用于显示列表。
SliverGrid:用于显示网格布局。
SliverToBoxAdapter:一个通用的组件,可以将任何普通组件包装成 Sliver 组件。
SliverFillRemaining:用于填充剩余空间的 Sliver,常用于某些布局场景。
创建自定义的 Sliver 滚动效果
下面我们将通过一个具体的例子,演示如何使用 Sliver 和 CustomScrollView 来实现一个自定义的滚动效果。

示例:自定义滚动效果
假设我们要实现一个页面,其中包含一个固定的标题栏和一个自定义的列表,在滚动时,标题栏逐渐消失,列表内容可以滚动。

代码实现
import 'package:flutter/material.dart';

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: CustomScrollViewExample(),
);
}
}

class CustomScrollViewExample extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: CustomScrollView(
slivers: [
// SliverAppBar - 可伸缩的头部
SliverAppBar(
title: Text('Custom ScrollView'),
expandedHeight: 200.0,
floating: false,
pinned: true,
flexibleSpace: FlexibleSpaceBar(
title: Text('Title'),
background: Image.network(
'https://via.placeholder.com/400x300',
fit: BoxFit.cover,
),
),
),
// SliverList - 普通列表
SliverList(
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return ListTile(
title: Text('Item #$index'),
);
},
childCount: 50,
),
),
],
),
);
}
}

代码详细解释

  1. CustomScrollView 组件
    在这个例子中,整个页面是通过 CustomScrollView 组件来实现的。CustomScrollView 是一个滚动视图容器,它可以包含多个 Sliver 子组件。这些 Sliver 组件可以是不同类型的滚动区域,例如列表、网格、可伸缩的 AppBar 等。

CustomScrollView(
slivers: [
// 这里会添加不同的 Sliver 组件
],
)
CustomScrollView 的 slivers 属性接收一个 Sliver 组件的列表,我们将不同的 Sliver 组件添加到这个列表中,从而组合成一个可滚动区域。

  1. SliverAppBar 组件
    SliverAppBar 是一个非常常见的 Sliver 组件,它可以创建一个可伸缩的 AppBar。当我们滑动时,SliverAppBar 可以自动展开和收缩,同时还支持吸顶效果。我们可以通过 expandedHeight 属性来设置展开时的高度,通过 pinned 属性来控制是否固定在顶部。

SliverAppBar(
title: Text('Custom ScrollView'),
expandedHeight: 200.0,
floating: false,
pinned: true,
flexibleSpace: FlexibleSpaceBar(
title: Text('Title'),
background: Image.network(
'https://via.placeholder.com/400x300',
fit: BoxFit.cover,
),
),
)
在上面的代码中,SliverAppBar 配置了以下几个关键属性:

expandedHeight: 设置 AppBar 展开时的高度为 200 像素。
floating: 如果为 true,则当用户向上滑动时,AppBar 会立即出现;如果为 false,则 AppBar 会随着滚动进行伸缩。
pinned: 设置为 true 后,当用户滚动到一定位置时,AppBar 会固定在屏幕顶部。
flexibleSpace: 通过 FlexibleSpaceBar 配置扩展区域的背景,通常是一个图片或者一个渐变。

  1. SliverList 组件
    SliverList 用来显示一个列表,它的功能与 ListView 相似,但是 SliverList 需要配合 CustomScrollView 使用。SliverChildBuilderDelegate 用来构建每个列表项,childCount 属性设置列表项的数量。

SliverList(
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return ListTile(
title: Text('Item #$index'),
);
},
childCount: 50,
),
)
在这个例子中,SliverList 显示了 50 个列表项,每个列表项是一个 ListTile,并且在滑动时可以自由滚动。

总结
通过 CustomScrollView 和 Sliver 组件,我们可以轻松实现自定义的滚动效果。SliverAppBar 提供了可伸缩的 AppBar,SliverList 实现了一个可滚动的列表,且两者都可以通过灵活的配置和组合,实现非常丰富的 UI 效果。借助 Flutter 强大的布局系统,开发者可以根据需求轻松定制滚动效果,打造出更加流畅和丰富的用户体验。

希望本文能帮助你更好地理解 Flutter 中的 Sliver 组件,并能在实际项目中应用这一技术实现各种自定义滚动效果。
————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/lbcyllqj/article/details/143581108

目录
相关文章
|
Dart 前端开发
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
514 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
10月前
|
API UED 开发者
38.[HarmonyOS NEXT Row案例六] 打造流畅水平滚动标签列表:Row与Scroll的完美结合
在移动应用界面设计中,水平滚动的标签列表是一种常见且实用的UI元素,它可以在有限的屏幕空间内展示多个分类或选项。本教程将详细讲解如何使用HarmonyOS NEXT的Row组件结合Scroll容器创建一个水平滚动的标签列表,帮助开发者构建出流畅、美观的分类导航界面。
226 5
|
11月前
|
Android开发 iOS开发 容器
HarmonyOS实战:快速实现一个上下滚动的广告控件
本文介绍了如何在鸿蒙系统中实现一个支持上下滚动的广告控件。功能包括自动滚动、手动滑动、广告删除、自定义播放间隔等。通过使用 Swiper 组件和相关属性(如 disableSwipe、autoPlay),结合数据源操作与手势支持,可轻松完成开发。相比 Android 和 iOS,鸿蒙实现方式更简洁,满足日常需求。建议点赞收藏并动手实践!
246 0
HarmonyOS实战:快速实现一个上下滚动的广告控件
|
Dart 前端开发 容器
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
504 18
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
1967 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
UED 开发者
「Mac畅玩鸿蒙与硬件36」UI互动应用篇13 - 数字滚动抽奖器
本篇将带你实现一个简单的数字滚动抽奖器。用户点击按钮后,屏幕上的数字会以滚动动画的形式随机变动,最终显示一个抽奖数字。这个项目展示了如何结合定时器、状态管理和动画实现一个有趣的互动应用。
351 23
「Mac畅玩鸿蒙与硬件36」UI互动应用篇13 - 数字滚动抽奖器
|
JavaScript 容器
鸿蒙应用开发从入门到入行 - 篇6:数据监听器、滚动、侧滑功能
在本篇文章里,您将掌握监听器、滚动、侧滑等相关内容,助力你开发出更具交互的案例。
300 9
鸿蒙应用开发从入门到入行 - 篇6:数据监听器、滚动、侧滑功能
|
Dart 前端开发 IDE
鸿蒙Flutter实战:14-现有Flutter 项目支持鸿蒙 II
本文介绍了如何将现有 Flutter 项目适配鸿蒙系统,详细步骤包括安装 FVM、使用 FVM 安装 Flutter SDK、搭建开发环境、创建项目架构和壳工程等。
1370 6
鸿蒙Flutter实战:14-现有Flutter 项目支持鸿蒙 II
|
存储 调度 数据安全/隐私保护
鸿蒙Flutter实战:13-鸿蒙应用打包上架流程
鸿蒙应用打包上架流程包括创建应用、打包签名和上传应用。首先,在AppGallery Connect中创建项目、APP ID和元服务。接着,使用Deveco进行手动签名,生成.p12和.csr文件,并在AppGallery Connect中上传CSR文件获取证书。最后,配置签名并打包生成.app文件,上传至应用市场。常见问题包括检查签名配置文件是否正确。参考资料:[应用/服务签名](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-signing-V5)。
1253 3
鸿蒙Flutter实战:13-鸿蒙应用打包上架流程
|
开发工具 芯片 开发者
鸿蒙Flutter实战:12-使用模拟器开发调试
本文介绍了如何在 M 系列芯片的 Mac 电脑上使用模拟器进行鸿蒙 Flutter 开发和调试。主要内容包括:创建 Flutter 项目、签名、创建模拟器、运行 Flutter 项目以及常见问题的解决方法。适用于希望在鸿蒙系统上开发 Flutter 应用的开发者。
732 2
鸿蒙Flutter实战:12-使用模拟器开发调试

热门文章

最新文章

下一篇
开通oss服务