RefreshMoreList.dart 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_easyrefresh/easy_refresh.dart';
  3. import 'package:get/get.dart';
  4. import 'NullCard.dart';
  5. class RefreshMoreList extends StatefulWidget {
  6. RefreshMoreList({
  7. Key? key,
  8. required this.cardText,
  9. required this.pPrams,
  10. required this.fetch,
  11. required this.builder,
  12. required this.useState,
  13. }) : super(key: key);
  14. final String cardText;
  15. final Rx<Map<String, dynamic>> pPrams;
  16. final Function fetch;
  17. Function(List<dynamic> state) useState;
  18. Widget Function({
  19. required BuildContext context,
  20. required Function toggle,
  21. }) builder;
  22. @override
  23. State<RefreshMoreList> createState() =>
  24. _RefreshMoreList(this.cardText, this.fetch);
  25. }
  26. class _RefreshMoreList extends State<RefreshMoreList> {
  27. EasyRefreshController _controller = EasyRefreshController();
  28. final String cardText;
  29. final Function fetch;
  30. _RefreshMoreList(this.cardText, this.fetch);
  31. @override
  32. void initState() {
  33. super.initState();
  34. getNewData();
  35. }
  36. var pageIndex = 1;
  37. var count = 10;
  38. int maxSum = 0;
  39. final params = Rx<Map<String, dynamic>>({'pageNum': 1});
  40. final dataList = Rx<List<dynamic>>([]);
  41. final newDataList = Rx<List<dynamic>>([]);
  42. void getNewData() {
  43. Map<String, dynamic> map = {...params.value, ...widget.pPrams.value};
  44. pageIndex = 1;
  45. map['pageNum'] = pageIndex;
  46. params(map);
  47. fetch(params.value).then((value) {
  48. maxSum = value['total'];
  49. widget.useState(value['records']);
  50. dataList(value['records']);
  51. newDataList(value['records']);
  52. });
  53. }
  54. void getMoreData() {
  55. Map<String, dynamic> map = {...params.value, ...widget.pPrams.value};
  56. pageIndex++;
  57. map['pageNum'] = pageIndex;
  58. params(map);
  59. fetch(params.value).then((value) {
  60. maxSum = value['total'];
  61. newDataList.value.addAll(value['records']);
  62. widget.useState(newDataList.value);
  63. dataList(newDataList.value);
  64. });
  65. }
  66. int _count = 0;
  67. toggle() {
  68. getNewData();
  69. }
  70. @override
  71. Widget build(BuildContext context) {
  72. return Obx(
  73. () => EasyRefresh(
  74. controller: _controller,
  75. header: ClassicalHeader(
  76. infoText: DateTime.now().toString().substring(0, 19),
  77. refreshedText: '刷新完成',
  78. refreshText: '刷新中....',
  79. refreshingText: '刷新中....',
  80. refreshReadyText: '刷新完毕',
  81. noMoreText: '',
  82. textColor: const Color(0xff666666),
  83. infoColor: const Color(0xff666666),
  84. ),
  85. footer: ClassicalFooter(
  86. infoText: DateTime.now().toString().substring(0, 19),
  87. loadText: '上拉加载更多',
  88. loadingText: '加载中....',
  89. loadedText: '',
  90. loadReadyText: '释放加载',
  91. noMoreText: '暂无更多',
  92. enableInfiniteLoad: false,
  93. textColor: const Color(0xff666666),
  94. infoColor: const Color(0xff666666),
  95. ),
  96. // firstRefresh: true,//是否首次刷新
  97. onRefresh: () async {
  98. await Future.delayed(const Duration(seconds: 1), () {
  99. // print("下拉刷新-----");
  100. getNewData();
  101. _count = dataList.value.length;
  102. // print("最新条数" + _count.toString());
  103. _controller.resetLoadState();
  104. });
  105. },
  106. onLoad: () async {
  107. await Future.delayed(const Duration(seconds: 1), () {
  108. // print("上拉加载-----");
  109. getMoreData();
  110. _count = dataList.value.length;
  111. // print("加载更多条数" + _count.toString());
  112. _controller.finishLoad(noMore: _count >= maxSum);
  113. });
  114. },
  115. child: Column(
  116. children: [
  117. widget.builder(context: context, toggle: toggle),
  118. dataList.value.isEmpty
  119. ? NullCard(text: cardText)
  120. : const SizedBox(
  121. height: 0.1,
  122. )
  123. ],
  124. ),
  125. ),
  126. );
  127. }
  128. }