浏览代码

add ListesyeRefresh

[baozhangchao] 3 年前
父节点
当前提交
429f363ec0

+ 153
- 2
lib/pages/home/index.dart 查看文件

@@ -2,13 +2,76 @@ import 'package:farmer_client/widgets/Modal.dart' as modal;
2 2
 import 'package:farmer_client/widgets/layout/BasicPage.dart';
3 3
 import 'package:flutter/material.dart';
4 4
 import '../../utils/timer.dart';
5
-import './widgets/home/index.dart';
5
+import '../MoreCars/index.dart';
6
+import 'package:carousel_slider/carousel_slider.dart';
7
+import 'package:farmer_client/pages/home/widgets/home/widgets/headers.dart';
8
+import 'package:farmer_client/pages/home/widgets/home/widgets/searchBannerHeader.dart';
9
+import 'package:farmer_client/widgets/NullCard.dart';
10
+import 'package:flutter/material.dart';
11
+import 'package:flutter_easyloading/flutter_easyloading.dart';
12
+import 'package:flutter_easyrefresh/easy_refresh.dart';
13
+import 'package:flutter_screenutil/flutter_screenutil.dart';
14
+import 'package:fluttertoast/fluttertoast.dart';
15
+import 'package:get/get.dart';
16
+import '../../../../models/app.dart';
17
+import '../../../../models/entities/CardInfo.dart';
18
+import '../../../../models/entities/CardListModel.dart';
19
+import '../../../../services/homeAPI.dart';
20
+import '../../../../widgets/CarsCard.dart';
21
+import 'package:farmer_client/models/entities/Banners.dart';
6 22
 
