Flutter第十弹 ScrollView滚动组件

目标:

1)滚动组件的特性?

2)有哪些常用的滚动组件?

一、基础滚动组件

Flutter有许多内置的小部件可以自动滚动,还提供了各种小部件,您可以自定义这些小部件来创建特定的滚动行为。

1.1 Scrollbar组件

滚动条的基本构成

滑块:显示滚动了多少?

轨道:滚动条滑动的轨道。可以直接拖拽滚动到轨道位置。

子组件:对应可以滚动的子组件。

child属性

可滚动属性的组件,例如ListView

          Scrollbar(child: ListView.builder(
              itemCount: 20,
              itemBuilder: (c, i) -> MyItem(i),
          )),

controller属性

滚动控制器,为空的话默认使用PrimaryScrollController启动滚动条。

thumbVisibility属性

滑块是否可见,布尔值,默认不可见。

trackVisibility属性

轨道是否可见,布尔值,

如果轨迹可见性与滚动条的素材状态有关,
使用全局[ScrollbarThemeData.trackVisibility]或覆盖
子树的主题数据。

thickness属性

滚动条厚度。

radius属性

滚动条滑块圆角半径。

如果为null,则默认值取决于平台。在[TargetPlatform.android]上,
半径应用于滚动条拇指。在[TargetPlatform.iOS]上,
使用[CupertinoScrollbar.defaultRadius]。其余平台的默认[半径.圆形]为8.0像素。

notificationPredicate属性

[ScrollNotification]的谓词,用于自定义小部件
听取孩子的通知。???

scrollbarOrientation属性

滚动条的方向,水平滚动条,竖直滚动条。参见ScrollbarOrientation,

包括

  • left: 左侧滚动条
  • right: 右侧滚动条
  • top:顶部滚动条
  • bottom: 底部滚动条

 1.2 SingleChildScrollView组件

通常SingleChildScrollView只应在期望的内容不会超过屏幕太多时使用,这是因为SingleChildScrollView不支持基于Sliver的延迟实例化模式,所以如果预计视口可能包含超出屏幕尺寸太多的内容时使用SingleChildScrollView将会导致性能差的问题,此时应该使用一些支持Sliver延迟加载的可滚动组件,如ListView。

当需要构建比较长的页面时,如果直接使用SingleChildScrollView,会将整个页面的内容一次性渲染到内存中,这可能会导致内存用过高,影响应用的性能和体验。

SingleChildScrollView继承StatelessWidget。

scrollDirection属性

滚动方向,默认Axis.vertical

  • Axis.vertical:竖直方向
  • Axis.horizontal水平方向

padding属性

内边距

reverse属性

是否反向滚动

primary属性

controller属性

primary为true时此项必须为空(null).可用于控制此滚动的位置的对象视图滚动。

[ScrollController]有多种用途。

  • 它可以用来控制初始滚动位置(请参见[ScrollController.initialScrollOffset])
  • 它可用于控制滚动视图是否应自动保存并恢复其在[PageStorage]中的滚动位置[ScrollController.kipScrollOffset])
  • 它可以用来读取当前滚动位置(请参阅[ScrollController.offset]),或更改它(请参阅[ScrollController.animateTo])。
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  final controller = ScrollController();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('SingleChildScrollView Demo - Controller'),
        ),
        body: SingleChildScrollView(
          controller: controller, // 设置控制器
          child: Column(
            children: List.generate(50, (index) => Text('Item $index')), // 生成一个长列表
          ),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: () {
            controller.animateTo(100, duration: Duration(seconds: 1), curve: Curves.easeInOut); // 滚动到指定位置
          },
          child: Icon(Icons.arrow_upward),
        ),
      ),
    );
  }
}

interactive属性

滑块是否可以拖动。

physics属性

定义滚动的物理行为,比如滚动速度、弹性效果等。

定义ScrollView如何响应用户输入,ScrollPhysics类型。例如,确定用户停止拖动滚动视图后滚动视图如何继续设置动画。

BouncingScrollPhysics:弹性效果

ClampingScrollPhysics:

1.3 基于Sliver的延迟构建模式

Flutter中提出一个Sliver(中文为"薄片"的意思)概念,如果一个可滚动组件支持Sliver模型,那么该滚动组件可以将子组件分成好多个薄片(Sliver),只有当Sliver出现在视口时才会去构建它,这种模型也成为"基于Sliver的延迟构建模型"。相当于延迟加载模式。

