Refresher.dart 1.7KB

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