博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flutter ListView如何添加HeaderView和FooterView
阅读量:4082 次
发布时间:2019-05-25

本文共 1268 字,大约阅读时间需要 4 分钟。

做过Android开发的同学知道,Android的ListView提供addHeaderView和addFooterView两个方法用于添加View到ListView;

RecyclerView则通过定义不同的ItemType区分HeaderViewItem和普通的ListItem,在Adapter中加上逻辑判断返回对应的ViewHolder,处理起来还是有点麻烦的。


而flutter的ListView怎么处理呢?有两种方式:

  1. 参考RecyclerView的实现方式,定义不同类型的Item,如果想保持HeaderViewItem滚出屏幕外而不会被销毁,需要使用KeepAlive控件对HeaderViewItem做一层包裹;
  2. 使用CustomScrollView + SliverToBoxAdapter + SliverList;

推荐使用方式2,实现简单没有多余的判断逻辑处理,废话少说,直接上代码:

class MyHomePage extends StatelessWidget {  // 列表项  Widget _buildListItem(BuildContext context, int index){    return ListTile(      title: Text('list tile index $index')    );  }  @override  Widget build(BuildContext context) {    return Scaffold(      appBar: AppBar(        title: Text('Demo'),      ),      body: CustomScrollView(        slivers: 
[ // 如果不是Sliver家族的Widget,需要使用SliverToBoxAdapter做层包裹 SliverToBoxAdapter( child: Container( height: 120, color: Colors.green, child: Text('HeaderView'), ), ), // 当列表项高度固定时,使用 SliverFixedExtendList 比 SliverList 具有更高的性能 SliverFixedExtentList( delegate: SliverChildBuilderDelegate(_buildListItem, childCount: 30), itemExtent: 48.0 ) ], ), ); }}

运行效果

在这里插入图片描述

转载地址:http://kuhni.baihongyu.com/

你可能感兴趣的文章
React Native应用部署/热更新-CodePush最新集成总结(新)
查看>>
react-native-wechat
查看>>
基于云信的react-native聊天系统
查看>>
网易云音乐移动客户端Vue.js
查看>>
JavaScript异步函数
查看>>
ES7 await/async
查看>>
ES7的Async/Await
查看>>
React Native WebView组件实现的BarCode(条形码)、(QRCode)二维码
查看>>
每个人都能做的网易云音乐[vue全家桶]
查看>>
JavaScript专题之数组去重
查看>>
Immutable.js 以及在 react+redux 项目中的实践
查看>>
Vue2.0全家桶仿腾讯课堂(移动端)
查看>>
React+Redux系列教程
查看>>
react-native 自定义倒计时按钮
查看>>
19 个 JavaScript 常用的简写技术
查看>>
ES6这些就够了
查看>>
微信小程序:支付系列专辑(开发指南+精品Demo)
查看>>
iOS应用间相互跳转
查看>>
iOS开发之支付宝集成
查看>>
iOS开发 支付之银联支付集成
查看>>