common_refresh_list_view.dart 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import 'package:easy_refresh/easy_refresh.dart';
  2. import 'package:flutter/material.dart';
  3. /// @author: bo.zeng
  4. /// @email: cnhbwds@gmail.com
  5. /// @date: 2025 2025/4/15 12:42
  6. /// @description:
  7. typedef RefreshCallback = Future<void> Function();
  8. typedef LoadMoreCallback = Future<void> Function();
  9. typedef ItemBuilder<T> =
  10. Widget Function(BuildContext context, T item, int index);
  11. class CommonListView<T> extends StatelessWidget {
  12. final List<T> items;
  13. final ItemBuilder<T> itemBuilder;
  14. final RefreshCallback? onRefresh;
  15. final LoadMoreCallback? onLoadMore;
  16. final bool hasMore;
  17. final Widget? emptyWidget;
  18. final EdgeInsetsGeometry? padding;
  19. const CommonListView({
  20. super.key,
  21. required this.items,
  22. required this.itemBuilder,
  23. this.onRefresh,
  24. this.onLoadMore,
  25. this.hasMore = true,
  26. this.emptyWidget,
  27. this.padding,
  28. });
  29. @override
  30. Widget build(BuildContext context) {
  31. return EasyRefresh.builder(
  32. onRefresh: onRefresh,
  33. onLoad: hasMore ? onLoadMore : null,
  34. childBuilder: (context, physics) {
  35. return items.isEmpty
  36. ? (emptyWidget ?? Center(child: Text('暂无数据')))
  37. : ListView.builder(
  38. padding: padding,
  39. physics: physics,
  40. itemCount: items.length,
  41. itemBuilder:
  42. (context, index) => itemBuilder(context, items[index], index),
  43. );
  44. },
  45. );
  46. }
  47. }