Przeglądaj źródła

add RefreshBuilder

张延森 3 lat temu
rodzic
commit
883de12444
2 zmienionych plików z 92 dodań i 0 usunięć
  1. 23
    0
      lib/models/entities/PagedResult.dart
  2. 69
    0
      lib/widgets/Refresher.dart

+ 23
- 0
lib/models/entities/PagedResult.dart Wyświetl plik

1
+
2
+class PagedResult {
3
+  num total;
4
+  num size;
5
+  num pages;
6
+  num current;
7
+  List<dynamic>? records;
8
+
9
+  PagedResult({
10
+    required this.total,
11
+    required this.size,
12
+    required this.pages,
13
+    required this.current,
14
+    this.records,
15
+  });
16
+
17
+  PagedResult.fromJson(Map<String, dynamic> json)
18
+    : total = json['total'],
19
+        size = json['size'],
20
+        pages = json['pages'],
21
+        current = json['current'],
22
+        records = json['records'];
23
+}

+ 69
- 0
lib/widgets/Refresher.dart Wyświetl plik

1
+
2
+import 'package:farmer_client/models/entities/PagedResult.dart';
3
+import 'package:flutter/material.dart';
4
+
5
+class RefreshBuilder extends StatefulWidget {
6
+  RefreshBuilder({
7
+    Key? key,
8
+    required this.builder,
9
+    required this.fetch,
10
+    required this.useState,
11
+    this.onError,
12
+  }): super(key: key);
13
+
14
+  Future Function(Map param) fetch;
15
+  Function({PagedResult state, void Function(VoidCallback) setState}) useState;
16
+  Function? onError;
17
+
18
+  Widget Function({
19
+    BuildContext context,
20
+    Widget Function(Widget) reactor,
21
+    Function toggle,
22
+    PagedResult Function() result,
23
+    List<dynamic> listData,
24
+  }) builder;
25
+
26
+  @override
27
+  State<StatefulWidget> createState() => _RefresherState();
28
+}
29
+
30
+class _RefresherState extends State<RefreshBuilder> {
31
+
32
+  PagedResult result = PagedResult(total: 0, size: 0, pages: 0, current: 0);
33
+  List<dynamic> listData = [];
34
+  void Function(void Function())? _subSetState;
35
+
36
+  @override
37
+  initState() {
38
+    super.initState();
39
+    fetchData();
40
+  }
41
+
42
+  Future fetchData() {
43
+    return Future.value(widget.fetch({ "pageNum": 1 }).then((res) {
44
+      final pagedResult = PagedResult.fromJson(res);
45
+      widget.useState(state: pagedResult, setState: setState);
46
+    }).catchError((err) {
47
+      print(err);
48
+      if (null != widget.onError) {
49
+        widget.onError!(err);
50
+      }
51
+    }));
52
+  }
53
+
54
+  toggle() {
55
+    fetchData();
56
+  }
57
+
58
+  @override
59
+  Widget build(BuildContext context) {
60
+    return RefreshIndicator(
61
+      triggerMode: RefreshIndicatorTriggerMode.onEdge,
62
+      onRefresh: fetchData,
63
+      child: widget.builder(
64
+          context: context,
65
+          toggle: toggle
66
+      ),
67
+    );
68
+  }
69
+}