默认构造函数有一个 children
参数,它接收一个 Widget
列表,这种方式只适合子组件较少的情况,这种方式也没有应用懒加载模型,所以,可以认为这种方式与 SingleChildScrollView
+ Column
没有本质区别。
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.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移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
![](https://i-blog.csdnimg.cn/blog_migrate/a8af0b8913de8723cdf5ddfdca27a1f0.jpeg)
总结:
各行各样都会淘汰一些能力差的,不仅仅是IT这个行业,所以,不要被程序猿是吃青春饭等等这类话题所吓倒,也不要觉得,找到一份工作,就享受安逸的生活,你在安逸的同时,别人正在奋力的向前跑,这样与别人的差距也就会越来越遥远,加油,希望,我们每一个人,成为更好的自己。
-
BAT大厂面试题、独家面试工具包,
-
资料包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
-
BAT大厂面试题、独家面试工具包,
-
资料包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter
[外链图片转存中…(img-JbdPtlu7-1712512678331)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!