这个类似于安卓的ListView的Adapter适配模式,只有可见的列表项才UI展现,滑动过程中通过不停的刷新子项内容实现滑动效果。

SingleChildScrollView不支持该模式。大部分的滑动组件都支持该模式,例如CustomScrollView。

1.4 CustomScrollView组件

CustomScrollView继承ScrollView。CustomScrollView可以将页面划分为多个Sliver,每个Sliver只在需要显示时才会被渲染到内存中。

这种方式可以大大减少内存的占用,并且可以更好地处理滚动事件。例如,在滚动时,CustomScrollView可以只渲染当前可见区域内的Sliver,而不是整个页面的内容。

CustomScrollView还提供了一些方便的特性,如SliverAppBar、SliverPersistentHeader等,可以方便地实现吸顶效果、折叠效果等,使页面的展示更加灵活和美观。

scrollDirection属性

滚动方向,默认Axis.vertical

  • Axis.vertical:竖直方向
  • Axis.horizontal水平方向

padding属性

内边距

reverse属性

是否反向滚动

primary属性

controller属性

primary为true时此项必须为空(null).可用于控制此滚动的位置的对象视图滚动。

[ScrollController]有多种用途。

  • 它可以用来控制初始滚动位置(请参见[ScrollController.initialScrollOffset])
  • 它可用于控制滚动视图是否应自动保存并恢复其在[PageStorage]中的滚动位置[ScrollController.kipScrollOffset])
  • 它可以用来读取当前滚动位置(请参阅[ScrollController.offset]),或更改它(请参阅[ScrollController.animateTo])。

physics属性

定义滚动的物理行为,比如滚动速度、弹性效果等。

定义ScrollView如何响应用户输入,ScrollPhysics类型。例如,确定用户停止拖动滚动视图后滚动视图如何继续设置动画。

BouncingScrollPhysics:弹性效果

ClampingScrollPhysics:

slivers属性

slivers薄片列表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/556737.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

笔记软件功能多样的是哪款?做笔记的软件哪个好用

在快节奏的现代生活中,笔记软件已成为我们提高工作效率、记录生活点滴的重要工具。想象一下,在繁忙的工作中,你能够快速记录下关键信息,或在灵感迸发时及时捕捉,这是多么方便高效。 一款功能多样的笔记软件&#xff0…

Syncovery for Mac:高效文件备份和同步工具

Syncovery for Mac是一款专为Mac用户设计的文件备份和同步工具,凭借其高效、安全和易用的特点,深受用户好评。 Syncovery for Mac v10.14.2激活版下载 该软件具备强大的备份功能,支持多种备份方案和数据格式,用户可以根据需求轻松…

Python教学入门:函数

在 Python 中,def 关键字用于定义函数。函数是一段可重用的代码块,用于执行特定的任务或操作。通过定义函数,可以将一段代码封装起来,使其可以在程序中被多次调用,提高代码的复用性和可维护性。 下面是 def 函数定义的…

pandas/python 一个实战小案例

上次写坦克游戏的时候,接触了一点pandas,当时只是简单了解了一下如何遍历行和列并获取值来替换图片,想更多了解pandas。正好有一些数据需要筛选,试试能不能用通过代码实现。虽然总的来说不复杂,但由于原始数据在命名、…

如何训练猫出门不害怕:耐心做好这些训练,轻松get能溜的小猫

一般我们外出见到的都是遛狗的,溜猫的相对少见,一方面是因为猫咪是喜欢安静独处的小动物,另一方面是糟乱的环境也容易引起猫咪的应激。对于是否应该“溜猫”,有两个极端的阵营。一些铲屎官认为应尊重猫的天性,胆小不爱…

如何使用AI写作扩写文章?看完这篇学会扩写

如何使用AI写作扩写文章?在数字化时代的浪潮下,人工智能(AI)已经深入渗透到我们生活的各个领域,其中,AI写作扩写技术更是以其高效、便捷的特点受到了广大用户的青睐。它不仅极大提升了写作效率,…

Leetcode算法训练日记 | day29

一、递增子序列 1.题目 Leetcode:第 491 题 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素,如出现两个整数相等&…

硬件?、嘉立创EDA画PCB规则设计

