Flutter基础篇(二十四)—— ListView,2024年腾讯Android高级面试题及答案

文章介绍了ListView.builder的使用场景和特点,相比于默认构造函数,它支持懒加载。同时讨论了ListView.separated的额外功能和无限加载列表的实现方法,提倡系统性学习以提升Android开发技能。
摘要由CSDN通过智能技术生成

默认构造函数有一个 children 参数,它接收一个 Widget 列表,这种方式只适合子组件较少的情况,这种方式也没有应用懒加载模型,所以,可以认为这种方式与 SingleChildScrollView + Column 没有本质区别。

ListView.builder


ListView.builder 适合列表项比较多(或者无限)的情况,因为只有当子组件真正显示的时候才会被创建,也就是说,通过该构造函数创建的 ListView 是支持懒加载模型的。定义:

ListView.builder({

// ListView公共参数已省略

@required IndexedWidgetBuilder itemBuilder,

int itemCount,

})

  • itemBuilder —— 它是列表项的构建器,类型为 IndexedWidgetBuilder ,返回值为一个 widget 。当列表滚动到具体的 index 位置时,会调用该构造器构建列表项。

  • itemCount —— 列表项的总数量,如果为 null,则表示无限。

示例:

ListView.builder(

itemCount: 100,

itemExtent: 50,

itemBuilder: (BuildContext context,int index){

return ListTile(title: Text(‘$index’),);

},

),

ListView.separated


ListView.separated 可以在生成的列表项之间添加一个分割组件,它比 ListView.builder 多了一个 separatorBuilder 参数,该参数是一个分割组件生成器。

示例:奇数行添加一条粉色下划线,偶数行添加一条绿色下划线。

class App extends StatelessWidget{

@override

Widget build(BuildContext context) {

Widget divider1 = Divider(color: Colors.pink);

Widget divider2 = Divider(color: Colors.green);

return MaterialApp(

home: Scaffold(

body: ListView.separated(

itemCount: 100,

//列表项构造器

itemBuilder: (BuildContext context,int index){

return ListTile(title: Text(‘$index’),);

},

separatorBuilder: (BuildContext context,int index){

return index % 2 == 0 ? divider1 : divider2;

},

),

)

);

}

}

无限加载列表


示例:假设我们要从数据源分批拉取一些数据,然后用 ListView 展示,当我们滑动到列表末尾时,判断是否需要再去拉取数据,如果需要,则拉取。拉取过程中再列表末尾显示一个 loading ,拉取成功后插入数据,否则显示没有更多数据。

class _InfiniteListViewState extends State{

static const loadingTag = ‘##loading##’;

var _words = [loadingTag];

void initState(){

super.initState();

_retrieveData();

}

void _retrieveData(){

Future.delayed(Duration(seconds: 2)).then((e){

_words.insertAll(_words.length - 1,

prefix0.generateWordPairs().take(20).map((e) => e.asPascalCase).toList()

);

setState(() {

});

});

}

@override

Widget build(BuildContext context) {

return ListView.separated(

separatorBuilder: (context,index) => Divider(height: .0,),

itemCount: _words.length,

itemBuilder: (context,index){

if(_words[index] == loadingTag){

if(_words.length - 1 < 100){

//获取数据

_retrieveData();

//加载时显示loading

return Container(

padding: const EdgeInsets.all(16),

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

总结:

各行各样都会淘汰一些能力差的,不仅仅是IT这个行业,所以,不要被程序猿是吃青春饭等等这类话题所吓倒,也不要觉得,找到一份工作,就享受安逸的生活,你在安逸的同时,别人正在奋力的向前跑,这样与别人的差距也就会越来越遥远,加油,希望,我们每一个人,成为更好的自己。

  • BAT大厂面试题、独家面试工具包,

  • 资料包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • BAT大厂面试题、独家面试工具包,

  • 资料包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter
    [外链图片转存中…(img-JbdPtlu7-1712512678331)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值