先看看效果是不是你想要的

library grouped_listview;import 'package:flutter/material.dart';
typedef TGroup GroupFunction<TElement, TGroup>(TElement element);
typedef Widget ListBuilderFunction<TElement>(BuildContext context, TElement element);
typedef Widget GroupBuilderFunction<TGroup>(BuildContext context, TGroup group);class GroupedListView<TElement, TGroup> extends StatelessWidget {final List<TElement> collection;final GroupFunction<TElement, TGroup> groupBy;final ListBuilderFunction<TElement> listBuilder;final GroupBuilderFunction<TGroup> groupBuilder;final List<dynamic> _flattenedList = List();GroupedListView({@required this.collection,@required this.groupBy,@required this.listBuilder,@required this.groupBuilder}) {_flattenedList.addAll(Grouper<TElement, TGroup>().groupList(collection, groupBy));}@overrideWidget build(BuildContext context) {return ListView.builder(itemBuilder: (context, index) {var element = _flattenedList[index];if (element is TElement) {return listBuilder(context, element);}return groupBuilder(context, element);},itemCount: _flattenedList.length,);}
}class Grouper<TElement, TGroup> {final Map<TGroup, List<TElement>> _groupedList = {};List<dynamic> groupList(List<TElement> collection, GroupFunction<TElement, TGroup> groupBy) {if (collection == null) throw ArgumentError("Collection can not be null");if (groupBy == null) throw ArgumentError("GroupBy function can not be null");List flattenedList = List();collection.forEach((element) {var key = groupBy(element);if (!_groupedList.containsKey(key)) {_groupedList[key] = List<TElement>();}_groupedList[key].add(element);});_groupedList.forEach((key, list) {flattenedList.add(key);flattenedList.addAll(list);});return flattenedList;}
}
Column(children: <Widget>[Container(child: _inputView()),Expanded(flex: 1,child: GroupedListView<Group, String>(collection: list,groupBy: (Group g) => g.groupName,listBuilder: (BuildContext context, Group g) => _buildRow(g),groupBuilder: (BuildContext context, String name) => Text(name),)),],);
class Group {String groupName;UserModel value;Group(this.groupName, this.value);
}

更多详解:
喜欢可以加Q群号:913934649,点赞,评论;

简书: https://www.jianshu.com/u/88db5f15770d

csdn:https://me.csdn.net/beyondforme

掘金:https://juejin.im/user/5e09a9e86fb9a016271294a7

flutter 分组列表相关推荐

  1. [WP8.1UI控件编程]SemanticZoom控件实现分组列表

    11.1.5 SemanticZoom实现分组列表 SemanticZoom控件可以让用户实现一种更加高级的列表,这种列表可以对列表的项目进行分组,同时这个SemanticZoom控件会提供两个具有相 ...

  2. Android 仿微信通讯录 导航分组列表-上】使用ItemDecoration为RecyclerView打造带悬停头部的分组列表

    本文是Android导航分组列表系列上,因时间和篇幅原因分上下,最终上下合璧,完整版效果如下:   上部残卷效果如下:两个ItemDecoration,一个实现悬停头部分组列表功能,一个实现分割线(官 ...

  3. 【Android 仿微信通讯录 导航分组列表-上】使用ItemDecoration为RecyclerView打造带悬停头部的分组列表

    *本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 转载请标明出处: http://blog.csdn.net/zxt0601/article/details/52355199 本文 ...

  4. 【Android 仿微信通讯录 导航分组列表-下】自定义View为RecyclerView打造右侧索引导航栏IndexBar

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 转载请标明出处: http://blog.csdn.net/zxt0601/article/details/52420706 本文出 ...

  5. 高级控件之分组列表视图(ExpandableListView)

    一.ExpandableListView的基础知识 和ListView不同的是它是一个两级的滚动列表视图,每一个组可以展开,显示一些子项,类似于 QQ列表,这些项目来至于ExpandableListA ...

  6. elasticsearch:使用top_hits聚合获取分组列表

    文章目录 业务需求 实现 java代码 kibana请求体 返回示例 业务需求 需要获取分组列表,查询返回值不是一个列表,而是根据某个字段分组 每组返回前5条,不足5条,则返回全部 按照时间倒序 实现 ...

  7. 仿QQ分组列表(UITableView)

    // // ViewController.m // 仿QQ分组列表 // // Created by lanqs on 15/1/26. // Copyright (c) 2015年 Tanqihon ...

  8. Android 自定义RecycleView实现多级树(类似qq分组列表)

    由于工作需要开发一个类似qq分组列表功能,所以就自定义RecycleView来实现功能 效果图: 自定义View: import java.util.ArrayList; import java.ut ...

  9. Flutter 视频列表的简单实现

    Flutter 视频列表的简单实现 参考 https://resocoder.com/2019/04/13/flutter-video-player-chewie-tutorial/ 视频的播放插件是 ...

最新文章

  1. php5.3源码,php5.3介绍
  2. RabbitMQ消息自动重新入队
  3. SVN trunk branch tags 区别
  4. SSM框架之多数据源配置
  5. 树状数组相关应用之逆序对问题
  6. 利用BitLocker和VHD实现共享文件加密
  7. 单IP无TMG拓扑Lync Server 2013:外部访问
  8. Pandas 基础(17) - to_datetime
  9. 问题2----网速问题?造成的ORA-01034和ORA-27101
  10. 磁盘一把锁一个感叹号_TBase中的一些锁
  11. C# 反序列化datetime的处理
  12. 韩顺平java作业题_韩顺平java作业
  13. ubuntu2004 安装protoc
  14. dpdk-pktgen快速发包工具踩坑日记
  15. html5 webp,在 CRA 中使用 webp 图片提升加载性能
  16. mac如何打开/bin等目录
  17. 2023计算机毕业设计SSM最新选题之java亚健康人群健康管理系统c4cyz
  18. VOT-toolkit Python 版本使用教程--官方样例版
  19. 组建WEP加密无线局域网络
  20. git ssh远程登录

热门文章

  1. 贝叶斯网络--概率推理
  2. 谷歌浏览器自动翻译问题
  3. Arduino配置WS2812及Adafruit_NeoPixel库的使用
  4. Vue源码中的对象相等比较
  5. ESP8266WIFI模块调试(一)
  6. 上传文件夹到nas服务器,文件上传到群晖服务器
  7. 基于WebKit的网络爬虫
  8. 关于写好技术文章的一些思考
  9. 计算机应用新教程,计算机应用基础教程(新)-李久仲 第1单元 计算机基础知识
  10. 应用系统性能测试六大步