Flutter 中 Sliver 的各种装饰器介绍与使用
在 Flutter 中,Sliver 是一种可以在滚动视图中实现自定义效果的组件。Sliver 组件可以根据滚动位置动态改变其外观和行为。本文将介绍几种常用的 Sliver 装饰器及其使用方法。
1. SliverAppBar
SliverAppBar 是一个可以随着滚动而变化的应用栏。它可以在用户向下滚动时收缩,向上滚动时展开。
使用示例
import 'package:flutter/material.dart';class SliverAppBarExample extends StatelessWidget {Widget build(BuildContext context) {return Scaffold(body: CustomScrollView(slivers: <Widget>[SliverAppBar(expandedHeight: 200.0,flexibleSpace: FlexibleSpaceBar(title: Text('SliverAppBar Example'),background: Image.network('https://example.com/image.jpg',fit: BoxFit.cover,),),floating: false,pinned: true,),SliverList(delegate: SliverChildBuilderDelegate((BuildContext context, int index) {return ListTile(title: Text('Item #$index'));},childCount: 100,),),],),);}
}
2. SliverList 和 SliverGrid
SliverList 和 SliverGrid 用于创建可滚动的列表和网格。它们可以与 CustomScrollView 一起使用,以实现更复杂的滚动效果。
使用示例
import 'package:flutter/material.dart';class SliverListExample extends StatelessWidget {Widget build(BuildContext context) {return Scaffold(body: CustomScrollView(slivers: <Widget>[SliverList(delegate: SliverChildBuilderDelegate((BuildContext context, int index) {return ListTile(title: Text('List Item #$index'));},childCount: 50,),),SliverGrid(gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2,),delegate: SliverChildBuilderDelegate((BuildContext context, int index) {return Card(child: Center(child: Text('Grid Item #$index')),);},childCount: 50,),),],),);}
}
3. SliverToBoxAdapter
SliverToBoxAdapter 是一个适配器,可以将普通的 Widget 转换为 Sliver。它可以用于在 Sliver 组件中插入非 Sliver Widget。
使用示例
import 'package:flutter/material.dart';class SliverToBoxAdapterExample extends StatelessWidget {Widget build(BuildContext context) {return Scaffold(body: CustomScrollView(slivers: <Widget>[SliverToBoxAdapter(child: Container(height: 100.0,color: Colors.blue,child: Center(child: Text('Non-Sliver Widget')),),),SliverList(delegate: SliverChildBuilderDelegate((BuildContext context, int index) {return ListTile(title: Text('Item #$index'));},childCount: 50,),),],),);}
}
4. SliverPersistentHeader
SliverPersistentHeader 允许你创建一个可以在滚动时保持可见的头部。它可以用于实现自定义的滚动效果。
使用示例
import 'package:flutter/material.dart';class SliverPersistentHeaderExample extends StatelessWidget {Widget build(BuildContext context) {return Scaffold(body: CustomScrollView(slivers: <Widget>[SliverPersistentHeader(pinned: true,delegate: _SliverAppBarDelegate(minHeight: 60.0,maxHeight: 200.0,child: Container(color: Colors.red,child: Center(child: Text('Persistent Header')),),),),SliverList(delegate: SliverChildBuilderDelegate((BuildContext context, int index) {return ListTile(title: Text('Item #$index'));},childCount: 50,),),],),);}
}class _SliverAppBarDelegate extends SliverPersistentHeaderDelegate {_SliverAppBarDelegate({required this.minHeight,required this.maxHeight,required this.child,});final double minHeight;final double maxHeight;final Widget child;Widget build(BuildContext context, double shrinkOffset, bool overlapsContent) {return SizedBox.expand(child: child);}bool shouldRebuild(_SliverAppBarDelegate oldDelegate) {return minHeight != oldDelegate.minHeight ||maxHeight != oldDelegate.maxHeight ||child != oldDelegate.child;}
}
5. SliverFixedExtentList
SliverFixedExtentList 用于创建具有固定高度的列表项,适合需要统一高度的列表。
使用示例
import 'package:flutter/material.dart';class SliverFixedExtentListExample extends StatelessWidget {Widget build(BuildContext context) {return Scaffold(body: CustomScrollView(slivers: <Widget>[SliverFixedExtentList(itemExtent: 100.0, // 每个列表项的固定高度delegate: SliverChildBuilderDelegate((BuildContext context, int index) {return ListTile(title: Text('Fixed Item #$index'));},childCount: 50,),),],),);}
}
6. SliverPadding
SliverPadding 用于在 Sliver 组件周围添加内边距。
使用示例
import 'package:flutter/material.dart';class SliverPaddingExample extends StatelessWidget {Widget build(BuildContext context) {return Scaffold(body: CustomScrollView(slivers: <Widget>[SliverPadding(padding: EdgeInsets.all(16.0), // 设置内边距sliver: SliverList(delegate: SliverChildBuilderDelegate((BuildContext context, int index) {return ListTile(title: Text('Padded Item #$index'));},childCount: 50,),),),],),);}
}
7. SliverGrid
SliverGrid 用于创建可滚动的网格布局,适合展示图片或其他网格状内容。
使用示例
import 'package:flutter/material.dart';class SliverGridExample extends StatelessWidget {Widget build(BuildContext context) {return Scaffold(body: CustomScrollView(slivers: <Widget>[SliverGrid(gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3, // 每行显示3个childAspectRatio: 1.0, // 宽高比),delegate: SliverChildBuilderDelegate((BuildContext context, int index) {return Card(child: Center(child: Text('Grid Item #$index')),);},childCount: 30,),),],),);}
}
8. SliverAppBar with TabBar
结合 SliverAppBar 和 TabBar 可以实现带有标签的可滚动应用栏。
使用示例
import 'package:flutter/material.dart';class SliverAppBarWithTabsExample extends StatelessWidget {Widget build(BuildContext context) {return DefaultTabController(length: 3,child: Scaffold(body: CustomScrollView(slivers: <Widget>[SliverAppBar(expandedHeight: 200.0,floating: false,pinned: true,flexibleSpace: FlexibleSpaceBar(title: Text('SliverAppBar with Tabs'),),bottom: TabBar(tabs: [Tab(text: 'Tab 1'),Tab(text: 'Tab 2'),Tab(text: 'Tab 3'),],),),SliverList(delegate: SliverChildBuilderDelegate((BuildContext context, int index) {return ListTile(title: Text('Item #$index'));},childCount: 100,),),],),),);}
}
9. SliverOpacity
SliverOpacity 用于在 Sliver 组件上应用透明度效果。
使用示例
import 'package:flutter/material.dart';class SliverOpacityExample extends StatelessWidget {Widget build(BuildContext context) {return Scaffold(body: CustomScrollView(slivers: <Widget>[SliverOpacity(opacity: 0.5, // 设置透明度sliver: SliverList(delegate: SliverChildBuilderDelegate((BuildContext context, int index) {return ListTile(title: Text('Opacity Item #$index'));},childCount: 50,),),),],),);}
}
总结
Sliver 组件为 Flutter 提供了强大的滚动效果和灵活的布局方式。通过使用 SliverAppBar、SliverList、SliverGrid、SliverToBoxAdapter、SliverPersistentHeader、SliverFixedExtentList、SliverPadding、SliverOpacity 等组件,你可以创建出丰富多彩的用户界面。希望本文能帮助你更好地理解和使用 Flutter 中的 Sliver 装饰器。
相关文章:
Flutter 中 Sliver 的各种装饰器介绍与使用
在 Flutter 中,Sliver 是一种可以在滚动视图中实现自定义效果的组件。Sliver 组件可以根据滚动位置动态改变其外观和行为。本文将介绍几种常用的 Sliver 装饰器及其使用方法。 1. SliverAppBar SliverAppBar 是一个可以随着滚动而变化的应用栏。它可以在用户向下滚…...
电感的基本概念
电感的定义: 电感一般是由导线绕成空芯线圈或带铁芯的线圈而制成。 当线圈中有电流通过时,线圈周围就会产生磁场,当线圈中流过的是直流电流时,线圆周围就会产生固定的磁场,线圈产生的物理现象就是电磁铁,当…...
linux基于systemd自启守护进程 systemctl自定义服务傻瓜式教程
系统服务 书接上文: linux自启任务详解 演示系统:ubuntu 20.04 开发部署项目的时候常常有这样的场景: 业务功能以后台服务的形式提供,部署完成后可以随着系统的重启而自动启动;服务异常挂掉后可以再次拉起 这个功能在ubuntu系统中通常由systemd提供 如果仅仅需要达成上述的场…...
HTTP协议和接口测试详解
介绍接口测试前我们先来介绍一下HTTP协议,为什么先要介绍HTTP协议呢因为因为我们做接口测试其实就是用测试工具(postman,fiddler,jmeter等等)或代码来模拟用户使用软件的场景,在我们模拟的时候不像平时功能测试时我们有已经开发完…...
vue3【实战】定义全局方法(两种方案)
以全局方法 calculate 为例 src/utils/calculate.ts export default {sum: function (a: number, b: number) {return a b} }方案1: 依赖注入 provide inject main.ts import calculate from ./utils/calculateapp.provide(calculate, calculate)页面中 // esl…...
基于JavaScript的DBUtils增删改查操作实验
1、实验目的 学习和掌握数据库连接池的配置与管理。使用DBUtils进行增删改查操作。按照步骤,掌握并实现使用DBUtils实现增删改查的全过程。 2、实验所用方法 上机实践 3、实验步骤及截图 创建一个数据库表,使用下面sql语句创建数据库表并插入数据&#x…...
初学stm32 --- 系统时钟配置
众所周知,时钟系统是 CPU 的脉搏,就像人的心跳一样。所以时钟系统的重要性就不言而喻了。 STM32 的时钟系统比较复杂,不像简单的 51 单片机一个系统时钟就可以解决一切。于是有人要问,采用一个系统时钟不是很简单吗?为…...
实现星星评分系统
使用HTML、CSS和JavaScript实现星星评分系统 本文将详细讲解如何使用 HTML、CSS 和 JavaScript 实现一个简单的星星评分系统。用户可以通过点击星星进行评分,并且还能够看到星星的悬浮效果和已选中状态。 1. HTML 结构 我们首先在 HTML 中定义了一个星星评分的结…...
数据库建模工具 PDManer
数据库建模工具 PDManer 1.PDManer简介2.PDManer使用 1.PDManer简介 PDManer(元数建模)是一款功能强大且易于使用的开源数据库建模工具。它不仅支持多种常见数据库,如MySQL、PostgreSQL、Oracle、SQL Server等,还特别支持国产数据…...
后台运维操作建议
文章目录 1.版本升级2.配置发布3.数据库/脚本操作4.发布依赖确认5.发布规范6.服务下线参考文献 1.版本升级 版本升级是软件维护和演进中的关键环节,但它可能带来一系列问题。这些问题涉及兼容性、功能、性能、安全性等方面。 【强制】版本管理:使用版本…...
NX二次开发调用内部函数设置对象穿透显示DSS_ATTR_set_show_through
获取动态库libdisp.dll的路径 void TcharToChar(const TCHAR* tchar, char* _char) {int iLength; #if UNICODE//获取字节长度 iLength = WideCharToMultiByte(CP_ACP, 0, tchar, -1, NULL, 0, NULL, NULL);//将tchar值赋给_char WideCharToMultiByte(CP_ACP, 0, tchar, …...
ubuntu16.04ros-用海龟机器人仿真循线系统
下载安装sudo apt-get install ros-kinetic-turtlebot ros-kinetic-turtlebot-apps ros-kinetic-turtlebot-interactions ros-kinetic-turtlebot-simulator ros-kinetic-kobuki-ftdi sudo apt-get install ros-kinetic-rocon-*echo "source /opt/ros/kinetic/setup.bash…...
解决Ubuntu 20.04上编译OpenCV 3.2时遇到的stdlib.h缺失错误
解决Ubuntu 20.04上编译OpenCV 3.2时遇到的stdlib.h缺失错误 您在 Ubuntu 20.04 上编译 OpenCV 3.2 时遇到的错误与 C 标准库的头文件配置问题有关。错误消息指出系统无法找到 <stdlib.h>,这通常与预编译头文件的处理、GCC 版本或者头文件搜索路径有关。下面…...
HTML综合案例
为了前端考试。 效果图: HTML代码: <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…...
TanStack——为现代前端开发提供高性能和灵活的工具
TanStack 是一个由社区主导的开源项目集合,专注于为现代前端开发提供高性能和灵活的工具。它包括多个流行的 JavaScript 和 TypeScript 库,主要用于处理表格、查询、虚拟化、状态管理等功能。 文章目录 1、TanStack Query:1.1 useQuery&#…...
Java爬虫️ 使用Jsoup库进行API请求有什么优势?
在Java的世界里,Jsoup库以其强大的HTML解析能力而闻名。它不仅仅是一个简单的解析器,更是一个功能齐全的工具箱,为开发者提供了从网页抓取到数据处理的一站式解决方案。本文将深入探讨使用Jsoup库进行API请求的优势,并提供代码示例…...
React源码02 - 基础知识 React API 一览
1. JSX到JavaScript的转换 <div id"div" key"key"><span>1</span><span>2</span> </div>React.createElement("div", // 大写开头会当做原生dom标签的字符串,而组件使用大写开头时,这…...
COMSOL with Matlab
文章目录 基本介绍COMSOL with MatlabCOMSOL主Matlab辅Matlab为主Comsol为辅 操作步骤常用指令mphopenmphgeommghmeshmphmeshstatsmphnavigatormphplot常用指令mphsavemphlaunchModelUtil.clear 实例教学自动另存新档**把语法套用到边界条件**把语法套用到另存新档 函数及其微分…...
【报表查询】.NET开源ORM框架 SqlSugar 系列
文章目录 前言实践一、按月统计没有为0实践二、 统计某月每天的数量实践三、对象和表随意JOIN实践四、 List<int>和表随意JOIN实践五、大数据处理实践六、每10分钟统计Count实践七、 每个ID都要对应时间总结 前言 在我们实际开发场景中,报表是最常见的功能&a…...
PostgreSQL数据库访问限制详解
pg_hba.conf 文件是 PostgreSQL 数据库系统中非常重要的一个配置文件,它用于定义哪些用户(或客户端)可以连接到 PostgreSQL 数据库服务器,以及他们可以使用哪些认证方法进行连接。 pg_hba.conf 的名称来源于 "Host-Based Aut…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...
