demo_load_page.dart 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import 'package:flutter/material.dart';
  2. import 'package:get/get.dart';
  3. import 'package:ftrecruiter/comm/utils/log_utils.dart';
  4. import 'package:ftrecruiter/comm/widget/load_state_layout.dart';
  5. import 'package:ftrecruiter/modules/zdemo/page_four.dart';
  6. import 'package:ftrecruiter/modules/zdemo/page_one.dart';
  7. import 'package:ftrecruiter/modules/zdemo/page_three.dart';
  8. import 'package:ftrecruiter/modules/zdemo/page_two.dart';
  9. class DemoLoadPage extends StatelessWidget {
  10. final controller = Get.put(DemoLoadController());
  11. final _pageController = PageController(initialPage: 0, keepPage: true);
  12. @override
  13. Widget build(BuildContext context) {
  14. return Scaffold(
  15. appBar: AppBar(
  16. title: const Text("测试LoadStateLayout"),
  17. ),
  18. body: GetBuilder<DemoLoadController>(builder: (controller) {
  19. //加载布局-封装Loading Error Empty Success状态切换
  20. return LoadStateLayout(
  21. state: controller._layoutState,
  22. errorRetry: () {
  23. controller.changeState(LoadState.State_Loading);
  24. controller.loadData();
  25. },
  26. //加载成功的页面-试试ViewPager的滑动效果
  27. successWidget: PageView(
  28. controller: _pageController,
  29. onPageChanged: (index) {
  30. Log.d("cur index:$index");
  31. // _pageController.jumpToPage(index);
  32. _pageController.animateToPage(index,
  33. duration: const Duration(milliseconds: 16), //跳转的间隔时间
  34. curve: Curves.fastOutSlowIn);
  35. },
  36. children: [
  37. PageOne(),
  38. PageTwo(),
  39. PageThree(),
  40. PageFour(),
  41. ],
  42. ),
  43. );
  44. }));
  45. }
  46. }
  47. class DemoLoadController extends GetxController {
  48. LoadState _layoutState = LoadState.State_Loading;
  49. void changeState(LoadState state) {
  50. _layoutState = state;
  51. update();
  52. }
  53. @override
  54. void onReady() {
  55. super.onReady();
  56. loadData();
  57. }
  58. void loadData() {
  59. //模拟网络请求
  60. Future.delayed(const Duration(seconds: 2)).then((_) {
  61. //此为加载结束
  62. changeState(LoadState.State_Success);
  63. // changeState(LoadState.State_Empty);
  64. // changeState(LoadState.State_Error);
  65. }).catchError((_) {
  66. //此为加载失败
  67. changeState(LoadState.State_Error);
  68. });
  69. }
  70. }