7 23
 class Home extends BasicPage {
8 24
   Home({Key? key}) : super(key: key) {
9 25
     tabIndex = 0;
10 26
     naviTitle = '首页';
11 27
   }
28
+  EasyRefreshController _controller = EasyRefreshController();
29
+
30
+  String? location = AppController.t.locationStr;
31
+  final machineryLists = Rx<List<CardListModel>>([]);
32
+
33
+  final newMachineryLists = Rx<List<CardListModel>>([]);
34
+  var pageIndex = 1; //页数
35
+  var count = 10; //每页10条
36
+  late int maxSum; //最多条数
37
+  int _count = 0;
38
+  Map<String, dynamic> params = {'pageNum': 1,'location':AppController.t.locationStr ?? '112.087465,32.687507'};
39
+
40
+
41
+  void getNewData() {
42
+    pageIndex = 1;
43
+    params['pageNum'] = pageIndex;
44
+    print(params['pageNum']);
45
+    getMachinery(params).then((value) {
46
+      maxSum = value['total'];
47
+
48
+      List<CardListModel> list = [];
49
+      value['records'].forEach((item) {
50
+        list.add(CardListModel.fromJson(item));
51
+      });
52
+      machineryLists(list);
53
+      newMachineryLists(list);
54
+      _count = machineryLists.value.length;
55
+    });
56
+  }
57
+
58
+  void getMoreData() {
59
+    pageIndex++;
60
+    params['pageNum'] = pageIndex;
61
+    print(params['pageNum']);
62
+    getMachinery(params).then((value) {
63
+      maxSum = value['total'];
64
+      List<CardListModel> list = [];
65
+      List<CardListModel> Newlist = [];
66
+      value['records'].forEach((item) {
67
+        list.add(CardListModel.fromJson(item));
68
+      });
69
+      newMachineryLists.value.addAll(list);
70
+      Newlist.addAll(newMachineryLists.value);
71
+      machineryLists(Newlist);
72
+      _count = machineryLists.value.length;
73
+    });
74
+  }
12 75
 
13 76
   @override
14 77
   Widget builder(BuildContext context) {
@@ -20,6 +83,94 @@ class Home extends BasicPage {
20 83
       // modal.showDialog(title: '测试', content: SizedBox(width: 400, height: 300,), onConfirm: () => false);
21 84
     }, 2000);
22 85
 
23
-    return const HomePage();
86
+     return Container(
87
+      decoration: BoxDecoration(color: Colors.white),
88
+      alignment: Alignment.center,
89
+      padding: EdgeInsets.fromLTRB(15.w, 5.w, 15.w, 0),
90
+      child:Column(
91
+          children: [
92
+          searchBannerHeader(),
93
+            Row(
94
+              mainAxisAlignment: MainAxisAlignment.spaceBetween,
95
+              children: [
96
+                Container(
97
+                  padding: EdgeInsets.fromLTRB(10.w, 15.w, 10.w, 0),
98
+
99
+                  child: Row(
100
+                    children: [
101
+                      Padding(
102
+                        padding: EdgeInsets.fromLTRB(0, 0, 8, 0),
103
+                        child: Image(
104
+                          image:
105
+                          AssetImage('images/icons/carsListImga.png'),
106
+                          fit: BoxFit.cover,
107
+                          width: 20.w,
108
+                        ),
109
+                      ),
110
+                      Text(
111
+                        '农机列表',
112
+                        style: TextStyle(
113
+                            color: Color(0xff222222),
114
+                            fontSize: 20.sp,
115
+                            fontWeight: FontWeight.bold),
116
+                      )
117
+                    ],
118
+                  ),
119
+                ),
120
+                Container(
121
+                  child: GestureDetector(
122
+                    child: Text('更多 >>'),
123
+                    onTap: () {
124
+                      print('点我进入农机搜索/更多页');
125
+                      Get.to(MoreCars());
126
+                    },
127
+                  ),
128
+                )
129
+              ],
130
+            ),
131
+            Expanded(
132
+              child: (
133
+                  EasyRefresh(
134
+                    controller: _controller,
135
+                    firstRefresh: true,
136
+                    onRefresh: () async {
137
+                      await Future.delayed(Duration(seconds: 1), () {
138
+                        print("下拉刷新-----");
139
+                        getNewData();
140
+                        _controller.resetLoadState();
141
+                      });
142
+                    },
143
+                    onLoad: () async {
144
+                      await Future.delayed(Duration(seconds: 1), () {
145
+                        if (_count == maxSum) {
146
+                          Fluttertoast.showToast(msg: '暂无更多数据哦');
147
+                        } else {
148
+                          getMoreData();
149
+                        }
150
+                        _controller.finishLoad(noMore: _count >= maxSum);
151
+
152
+                      });
153
+                    },
154
+                    child: Obx(
155
+                          () => machineryLists.value.length > 0
156
+                          ?
157
+                      Column(
158
+                        mainAxisSize: MainAxisSize.min,
159
+                        children: machineryLists.value
160
+                            .map((item) => CarsCard(item: item))
161
+                            .toList(),
162
+                      ): NullCard(text: '暂无农机信息!'),
163
+                    ),
164
+                  )
165
+
166
+              ),
167
+            ),
168
+
169
+      ],
170
+    )
171
+
172
+
173
+    );
174
+
24 175
   }
25 176
 }

+ 0
- 147
lib/pages/home/widgets/home/index.dart 查看文件

