page_three.dart 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import 'package:flutter/material.dart';
  2. import 'package:get/get.dart';
  3. import 'package:ftrecruiter/comm/widget/my_refresh_list.dart';
  4. import 'package:ftrecruiter/local/theme/theme_config.dart';
  5. //Demo列表3,使用StatefulWidget+GetBuilder的方式 可以保存状态了,推荐使用
  6. class PageThree extends StatefulWidget {
  7. final controller = Get.put(PageThreeController());
  8. @override
  9. State<StatefulWidget> createState() {
  10. return _GoodsListPageState();
  11. }
  12. }
  13. class _GoodsListPageState extends State<PageThree>
  14. with AutomaticKeepAliveClientMixin<PageThree>, SingleTickerProviderStateMixin {
  15. final int _maxPage = 10;
  16. final PageThreeController controller = Get.find<PageThreeController>();
  17. Future _onRefresh() async {
  18. controller.setCurPage(1);
  19. controller.listData.clear();
  20. controller.loadData();
  21. }
  22. Future _loadMore() async {
  23. controller.setCurPage(controller.curPage++);
  24. await controller.loadData();
  25. }
  26. @override
  27. Widget build(BuildContext context) {
  28. return GetBuilder<PageThreeController>(
  29. builder: (controller) {
  30. return MyRefreshListView(
  31. itemCount: controller.listData.length,
  32. hasMore: controller.curPage < _maxPage,
  33. onRefresh: _onRefresh,
  34. loadMore: _loadMore,
  35. itemBuilder: (_, index) {
  36. return Container(
  37. margin: const EdgeInsets.only(top: 10.0),
  38. width: double.infinity,
  39. height: 100,
  40. color: Colors.lightBlue,
  41. child: Row(
  42. children: [
  43. Text("我是列表Item:$index"),
  44. ],
  45. ),
  46. );
  47. },
  48. );
  49. });
  50. }
  51. @override
  52. bool get wantKeepAlive => true;
  53. }
  54. class PageThreeController extends GetxController {
  55. List<String> listData = [];
  56. int curPage = 1;
  57. @override
  58. void onReady() {
  59. super.onReady();
  60. loadData();
  61. }
  62. void setCurPage(page) {
  63. curPage = page;
  64. update();
  65. }
  66. Future loadData() async {
  67. //模拟网络请求
  68. Future.delayed(const Duration(seconds: 2)).then((_) {
  69. //此为加载结束
  70. listData.addAll(List.generate(10, (index) => "123"));
  71. update();
  72. }).catchError((_) {
  73. //此为加载失败
  74. });
  75. }
  76. }