index.dart 8.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. import 'dart:convert';
  2. import 'package:farmer_client/pages/home/widgets/home/widgets/headers.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:flutter_easyloading/flutter_easyloading.dart';
  5. import 'package:flutter_easyrefresh/easy_refresh.dart';
  6. import 'package:flutter_screenutil/flutter_screenutil.dart';
  7. import 'package:fluttertoast/fluttertoast.dart';
  8. import 'package:get/get.dart';
  9. import '../../models/app.dart';
  10. import '../../models/entities/CardListModel.dart';
  11. import '../../models/entities/CardTypeModel.dart';
  12. import '../../services/homeAPI.dart';
  13. import '../../widgets/CarsCard.dart';
  14. import '../../widgets/NullCard.dart';
  15. import '../../widgets/Search.dart';
  16. class MoreCars extends StatefulWidget {
  17. const MoreCars({Key? key}) : super(key: key);
  18. @override
  19. State<MoreCars> createState() => _MoreCarsState();
  20. }
  21. class _MoreCarsState extends State<MoreCars> with TickerProviderStateMixin {
  22. late TabController _controller;
  23. late EasyRefreshController _controllerList;
  24. final tabText = Rx<List<CardTypeModel>>([]);
  25. final classId = Rx<List<dynamic>>([]);
  26. final cardTypeList = Rx<List<CardListModel>>([]);
  27. final newCardTypeList = Rx<List<CardListModel>>([]);
  28. var pageIndex = 1; //页数
  29. var count = 10; //每页10条
  30. late int maxSum; //最多条数
  31. String value=''; //最多条数
  32. int _count = 0;
  33. String? location = AppController.t.locationStr;
  34. bool hasTopLoad = false;
  35. int index = 0;
  36. String typeId='';
  37. Map<String, dynamic> params = {'pageNum': 1,'location':AppController.t.locationStr,'typeId':''};
  38. @override
  39. void initState() {
  40. // TODO: implement initState
  41. super.initState();
  42. _controller = TabController(length: tabText.value.length, vsync: this);
  43. _controllerList = EasyRefreshController();
  44. // _controller.addListener(() {
  45. // setState(() => _selectedIndex = _controller.index);
  46. // print("liucheng-> ${_controller.indexIsChanging}");
  47. // });
  48. _geList();
  49. getNewData(params);
  50. // _getAllCarsList();
  51. }
  52. @override
  53. void dispose() {
  54. super.dispose();
  55. _controller.dispose();
  56. _controllerList.dispose();
  57. }
  58. void getNewData(Map? params) {
  59. pageIndex = 1;
  60. params!['pageNum'] = pageIndex;
  61. print(params['pageNum']);
  62. getMachinery(params).then((value) {
  63. maxSum = value['total'];
  64. List<CardListModel> list = [];
  65. value['records'].forEach((item) {
  66. list.add(CardListModel.fromJson(item));
  67. });
  68. cardTypeList(list);
  69. newCardTypeList(list);
  70. _count = cardTypeList.value.length;
  71. });
  72. }
  73. void _geList() {
  74. getMachineryType().then((value) {
  75. EasyLoading.show(status: '数据加载中...');
  76. final list = <CardTypeModel>[];
  77. List classtypeId = [];
  78. List<CardTypeModel> newTabs = [
  79. CardTypeModel.fromJson({'name': '全部'})
  80. ];
  81. value['records'].forEach((item) {
  82. list.add(CardTypeModel.fromJson(item));
  83. });
  84. list.insertAll(0, newTabs);
  85. tabText(list);
  86. tabText().forEach((item) {
  87. classtypeId.add(item.typeId);
  88. });
  89. classId(classtypeId);
  90. hasTopLoad = true;
  91. _controller = TabController(length: tabText.value.length, vsync: this);
  92. print(hasTopLoad);
  93. EasyLoading.dismiss();
  94. });
  95. }
  96. void getMoreData(Map? params) {
  97. pageIndex++;
  98. params!['pageNum'] = pageIndex;
  99. print(params['pageNum']);
  100. searchMachinery(params).then((value) {
  101. maxSum = value['total'];
  102. List<CardListModel> list = [];
  103. List<CardListModel> Newlist = [];
  104. value['records'].forEach((item) {
  105. list.add(CardListModel.fromJson(item));
  106. });
  107. newCardTypeList.value.addAll(list);
  108. Newlist.addAll(newCardTypeList.value);
  109. cardTypeList(Newlist);
  110. _count = cardTypeList.value.length;
  111. });
  112. }
  113. void _handleTabChange(i) {
  114. index = i;
  115. if (index == 0) {
  116. Map<String, dynamic> paramss = {'pageNum': 1,'location':location};
  117. getNewData(paramss);
  118. } else {
  119. // final typeId = classId.value[index];
  120. print('typeId+$typeId');
  121. typeId=classId.value[index];
  122. print('typeId+$typeId');
  123. // Map<String, dynamic> params = {'pageNum': 1,'location':location,'typeId':typeId.toString()};
  124. params['typeId']=classId.value[index];
  125. getNewData(params);
  126. }
  127. }
  128. @override
  129. Widget build(BuildContext context) {
  130. return Scaffold(
  131. resizeToAvoidBottomInset: true,
  132. appBar: AppBar(
  133. centerTitle: true,
  134. backgroundColor: Colors.transparent,
  135. foregroundColor: const Color(0xFF333333),
  136. elevation: 0,
  137. toolbarHeight: 44.w,
  138. title: Text(
  139. '更多',
  140. style: TextStyle(
  141. color: const Color(0xFF333333),
  142. fontWeight: FontWeight.bold,
  143. fontSize: 17.sp,
  144. letterSpacing: 2),
  145. ),
  146. ),
  147. body: SafeArea(
  148. child: Container(
  149. alignment: Alignment.center,
  150. decoration: BoxDecoration(color: Colors.white),
  151. child: !hasTopLoad
  152. ? Column(
  153. children: [
  154. ListView(
  155. shrinkWrap: true,
  156. physics: NeverScrollableScrollPhysics(),
  157. children: [
  158. Container(
  159. padding: EdgeInsets.fromLTRB(0, 15, 0, 15),
  160. width: 350.w,
  161. child: TypeHeader(
  162. type: false,
  163. ),
  164. ),
  165. Obx(() => TabBar(
  166. labelStyle: TextStyle(
  167. fontSize: ScreenUtil().setSp(19),
  168. fontWeight: FontWeight.bold),
  169. //选中的样式
  170. unselectedLabelStyle:
  171. TextStyle(fontSize: ScreenUtil().setSp(16)),
  172. //未选中的样式
  173. controller: _controller,
  174. isScrollable: true,
  175. //可滚动
  176. indicatorColor: Colors.black,
  177. //指示器的颜色
  178. labelColor: Colors.black,
  179. //选中文字颜色
  180. unselectedLabelColor: Color(0xffadadad),
  181. // indicatorSize: TabBarIndicatorSize.label, //指示器与文字等宽
  182. tabs: tabText.value
  183. .map((e) => Tab(text: e.name.toString()))
  184. .toList(),
  185. onTap: (int i) {
  186. _handleTabChange(i);
  187. },
  188. )),
  189. ],
  190. ),
  191. Expanded(
  192. child: _buildListView(context),
  193. )
  194. ],
  195. )
  196. : Text('加载中...'),
  197. )));
  198. }
  199. Widget _buildListView(BuildContext context) {
  200. return EasyRefresh(
  201. controller: _controllerList,
  202. firstRefresh: true,
  203. onRefresh: () async {
  204. await Future.delayed(Duration(seconds: 1), () {
  205. print("下拉刷新-----");
  206. // Map<String, dynamic> params = {'pageNum': pageIndex,'location':AppController.t.locationStr,'q':value};
  207. getNewData(params);
  208. _controllerList.resetLoadState();
  209. });
  210. },
  211. onLoad: () async {
  212. await Future.delayed(Duration(seconds: 1), () {
  213. if (_count == maxSum) {
  214. Fluttertoast.showToast(msg: '暂无更多数据哦');
  215. } else {
  216. // Map<String, dynamic> params = {'pageNum': pageIndex,'location':AppController.t.locationStr,'q':value};
  217. getMoreData(params);
  218. }
  219. _controllerList.finishLoad(noMore: _count >= maxSum);
  220. });
  221. },
  222. child: Obx(
  223. () => cardTypeList.value.length > 0
  224. ?
  225. Column(
  226. mainAxisSize: MainAxisSize.min,
  227. children: cardTypeList.value
  228. .map((item) => CarsCard(item: item))
  229. .toList(),
  230. ): NullCard(text: '暂无农机信息!'),
  231. ),
  232. );
  233. }
  234. }