RefreshMoreList.dart 4.1KB

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