1、打开规则设计 设置单位为mil 点击全部 将安全距离设置为8mil,这个8mil是目前很多生产PCB的工厂可以做的,如果距离设置的更小也就是性能要求更高,相应的生产成本也高元件到元件的距离设置为20mil 2、设置导线的宽度规则,可以对v…

第G6周:CycleGAN实践

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、CycleGAN原理 (一)CycleGAN的原理结构: CycleGAN(循环生成对抗网络)是一种生成对抗网络&…

思维导图软件Xmind for Mac 中文激活版 支持M

XMind是一款非常受欢迎的思维导图软件,它应用了Eclipse RCP软件架构,注重易用性、高效性和稳定性,致力于帮助用户提高生产率。 Xmind for Mac 中文激活版下载 XMind的程序主体由一组插件构成,包括一个核心主程序插件、一组Eclipse…

文件后缀变成.halo? 如何恢复重要数据

.halo 勒索病毒是什么? .halo勒索病毒是一种恶意软件,属于勒索软件(Ransomware)的一种。这种病毒会加密用户计算机上的文件,并要求受害者支付赎金才能获取解密密钥,从而恢复被加密的文件。勒索软件通常会通…

力扣(leetcode) 42. 接雨水 (带你逐步思考)

力扣(leetcode) 42. 接雨水 (带你逐步思考) 链接:https://leetcode.cn/problems/trapping-rain-water/ 难度:hard 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多…

【方便 | 重要】#LLM入门 | Agent | langchain | RAG # 3.7_代理Agent,使用langchain自带agent完成任务

大型语言模型(LLMs)虽强大,但在逻辑推理、计算和外部信息检索方面能力有限,不如基础计算机程序。例如,LLMs处理简单计算或最新事件查询时可能不准确,因为它们仅基于预训练数据。LangChain框架通过“代理”(…

机器学习在安全领域的应用:从大数据中识别潜在安全威胁

🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

Ubuntu20.04 ISAAC SIM仿真下载使用流程(4.16笔记补充)

机器:华硕天选X2024 显卡:4060Ti ubuntu20.04 安装显卡驱动版本:525.85.05 参考: What Is Isaac Sim? — Omniverse IsaacSim latest documentationIsaac sim Cache 2023.2.3 did not work_isaac cache stopped-CSDN博客 Is…

LeetCode in Python 704. Binary Search (二分查找)

二分查找是一种高效的查询方法&#xff0c;时间复杂度为O(nlogn)&#xff0c;本文给出二分查找的代码实现。 示例&#xff1a; 代码&#xff1a; class Solution:def search(self, nums, target):l, r 0, len(nums) - 1while l < r:mid (l r) // 2if nums[mid] > ta…

C++11 数据结构1 线性表的概念,线性表的顺序存储,实现,测试

一 线性表的概念 线性结构是一种最简单且常用的数据结构。 线性结构的基本特点是节点之间满足线性关系。 本章讨论的动态数组、链表、栈、队列都属于线性结构。 他们的共同之处&#xff0c;是节点中有且只有一个开始节点和终端节点。按这种关系&#xff0c;可以把它们的所有…

MC9S12A64 程序烧写方法

前言 工作需要对MC9S12A64 单片机进行程序烧写。 资料 MC9S12A64 单片机前身属于 飞思卡尔半导体&#xff0c;后来被恩智浦收购&#xff0c;现在属于NXP&#xff1b; MC9S12A64 属于16位S12系列&#xff1b;MC9S12 又叫 HCS12。 数据手册下载连接 S12D_16位微控制器 | N…

[大模型]TransNormerLLM-7B 接入 LangChain 搭建知识库助手

TransNormerLLM-7B 接入 LangChain 搭建知识库助手 环境准备 在 autodl 平台中租赁一个 3090/4090 等 24G 显存的显卡机器&#xff0c;如下图所示镜像选择 PyTorch–>2.0.0–>3.8(ubuntu20.04)–>11.8 接下来打开刚刚租用服务器的 JupyterLab&#xff0c;并且打开其…

简单实用的备忘录小工具 记事提醒备忘效果超好

在这个信息爆炸的时代&#xff0c;我们每个人都需要处理大量的信息和任务。有时候&#xff0c;繁忙的生活和工作会让我们感到压力山大。幸运的是&#xff0c;现在有很多简单实用的软件工具&#xff0c;像得力的小助手一样&#xff0c;帮助我们整理思绪&#xff0c;提高效率&…
最新文章