1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
-
- import 'package:farmer_client/models/entities/PagedResult.dart';
- import 'package:flutter/material.dart';
-
- class RefreshBuilder extends StatefulWidget {
- RefreshBuilder({
- Key? key,
- this.autoRerender = true,
- required this.builder,
- required this.fetch,
- required this.useState,
- this.onError,
- }): super(key: key);
-
- bool autoRerender;
- Future Function(Map param) fetch;
- Function({PagedResult state}) useState;
- Function? onError;
-
- Widget Function({
- BuildContext context,
- Function toggle,
- }) builder;
-
- @override
- State<StatefulWidget> createState() => _RefresherState();
- }
-
- class _RefresherState extends State<RefreshBuilder> {
-
- PagedResult result = PagedResult(total: 0, size: 0, pages: 0, current: 0);
- List<dynamic> listData = [];
-
- @override
- initState() {
- super.initState();
- fetchData();
- }
-
- Future fetchData() {
- return Future.value(widget.fetch({ "pageNum": 1 }).then((res) {
- final pagedResult = PagedResult.fromJson(res);
- widget.useState(state: pagedResult);
-
- if (widget.autoRerender) {
- setState(() {});
- }
- }).catchError((err) {
- print(err);
- if (null != widget.onError) {
- widget.onError!(err);
- }
- }));
- }
-
- toggle() {
- fetchData();
- }
-
- @override
- Widget build(BuildContext context) {
- return RefreshIndicator(
- triggerMode: RefreshIndicatorTriggerMode.onEdge,
- onRefresh: fetchData,
- child: widget.builder(
- context: context,
- toggle: toggle
- ),
- );
- }
- }
|