@@ -1,147 +0,0 @@
1
-import 'package:carousel_slider/carousel_slider.dart';
2
-import 'package:farmer_client/pages/home/widgets/home/widgets/headers.dart';
3
-import 'package:farmer_client/widgets/NullCard.dart';
4
-import 'package:flutter/material.dart';
5
-import 'package:flutter_easyloading/flutter_easyloading.dart';
6
-import 'package:flutter_screenutil/flutter_screenutil.dart';
7
-import 'package:get/get.dart';
8
-import '../../../../models/app.dart';
9
-import '../../../../models/entities/CardInfo.dart';
10
-import '../../../../models/entities/CardListModel.dart';
11
-import '../../../../services/homeAPI.dart';
12
-import '../../../../widgets/CarsCard.dart';
13
-import 'package:farmer_client/models/entities/Banners.dart';
14
-import '../../../MoreCars/index.dart';
15
-
16
-class HomePage extends StatefulWidget {
17
-  const HomePage({
18
-    Key? key,
19
-  }) : super(key: key);
20
-
21
-  @override
22
-  _HomePageState createState() => _HomePageState();
23
-}
24
-
25
-class _HomePageState extends State<HomePage> {
26
-  final CarouselController _controller = CarouselController();
27
-  List<Banners> bannerList = [];
28
-  String? location = AppController.t.locationStr;
29
-
30
-  List<CardListModel> machineryLists = [];
31
-
32
-  @override
33
-  void initState() {
34
-    super.initState();
35
-    // final long=   location.value!['longitude'].toString() + "," + location.value!['latitude'].toString();
36
-    //  print('location+$location,lolongglongng+$long');
37
-    getHomeBanner('banner').then((value) {
38
-      EasyLoading.show(status: '数据加载中...');
39
-
40
-      setState(() {
41
-        value.forEach((item) {
42
-          bannerList.add(Banners.fromJson(item));
43
-        });
44
-      });
45
-      EasyLoading.dismiss();
46
-
47
-    });
48
-
49
-    getMachinery(location ?? '112.087465,32.687507').then((value) {
50
-      EasyLoading.show(status: '数据加载中...');
51
-
52
-      setState(() {
53
-        value['records'].forEach((item) {
54
-          machineryLists.add(CardListModel.fromJson(item));
55
-        });
56
-      });
57
-      EasyLoading.dismiss();
58
-
59
-    });
60
-  }
61
-
62
-  @override
63
-  Widget build(BuildContext context) {
64
-    return Container(
65
-      decoration: BoxDecoration(color: Colors.white),
66
-      alignment: Alignment.center,
67
-      padding: EdgeInsets.fromLTRB(15.w, 0, 15.w, 0),
68
-      child: ListView(
69
-        children: [
70
-          TypeHeader(
71
-            type: true,
72
-          ),
73
-          Container(
74
-            margin: EdgeInsets.fromLTRB(0, 15, 0, 0),
75
-            child: CarouselSlider(
76
-              items: bannerList
77
-                  .map((item) => Container(
78
-                        child: Center(
79
-                            child: Image.network(item.thumb.toString(),
80
-                                fit: BoxFit.cover, width: 350.w)),
81
-                      ))
82
-                  .toList(),
83
-              options: CarouselOptions(
84
-                autoPlay: true,
85
-                enlargeCenterPage: false, //图片中心放大
86
-                viewportFraction: 1, //每个页面应占据的视口部分。默认为 0.8,这意味着每个页面填充 80% 的轮播。
87
-                // aspectRatio: 1.6,//纵横比
88
-                height: 214.w,
89
-                initialPage: 1, //初始页
90
-              ),
91
-            ),
92
-          ),
93
-          Container(
94
-              margin: EdgeInsets.fromLTRB(0, 20, 0, 20),
95
-              child: Column(
96
-                children: [
97
-                  Row(
98
-                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
99
-                    children: [
100
-                      Container(
101
-
102
-                        child: Row(
103
-                          children: [
104
-                            Padding(
105
-                              padding: EdgeInsets.fromLTRB(0, 0, 8, 0),
106
-                              child: Image(
107
-                                image:
108
-                                    AssetImage('images/icons/carsListImga.png'),
109
-                                fit: BoxFit.cover,
110
-                                width: 20.w,
111
-                              ),
112
-                            ),
113
-                            Text(
114
-                              '农机列表',
115
-                              style: TextStyle(
116
-                                  color: Color(0xff222222),
117
-                                  fontSize: 20.sp,
118
-                                  fontWeight: FontWeight.bold),
119
-                            )
120
-                          ],
121
-                        ),
122
-                      ),
123
-                      Container(
124
-                        child: GestureDetector(
125
-                          child: Text('更多 >>'),
126
-                          onTap: () {
127
-                            print('点我进入农机搜索/更多页');
128
-                            Get.to(MoreCars());
129
-                          },
130
-                        ),
131
-                      )
132
-                    ],
133
-                  ),
134
-                  machineryLists.length >= 1
135
-                      ? Column(
136
-                          children: machineryLists
137
-                              .map((item) => CarsCard(item: item))
138
-                              .toList(),
139
-                        )
140
-                      : NullCard(text: '暂无农机信息!')
141
-                ],
142
-              )),
143
-        ],
144
-      ),
145
-    );
146
-  }
147
-}

