flutter学习笔记—滚动-flutter-xue-xi-bi-ji-scrollable-shen-ru-xiang-jie-listview-zu-jian


title: flutter学习笔记—滚动
date: 2023-01-23 20:00:39.995
updated: 2023-01-26 13:26:06.064
url: https://hexo.start237.top/archives/flutter-xue-xi-bi-ji-scrollable-shen-ru-xiang-jie-listview-zu-jian
categories:

  • IT技术
    tags:
  • flutter

滚动列表与动态加载

相关链接

ListView

可以创建一个滚动视图

属性

属性类型说明
itemBuilderFunction动态渲染
itemCountint限制列表的条目数
cacheExtentint缓冲区高度

使用方法ListView.build时的列表算法

看不见的条目即不需要渲染。顶部超过的条件删除,底部提前缓存10条数据。

方法

名称说明
build高效渲染一个列表
separate可渲染带分割线的列表

深入详解ListView组件

相关链接

ListView.builder(
	itemBuilder:(context,index){
    	return Container(
        	height:50,
            	width:50,
            	color:index % 2 == 0 ? Colors.blue : Colors.blue[200],
        )
    },
    scrollDirection:Axis.vertical, // 列表方向 
    itemCount:200,
    itemExtent:60 ,//强制限制每个item元素的高度or宽度。
    controller: _controller,
    physics: BouncingScrollPhysics() //物理属性,BouncingScrollPhysics()值是模拟IOS的到底或顶反弹效果,ClampingScrollPhysics() 摸拟安卓上的无效果。还有更多的值,可以查阅资料。
)

列表加滚动条的需要在父元素上使用 Scrollbar的组件

Scrollbar(
	children:ListView()
)

ScrollController 这是列表滚动控制器

scrollController.animateTo() // 以动画的方式跳转
scrollController.offset //当前滚动条所处的位置

下拉刷新与通知事件

相关视频链接

IOS风格列表的滚动条 wigdet

CupertionScrollbar(
	child:ListView()
)

Scrollbar 的属性

Scrollbar(
	isAlwaysShow:true, // 滚动条一直显示
    	controller: //传入和ListView一样的控制器
)

RefreshIndicator 这个组件可以做下拉刷新的功能

RefreshIndicator(
	onRefresh:(){
    		return Future.delayed(Duration(seconds:2)); //等待2s刷新,这里可以做一些异步数据的请求操作。
        },
	child:ListView()
)

NotificationListener 监听子级事件,可用于拦截事件冒泡


NotificationListener(
	onNotification:( ScrollNotification _event){
    	print(_envent)
        
        return true; // 如果是true则截获事件,如果是false则让事件继续向上冒泡
    
    },
    child:ListView(),

)

支持滑动删除的Dismissible

笔记详解
相关视频


const Dismissible({
    @required Key key,
    @required this.child,
    this.background,            // 滑动背景展示 Widget
    this.secondaryBackground,   // 与background相反滑动背景展示 Widget
    this.confirmDismiss,        // 是否确定清除当前 Widget
    this.onResize,              // 重新修改尺寸回调
    this.onDismissed,           // 确定清除回调
    this.direction = DismissDirection.horizontal,   // 滑动关闭方向
    this.resizeDuration = const Duration(milliseconds: 300),       // 修改尺寸时长
    this.dismissThresholds = const <DismissDirection, double>{},  // 各方向滑动清除阀值
    this.movementDuration = const Duration(milliseconds: 200),    // 清除过程时长
    this.crossAxisEndOffset = 0.0,
    this.dragStartBehavior = DragStartBehavior.start,
})



GridView网格部局

GridView.builder(
	itemCount:200,
    	gridDelegate:  // 值见下方


)

gridDelegate各种值

SliverGridDelegateWithFixedCrossAxisCount(
	crossAxisCount:4, // 交叉轴填放4个格
    	childAspectRatio:16/9, // 创建带比例的网格
)

当在横屏模式下,或着在平板下,元素也会被放大,这样是不太友好的。需要用到下面的属性。会用到另一个值

SliverGridDelegateWithMaxCrossAxisExtent(
	maxCrossAxisExtent:100, // 最大尺寸
    childAspectRatio:16/9, // 创建带比例的网格
)

GridView 提供了方法

GridView.extent(
	maxCrossAxisExtent:104, // 最大尺寸
    children:[
    ],
    childAspectRatio:3/2, //风格的比例
)

这个方法不支持build方法。

GridView.count(
	maxCrossAxisExtent:104, // 最大尺寸
    childAspectRatio:3/2, //风格的比例
    mainAxisSpacing:2.0, //主轴间隙
    crossAxisSpacing:4.0, // 交叉轴间隙
)

总结

  1. GridView 是用来渲染网格的wigdet

  2. 方法有

名称作用
build可以懒加载渲染网格
count一个语法糖,渲染指定数量的风格
extend用最大尺寸来限制网格数据,可以做响应式的网格

3.常用属性有

名称类型作用
gridDelegateSliverGridDelegate一个在GridView中控制子元素布局的委托
crossAxisCountint网格的数量
maxCrossAxisExtentint网格的最大尺寸
childAspectRatiodouble网格比例
mainAxisSpacingdouble主轴网格间隙
crossAxisSpacingdouble交叉轴间隙
  1. gridDelegate 的几种值,里面的属性同GridView的属性
  • SliverGridDelegateWithFixedCrossAxisCount
  • SliverGridDelegateWithMaxCrossAxisExtent

再来4个widget!

ListWheelScrollView

创建一个3D转轮的效果

属性

名称类型作用
diameterRatiodouble直径
overAndUnderCenterOpacitydouble除去中间item的透明度
itemExtentdouble限制item尺寸
offAxisFractiondouble距离轴心距离
magnificationdouble放大镜效果
physics物理效果 值 FixedExtentScrollPhysics() 保证item正好停留在中间
onSelectedItemChangeFunction列表滚动时正好选择的index,一个回调方法

PageView

类似于轮播图的一种效果。翻动整个页面

属性

名称类型作用
pageSnappingbool页面是否翻滚整屏
scrollDirectionAxis页面滚动方向

ReorderableListView 拖拽item组件

属性

名称类型作用
children[]Wigdet
onReorderFunction拖动时的事件,回调里面会有一个,拖动的index和一个目标index
headerWigdet列表头部不可动的一个小部件

SingleChildScrollView

使用Column的部件时,子组件有会出现溢出的现象,因为Column是固定的。SingleChildScrollView会在合适的时候出现滚动条。如果使用ListView,就是一个滚动列表的容器,从设计上来说是不适合使用这个组件的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值