page_one.dart 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import 'package:flutter/material.dart';
  2. import 'package:get/get.dart';
  3. import 'package:ftrecruiter/comm/constants/color_constants.dart';
  4. import 'package:ftrecruiter/comm/widget/alive/keep_alive_wrapper.dart';
  5. import 'package:ftrecruiter/comm/widget/my_refresh_list.dart';
  6. import 'package:ftrecruiter/local/theme/theme_config.dart';
  7. //Demo列表2,使用GetX和GetBuild的功能,但是不是StatefulWidget控件 左右切换无法保存页面状态
  8. class PageOne extends StatelessWidget {
  9. final controller = Get.put(PageOneController());
  10. Future _onRefresh() async {
  11. controller.setCurPage(1);
  12. controller.listData.clear();
  13. controller.loadData();
  14. }
  15. Future _loadMore() async {
  16. controller.setCurPage(controller.curPage++);
  17. await controller.loadData();
  18. }
  19. @override
  20. Widget build(BuildContext context) {
  21. return Container(
  22. width: double.infinity,
  23. height: double.infinity,
  24. color: ColorConstants.pageBg,
  25. child: GetBuilder<PageOneController>(
  26. builder: (controller) {
  27. return KeepAliveWrapper( //使用这样布局包裹一样可以保存页面状态
  28. child: MyRefreshListView(
  29. itemCount: controller.listData.length,
  30. hasMore: controller.curPage < 10,
  31. // onRefresh: _onRefresh, //不加就不带刷新布局
  32. loadMore: _loadMore,
  33. itemBuilder: (_, index) {
  34. return Container(
  35. margin: const EdgeInsets.only(top: 10.0),
  36. width: double.infinity,
  37. height: 100,
  38. color: Colors.grey,
  39. child: Row(
  40. children: [
  41. Text("我是列表Item:$index"),
  42. ],
  43. ),
  44. );
  45. },
  46. ),
  47. );
  48. }),
  49. );
  50. }
  51. }
  52. class PageOneController extends GetxController {
  53. List<String> listData = [];
  54. int curPage = 1;
  55. @override
  56. void onReady() {
  57. super.onReady();
  58. loadData();
  59. }
  60. void setCurPage(page) {
  61. curPage = page;
  62. update();
  63. }
  64. Future loadData() async {
  65. //模拟网络请求
  66. Future.delayed(const Duration(seconds: 2)).then((_) {
  67. //此为加载结束
  68. listData.addAll(List.generate(10, (index) => "123"));
  69. update();
  70. }).catchError((_) {
  71. //此为加载失败
  72. });
  73. }
  74. }