+ 76
- 0
lib/pages/home/widgets/home/widgets/searchBannerHeader.dart 查看文件

@@ -0,0 +1,76 @@
1
+import 'package:carousel_slider/carousel_slider.dart';
2
+import 'package:flutter/material.dart';
3
+import 'package:flutter_easyloading/flutter_easyloading.dart';
4
+import 'package:flutter_screenutil/flutter_screenutil.dart';
5
+
6
+import '../../../../../models/entities/Banners.dart';
7
+import '../../../../../services/homeAPI.dart';
8
+import 'headers.dart';
9
+
10
+class searchBannerHeader extends StatefulWidget {
11
+  const searchBannerHeader({Key? key}) : super(key: key);
12
+
13
+  @override
14
+  State<searchBannerHeader> createState() => _searchBannerHeaderState();
15
+}
16
+
17
+
18
+class _searchBannerHeaderState extends State<searchBannerHeader> {
19
+  List<Banners> bannerList = [];
20
+
21
+
22
+
23
+  @override
24
+  void initState() {
25
+    super.initState();
26
+    // final long=   location.value!['longitude'].toString() + "," + location.value!['latitude'].toString();
27
+    //  print('location+$location,lolongglongng+$long');
28
+    getHomeBanner('banner').then((value) {
29
+      EasyLoading.show(status: '数据加载中...');
30
+
31
+      setState(() {
32
+        value.forEach((item) {
33
+          bannerList.add(Banners.fromJson(item));
34
+        });
35
+      });
36
+      EasyLoading.dismiss();
37
+    });
38
+
39
+
40
+  }
41
+  @override
42
+  Widget build(BuildContext context) {
43
+    return  Column(
44
+      children: [
45
+        TypeHeader(
46
+          type: true,
47
+        ),
48
+        Container(
49
+          margin: EdgeInsets.fromLTRB(0, 15, 0, 0),
50
+          child: CarouselSlider(
51
+            items: bannerList
52
+                .map((item) => Container(
53
+              child: Center(
54
+                  child: Image.network(
55
+                      item.thumb.toString(),
56
+                      fit: BoxFit.cover,
57
+                      width: 350.w)),
58
+            ))
59
+                .toList(),
60
+            options: CarouselOptions(
61
+              autoPlay: true,
62
+              enlargeCenterPage: false, //图片中心放大
63
+              viewportFraction:
64
+              1, //每个页面应占据的视口部分。默认为 0.8,这意味着每个页面填充 80% 的轮播。
65
+              // aspectRatio: 1.6,//纵横比
66
+              height: 214.w,
67
+              initialPage: 1, //初始页
68
+            ),
69
+          ),
70
+        ),
71
+
72
+      ],
73
+    );
74
+
75
+  }
76
+}

+ 2
- 4
lib/services/homeAPI.dart 查看文件

@@ -21,10 +21,8 @@ Future getHomeBanner(String position) async {
21 21
  * @param {*} data
22 22
  * @returns
23 23
  */
24
-Future getMachinery(String location) async {
25
-  return request('/machinery', options: Options(method: 'GET'), queryParameters: {
26
-    'location': location
27
-  }).catchError((error) => {
24
+Future getMachinery( params) async {
25
+  return request('/machinery', options: Options(method: 'GET'), queryParameters:params).catchError((error) => {
28 26
         Fluttertoast.showToast(msg: error.error['message']),
29 27
       });
30 28
 }