v1.0.1
This commit is contained in:
97
lib/widgets/page_list_view.dart
Normal file
97
lib/widgets/page_list_view.dart
Normal file
@@ -0,0 +1,97 @@
|
||||
import 'package:easy_refresh/easy_refresh.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_dmzj/app/controller/base_controller.dart';
|
||||
import 'package:flutter_dmzj/widgets/status/app_empty_widget.dart';
|
||||
import 'package:flutter_dmzj/widgets/status/app_error_widget.dart';
|
||||
import 'package:flutter_dmzj/widgets/status/app_loadding_widget.dart';
|
||||
|
||||
import 'package:get/get.dart';
|
||||
|
||||
typedef IndexedWidgetBuilder = Widget Function(BuildContext context, int index);
|
||||
|
||||
class PageListView extends StatelessWidget {
|
||||
final BasePageController pageController;
|
||||
final IndexedWidgetBuilder itemBuilder;
|
||||
final IndexedWidgetBuilder? separatorBuilder;
|
||||
final EdgeInsets? padding;
|
||||
final bool firstRefresh;
|
||||
final Function()? onLoginSuccess;
|
||||
final bool showPageLoadding;
|
||||
final bool loadMore;
|
||||
final Widget? header;
|
||||
const PageListView({
|
||||
required this.itemBuilder,
|
||||
required this.pageController,
|
||||
this.padding,
|
||||
this.firstRefresh = false,
|
||||
this.showPageLoadding = false,
|
||||
this.separatorBuilder,
|
||||
this.onLoginSuccess,
|
||||
this.loadMore = true,
|
||||
this.header,
|
||||
Key? key,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Obx(
|
||||
() => Stack(
|
||||
children: [
|
||||
EasyRefresh(
|
||||
header: const MaterialHeader(),
|
||||
footer: loadMore
|
||||
? const MaterialFooter(
|
||||
clamping: false, infiniteOffset: 70, triggerOffset: 70)
|
||||
: null,
|
||||
controller: pageController.easyRefreshController,
|
||||
refreshOnStart: firstRefresh,
|
||||
onLoad: loadMore ? pageController.loadData : null,
|
||||
onRefresh: pageController.refreshData,
|
||||
child: ListView.separated(
|
||||
padding: padding ?? EdgeInsets.zero,
|
||||
controller: pageController.scrollController,
|
||||
itemCount: header == null
|
||||
? pageController.list.length
|
||||
: pageController.list.length + 1,
|
||||
itemBuilder: header == null
|
||||
? itemBuilder
|
||||
: (context, index) {
|
||||
if (index == 0) {
|
||||
return header;
|
||||
}
|
||||
return itemBuilder.call(context, index - 1);
|
||||
},
|
||||
separatorBuilder: header == null
|
||||
? (separatorBuilder ?? (context, i) => const SizedBox())
|
||||
: (context, index) {
|
||||
if (index == 0) {
|
||||
return const SizedBox();
|
||||
}
|
||||
return separatorBuilder?.call(context, index - 1) ??
|
||||
const SizedBox();
|
||||
},
|
||||
),
|
||||
),
|
||||
Offstage(
|
||||
offstage: !pageController.pageEmpty.value,
|
||||
child: AppEmptyWidget(
|
||||
onRefresh: () => pageController.refreshData(),
|
||||
),
|
||||
),
|
||||
Offstage(
|
||||
offstage: !(showPageLoadding && pageController.pageLoadding.value),
|
||||
child: const AppLoaddingWidget(),
|
||||
),
|
||||
Offstage(
|
||||
offstage: !pageController.pageError.value,
|
||||
child: AppErrorWidget(
|
||||
errorMsg: pageController.errorMsg.value,
|
||||
error: pageController.error,
|
||||
onRefresh: () => pageController.refreshData(),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user