index.dart 5.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_screenutil/flutter_screenutil.dart';
  3. import 'package:flutter_easyloading/flutter_easyloading.dart';
  4. import 'package:get/get.dart';
  5. import 'package:farmer_client/pages/home/widgets/headers.dart';
  6. import 'package:farmer_client/widgets/CarsCard.dart';
  7. import 'package:farmer_client/widgets/RefreshMoreList.dart';
  8. import 'package:farmer_client/models/app.dart';
  9. import 'package:farmer_client/models/entities/CardListModel.dart';
  10. import 'package:farmer_client/models/entities/CardTypeModel.dart';
  11. import 'package:farmer_client/services/homeAPI.dart';
  12. class MoreCars extends StatefulWidget {
  13. const MoreCars({Key? key}) : super(key: key);
  14. @override
  15. State<MoreCars> createState() => _MoreCarsState();
  16. }
  17. class _MoreCarsState extends State<MoreCars> with TickerProviderStateMixin {
  18. late TabController _controller;
  19. String? location = AppController.t.locationStr;
  20. //农机分类列表
  21. final typeList = Rx<List<CardTypeModel>>([]);
  22. //顶部的tab栏是否加载完成标识位
  23. bool hasTopLoad = false;
  24. //当前选中项的下标
  25. int index = 0;
  26. //当前选中项的类型Id
  27. String typeId = '';
  28. //农机列表
  29. final machineryList = Rx<List<CardListModel>>([]);
  30. late int maxSum; //最多条数
  31. Function? Refresh;
  32. final params = Rx<Map<String, dynamic>>({
  33. 'pageNum': 1,
  34. 'location': AppController.t.locationStr ?? '112.087465,32.687507',
  35. 'typeId': ''
  36. });
  37. @override
  38. void initState() {
  39. super.initState();
  40. _controller = TabController(length: typeList.value.length, vsync: this);
  41. _geList();
  42. }
  43. //获取数据
  44. void _geList() {
  45. getMachineryType({'pageSize': 500}).then((value) {
  46. EasyLoading.show(status: '数据加载中...');
  47. final list = <CardTypeModel>[];
  48. List<CardTypeModel> newTabs = [
  49. CardTypeModel.fromJson({'name': '全部'})
  50. ];
  51. value['records'].forEach((item) {
  52. list.add(CardTypeModel.fromJson(item));
  53. });
  54. //将全部的选项的农机放到tab栏的第一位
  55. list.insertAll(0, newTabs);
  56. typeList(list);
  57. _controller = TabController(length: typeList.value.length, vsync: this);
  58. EasyLoading.dismiss();
  59. });
  60. }
  61. //切换农机类型
  62. void _handleTabChange(i) {
  63. index = i;
  64. Map<String, dynamic> map = {...params.value};
  65. map['pageNum'] = 1;
  66. if (index == 0) {
  67. typeId = '';
  68. } else {
  69. typeId = typeList.value[index].typeId.toString();
  70. }
  71. map['typeId'] = typeId;
  72. params(map);
  73. Refresh!();
  74. }
  75. List<CardListModel> GetList(value) {
  76. List<CardListModel> list = [];
  77. if (value != null)
  78. value.forEach((item) => {list.add(CardListModel.fromJson(item))});
  79. return list;
  80. }
  81. @override
  82. void dispose() {
  83. super.dispose();
  84. _controller.dispose();
  85. }
  86. @override
  87. Widget build(BuildContext context) {
  88. return Scaffold(
  89. resizeToAvoidBottomInset: true,
  90. appBar: AppBar(
  91. centerTitle: true,
  92. backgroundColor: Colors.transparent,
  93. foregroundColor: const Color(0xFF333333),
  94. elevation: 0,
  95. toolbarHeight: 44.w,
  96. title: Text(
  97. '更多',
  98. style: TextStyle(
  99. color: const Color(0xFF333333),
  100. fontWeight: FontWeight.bold,
  101. fontSize: 17.sp,
  102. letterSpacing: 2),
  103. ),
  104. ),
  105. body: SafeArea(
  106. child: Container(
  107. alignment: Alignment.center,
  108. decoration: const BoxDecoration(color: Colors.white),
  109. child: Column(
  110. children: [
  111. ListView(
  112. shrinkWrap: true,
  113. physics: const NeverScrollableScrollPhysics(),
  114. children: [
  115. Container(
  116. margin: EdgeInsets.all(15.w),
  117. child: TypeHeader(
  118. type: false,
  119. ),
  120. ),
  121. Obx(() => TabBar(
  122. labelStyle: TextStyle(
  123. fontSize: ScreenUtil().setSp(19),
  124. fontWeight: FontWeight.bold),
  125. //选中的样式
  126. unselectedLabelStyle:
  127. TextStyle(fontSize: ScreenUtil().setSp(16)),
  128. //未选中的样式
  129. controller: _controller,
  130. isScrollable: true,
  131. //可滚动
  132. indicatorColor: Colors.black,
  133. //指示器的颜色
  134. labelColor: Colors.black,
  135. //选中文字颜色
  136. unselectedLabelColor: Color(0xffadadad),
  137. // indicatorSize: TabBarIndicatorSize.label, //指示器与文字等宽
  138. tabs: typeList.value
  139. .map((e) => Tab(text: e.name.toString()))
  140. .toList(),
  141. onTap: (int i) {
  142. _handleTabChange(i);
  143. },
  144. )),
  145. ],
  146. ),
  147. Expanded(
  148. child: _buildListView(context),
  149. )
  150. ],
  151. ),
  152. ),
  153. ),
  154. );
  155. }
  156. Widget _buildListView(BuildContext context) {
  157. return RefreshMoreList(
  158. pPrams: params,
  159. cardText: '暂无农机',
  160. fetch: getMachinery,
  161. useState: (state) {
  162. machineryList(GetList(state));
  163. },
  164. builder: ({required BuildContext context, required Function toggle}) {
  165. Refresh = toggle;
  166. return Obx(
  167. () => Column(
  168. children: machineryList.value
  169. .map(
  170. (item) => CarsCard(item: item),
  171. )
  172. .toList(),
  173. ),
  174. );
  175. },
  176. );
  177. }
  178. }