农妇山泉一亩田 发表于 2024-8-16 20:12:10

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属性

轨道是否可见,布尔值,
如果轨迹可见性与滚动条的素材状态有关,
使用全局或覆盖
子树的主题数据。
thickness属性

滚动条厚度。
radius属性

滚动条滑块圆角半径。
如果为null,则默认值取决于平台。在上,
半径应用于滚动条拇指。在上,
使用。其余平台的默认[半径.圆形]为8.0像素。
notificationPredicate属性

的谓词,用于自定义小部件
听取孩子的关照。???
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).可用于控制此滚动的位置的对象视图滚动。
有多种用途。


[*]它可以用来控制初始滚动位置(请拜见)
[*]它可用于控制滚动视图是否应主动生存并恢复其在中的滚动位置)
[*]它可以用来读取当前滚动位置(请参阅),或更改它(请参阅)。
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).可用于控制此滚动的位置的对象视图滚动。
有多种用途。


[*]它可以用来控制初始滚动位置(请拜见)
[*]它可用于控制滚动视图是否应主动生存并恢复其在中的滚动位置)
[*]它可以用来读取当前滚动位置(请参阅),或更改它(请参阅)。
physics属性

定义滚动的物理行为,比如滚动速率、弹性效果等。
定义ScrollView怎样相应用户输入,ScrollPhysics范例。例如,确定用户停止拖动滚动视图后滚动视图怎样继续设置动画。
BouncingScrollPhysics:弹性效果
ClampingScrollPhysics:
slivers属性

slivers薄片列表


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Flutter第十弹 ScrollView滚动组件