Newki 1 year ago
parent
commit
5917c13f35

+ 39 - 8
lib/api/api_provider.dart

@@ -1,3 +1,5 @@
+import 'dart:io';
+
 import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
 import 'package:get/get.dart';
 import 'package:ftrecruiter/api/interceptors/auth_interceptor.dart';
@@ -22,20 +24,50 @@ class ApiProvider extends GetConnect {
     HttpMethod? method,
     Map<String, String>? headers,
     Map<String, dynamic>? query,
-    dynamic body,
+    Map<String, String>? paths,
     NetSuccessCallback<Map<String, dynamic>>? onSuccess,
     NetSuccessListCallback<List<dynamic>>? onSuccessList,
     NetErrorCallback? onError,
   }) async {
-    var req = method != null && method == HttpMethod.POST
-        ? post(url, body, headers: headers, query: query)
-        : get(url, headers: headers, query: query);
+    //封装参数
+    Future<Response> req;
+
+    if (method != null && method == HttpMethod.POST) {
+      var map = <String, dynamic>{};
+
+      if (query != null || paths != null) {
+        if (query != null) {
+          map.addAll(query);
+        }
+
+        if (paths != null) {
+          paths.forEach((key, value) {
+            final file = File(value);
+            map[key] = MultipartFile(
+              file.readAsBytesSync(),
+              filename: "file",
+            );
+          });
+        }
+      }
+
+      var form = FormData(map);
+
+      Log.d("Post请求FromData参数,fields:${form.fields.toString()}");
+      //以Post-Body的方式上传
+      req = post(url, form, headers: headers);
+    } else {
+      //以Get-Params的方式上传
+      req = get(url, headers: headers, query: query);
+    }
 
+    //开始真正请求
     final startTime = DateTime.now().millisecond;
     var result = await req;
     final endTime = DateTime.now().millisecond;
-    final duration = endTime - startTime;
+
     if (!AppConstant.inProduction) {
+      final duration = endTime - startTime;
       Log.d('网络请求耗时 $duration 毫秒, 响应内容 ${result.body}}');
     }
 
@@ -63,8 +95,6 @@ class ApiProvider extends GetConnect {
         if (onError != null) {
           onError(jsonMap['code'], jsonMap['message']);
         }
-        //吐司Api错误信息
-        SmartDialog.compatible.showToast("${jsonMap['message']}");
       }
     } else {
       //网络请求错误
@@ -73,7 +103,8 @@ class ApiProvider extends GetConnect {
         onError(result.statusCode, result.statusText);
       }
       //吐司网络请求错误
-      SmartDialog.compatible.showToast("Request Network Error :${result.statusCode}  ${result.statusText}");
+      SmartDialog.compatible
+          .showToast("Request Network Error :${result.statusCode}  ${result.statusText}");
     }
   }
 

+ 48 - 2
lib/api/api_repository.dart

@@ -1,5 +1,7 @@
 import 'package:ftrecruiter/api/api_provider.dart';
 import 'package:ftrecruiter/comm/constants/api_constants.dart';
+import 'package:ftrecruiter/entity/response/UserLogin.dart';
+import 'package:ftrecruiter/entity/response/hotel_login.dart';
 import 'package:ftrecruiter/entity/response/industry_data.dart';
 import 'package:ftrecruiter/entity/response/server_time.dart';
 import 'package:ftrecruiter/entity/response/user_profile.dart';
@@ -37,11 +39,13 @@ class ApiRepository {
   }
 
   //获取行业列表
-  void getIndustryList({NetSuccessListCallback<List<IndustryData?>>? success, NetErrorCallback? onError}) {
+  void getIndustryList(
+      {NetSuccessListCallback<List<IndustryData?>>? success, NetErrorCallback? onError}) {
     Map<String, String> headers = {};
     headers["Accept"] = "application/x.yyjobs-api.v1+json";
 
-    apiProvider.requestNetwork(ApiConstants.apiIndustryList, headers: headers, onSuccessList: (jsonList) {
+    apiProvider.requestNetwork(ApiConstants.apiIndustryList, headers: headers,
+        onSuccessList: (jsonList) {
       //获取List数据 需要转换一次
       var industryList = jsonList.map((value) {
         if (value is Map<String, dynamic>) {
@@ -55,4 +59,46 @@ class ApiRepository {
       }
     }, onError: onError);
   }
+
+  //用户登陆
+  void userLogin({NetSuccessCallback<UserLogin>? success, NetErrorCallback? onError}) {
+    Map<String, String> headers = {};
+    headers["Accept"] = "application/x.yyjobs-api.v1+json";
+
+    Map<String, String> params = {};
+    params["nric_no"] = "+8618571458165";
+    params["password"] = "12345678";
+    params["registration_id"] = "1234";
+
+    apiProvider.requestNetwork(ApiConstants.apiUserLogin,
+        method: HttpMethod.POST, headers: headers, query: params,
+        onSuccess: (json) {
+
+          var userLogin = UserLogin.fromJson(json);
+          if (success != null) {
+            success(userLogin);
+          }
+
+    }, onError: onError);
+  }
+
+  //酒店登陆
+  void hotelLogin({NetSuccessCallback<HotelLogin>? success, NetErrorCallback? onError}) {
+
+    Map<String, String> params = {};
+    params["auth_code"] = "DAP3VDG";
+    params["device_mac"] = "020000000000";
+
+    apiProvider.requestNetwork(ApiConstants.apiHotelLogin,
+        method: HttpMethod.POST, query: params,
+        onSuccess: (json) {
+
+          var userLogin = HotelLogin.fromJson(json);
+          if (success != null) {
+            success(userLogin);
+          }
+
+        }, onError: onError);
+  }
+
 }

+ 0 - 3
lib/api/interceptors/auth_interceptor.dart

@@ -17,8 +17,5 @@ FutureOr<Request> authInterceptor(request) async {
     request.headers['User-Agent'] = 'Mozilla/5.0';
   }
 
-  //默认添加Content-Type
-  request.headers["Content-Type"] = "application/x-www-form-urlencoded";
-
   return request;
 }

+ 7 - 0
lib/comm/constants/api_constants.dart

@@ -2,6 +2,7 @@
 class ApiConstants {
   //基础域名
   static const baseUrl = 'http://yyjobs-api-dev.guabean.com';
+  // static const baseUrl = 'http://smart-pass-dev.casualabour.com';
 
   //服务器时间
   static const apiServiceTime = "/index.php/api/employee/extra/time";
@@ -12,4 +13,10 @@ class ApiConstants {
   //行业列表
   static const apiIndustryList = "/index.php/api/employee/extra/industry";
 
+  //用户登陆
+  static const apiUserLogin = "/index.php/api/employee/auth/login";
+
+  //酒店登陆
+  static const apiHotelLogin = "/index.php/api/v1/device/login";
+
 }

+ 43 - 12
lib/comm/widget/my_button.dart

@@ -3,22 +3,40 @@ import 'package:get/get.dart';
 import 'package:ftrecruiter/comm/constants/color_constants.dart';
 import 'package:ftrecruiter/comm/utils/dark_theme_util.dart';
 
-/// 默认字号18,白字蓝底,高度48
+// ignore: slash_for_doc_comments
+/**
+
+    MyButton(
+    fontSize: 16,
+    textColor: Colors.black,
+    text: "My Button的封装按钮",
+    backgroundColor: ColorConstants.gray,
+    onPressed: () {
+    SmartDialog.compatible.showToast("MyButton的封装按钮");
+    },
+    radius: 15,
+    side: BorderSide(color: Colors.black,width: 1.0),
+    ),
+
+ */
 class MyButton extends StatelessWidget {
   const MyButton({
     Key? key,
+    required this.onPressed, //必选,点击回调
     this.text = '',
     this.fontSize = 16,
     this.textColor,
     this.disabledTextColor,
     this.backgroundColor,
     this.disabledBackgroundColor,
-    this.minHeight = 48.0,
-    this.minWidth = double.infinity,
-    this.padding = const EdgeInsets.symmetric(horizontal: 16.0),
-    this.radius = 5.0,
-    this.side = BorderSide.none,
-    required this.onPressed,
+    this.minHeight = 48.0, //最高高度,默认48
+    this.minWidth = double.infinity, //最小宽度,默认充满控件
+    this.padding = const EdgeInsets.symmetric(horizontal: 16.0), //内间距,默认是横向内间距
+    this.radius = 5.0, //圆角
+    this.enableOverlay = true, //是否支持水波纹效果,不过这个效果对比InkWell比较克制,推荐开启
+    this.elevation = 0.0, //是否支持阴影,设置Z轴高度
+    this.shadowColor = Colors.black, //阴影的颜色
+    this.side = BorderSide.none, //边框的设置
   }) : super(key: key);
 
   final String text;
@@ -33,6 +51,9 @@ class MyButton extends StatelessWidget {
   final EdgeInsetsGeometry padding;
   final double radius;
   final BorderSide side;
+  final bool enableOverlay;
+  final double elevation;
+  final Color? shadowColor;
 
   @override
   Widget build(BuildContext context) {
@@ -40,24 +61,31 @@ class MyButton extends StatelessWidget {
         onPressed: onPressed,
         style: ButtonStyle(
           // 文字颜色
+          //               MaterialStateProperty.all            //各种状态都是这个颜色
           foregroundColor: MaterialStateProperty.resolveWith(
+            //根据不同的状态展示不同的颜色
             (states) {
               if (states.contains(MaterialState.disabled)) {
-                return DarkThemeUtil.multiColors(disabledTextColor ?? Colors.grey, darkColor: Colors.grey);
+                return DarkThemeUtil.multiColors(disabledTextColor ?? Colors.grey,
+                    darkColor: Colors.grey);
               }
-              return DarkThemeUtil.multiColors(textColor ?? Colors.white,darkColor: Colors.white);
+              return DarkThemeUtil.multiColors(textColor ?? Colors.white, darkColor: Colors.white);
             },
           ),
           // 背景颜色
           backgroundColor: MaterialStateProperty.resolveWith((states) {
             if (states.contains(MaterialState.disabled)) {
-              return DarkThemeUtil.multiColors(disabledBackgroundColor ?? Colors.white,darkColor: Colors.lightBlue);
+              return DarkThemeUtil.multiColors(disabledBackgroundColor ?? Colors.white,
+                  darkColor: Colors.lightBlue);
             }
-            return DarkThemeUtil.multiColors(backgroundColor ?? Colors.white,darkColor: ColorConstants.appBlue);
+            return DarkThemeUtil.multiColors(backgroundColor ?? Colors.white,
+                darkColor: ColorConstants.appBlue);
           }),
           // 水波纹
           overlayColor: MaterialStateProperty.resolveWith((states) {
-            return DarkThemeUtil.multiColors(textColor ?? Colors.white).withOpacity(0.12);
+            return enableOverlay
+                ? DarkThemeUtil.multiColors(textColor ?? Colors.white).withOpacity(0.12)
+                : Colors.transparent;
           }),
           // 按钮最小大小
           minimumSize: (minWidth == null || minHeight == null)
@@ -70,6 +98,9 @@ class MyButton extends StatelessWidget {
             ),
           ),
           side: MaterialStateProperty.all<BorderSide>(side),
+          elevation: MaterialStateProperty.all<double>(elevation),
+          shadowColor: MaterialStateProperty.all<Color>(
+              DarkThemeUtil.multiColors(shadowColor ?? Colors.black, darkColor: Colors.white)),
         ),
         child: Text(
           text,

+ 15 - 15
lib/comm/widget/my_load_image.dart

@@ -4,20 +4,6 @@ import 'package:ftrecruiter/comm/utils/image_utils.dart';
 
 /// 图片加载(支持本地与网络图片)
 class MyLoadImage extends StatelessWidget {
-
-  final String image;
-  final double? width;
-  final double? height;
-  final BoxFit fit;
-  final String placeholderPath;
-  final int? cacheWidth;
-  final int? cacheHeight;
-  bool? isCircle = false;
-  double? borderWidth = 0;
-  Color? borderColor = Colors.transparent;
-  VoidCallback? onClick;
-  double? cornerRadius = 0;
-
   MyLoadImage(
     this.image, {
     Key? key,
@@ -42,10 +28,24 @@ class MyLoadImage extends StatelessWidget {
     onClick ??= () {};
   }
 
+  final String image;
+  final double? width;
+  final double? height;
+  final BoxFit fit;
+  final String placeholderPath;
+  final int? cacheWidth;
+  final int? cacheHeight;
+  bool? isCircle = false;
+  double? borderWidth = 0;
+  Color? borderColor = Colors.transparent;
+  VoidCallback? onClick;
+  double? cornerRadius = 0;
+
   @override
   Widget build(BuildContext context) {
     if (image.isEmpty || image.startsWith('http')) {
-      final Widget placeholder = MyAssetImage(placeholderPath, height: height, width: width, fit: fit);
+      final Widget placeholder =
+          MyAssetImage(placeholderPath, height: height, width: width, fit: fit);
 
       return Container(
           decoration: BoxDecoration(

+ 24 - 0
lib/entity/response/UserLogin.dart

@@ -0,0 +1,24 @@
+class UserLogin {
+  int? memberId;
+  String? token;
+  String? signature;
+  String? identifier;
+
+  UserLogin({this.memberId, this.token, this.signature, this.identifier});
+
+  UserLogin.fromJson(Map<String, dynamic> json) {
+    memberId = json['member_id'];
+    token = json['token'];
+    signature = json['signature'];
+    identifier = json['identifier'];
+  }
+
+  Map<String, dynamic> toJson() {
+    final Map<String, dynamic> data = new Map<String, dynamic>();
+    data['member_id'] = this.memberId;
+    data['token'] = this.token;
+    data['signature'] = this.signature;
+    data['identifier'] = this.identifier;
+    return data;
+  }
+}

+ 24 - 0
lib/entity/response/hotel_login.dart

@@ -0,0 +1,24 @@
+class HotelLogin {
+  String? token;
+  String? deviceName;
+  String? deviceNo;
+  String? actionCode;
+
+  HotelLogin({this.token, this.deviceName, this.deviceNo, this.actionCode});
+
+  HotelLogin.fromJson(Map<String, dynamic> json) {
+    token = json['token'];
+    deviceName = json['device_name'];
+    deviceNo = json['device_no'];
+    actionCode = json['action_code'];
+  }
+
+  Map<String, dynamic> toJson() {
+    final Map<String, dynamic> data = new Map<String, dynamic>();
+    data['token'] = this.token;
+    data['device_name'] = this.deviceName;
+    data['device_no'] = this.deviceNo;
+    data['action_code'] = this.actionCode;
+    return data;
+  }
+}

+ 1 - 1
lib/modules/splash/splash_controller.dart

@@ -17,6 +17,6 @@ class SplashController extends GetxController {
 
     //延时一秒钟进入登录页面
     await Future.delayed(const Duration(milliseconds: 1000));
-    Get.offNamed(RouterPath.AUTH_LOGIN);
+    Get.offNamed(RouterPath.DEMO);
   }
 }

+ 77 - 0
lib/modules/zdemo/DemoPage.dart

@@ -0,0 +1,77 @@
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
+import 'package:ftrecruiter/comm/constants/color_constants.dart';
+import 'package:ftrecruiter/comm/utils/dark_theme_util.dart';
+import 'package:ftrecruiter/comm/widget/common_widget.dart';
+import 'package:ftrecruiter/comm/widget/my_button.dart';
+import 'package:ftrecruiter/modules/zdemo/demo_controller.dart';
+import 'package:get/get.dart';
+
+class DemoPage extends StatelessWidget {
+   DemoPage({Key? key}) : super(key: key);
+
+  final controller = Get.put(DemoController(apiRepository: Get.find()));
+
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      backgroundColor: DarkThemeUtil.multiColors(ColorConstants.white),
+      appBar: CommonWidget.appBar(context, "Demo"),
+      body: Container(
+          width: double.infinity,
+          height: double.infinity,
+          child: ListView(
+            shrinkWrap: true,
+            padding: const EdgeInsets.symmetric(horizontal: 30.0),
+            children: [
+              CommonWidget.rowHeight(height: 15),
+
+              //第一个按钮
+              TextButton(
+                style: ButtonStyle(
+                  minimumSize: MaterialStateProperty.all<Size>(const Size(200, 45)), // 设置最小宽度和高度
+                  backgroundColor: MaterialStateProperty.all<Color>(Colors.redAccent),
+                ),
+                onPressed: () {
+                  SmartDialog.compatible.showToast("默认的原生按钮");
+                },
+                child: const Text(
+                  '默认的原生按钮',
+                  style: TextStyle(fontSize: 16, color: Colors.white),
+                ),
+              ),
+
+              CommonWidget.rowHeight(height: 15),
+
+              MyButton(
+                fontSize: 16,
+                textColor: Colors.black,
+                text: "My Button的封装按钮",
+                backgroundColor: ColorConstants.gray,
+                onPressed: () {
+                  SmartDialog.compatible.showToast("MyButton的封装按钮");
+                },
+                radius: 15,
+                enableOverlay: false,   //禁用水波纹
+                side: BorderSide(color: Colors.black,width: 1.0),
+              ),
+
+              CommonWidget.rowHeight(height: 15),
+
+              MyButton(
+                text: "自定义圆角按钮",
+                backgroundColor: DarkThemeUtil.multiColors(ColorConstants.dividerColor, darkColor: Colors.deepOrange),
+                radius: 20,
+                elevation: 5.0,
+                onPressed: () {
+
+                  controller.getServerTime();
+                },
+              ),
+
+            ],
+          )),
+    );
+  }
+}

+ 0 - 10
lib/modules/zdemo/demo_binding.dart

@@ -1,10 +0,0 @@
-import 'package:get/get.dart';
-
-import 'demo_controller.dart';
-
-class DemoBinding extends Bindings {
-  @override
-  void dependencies() {
-    Get.lazyPut(() => DemoController(apiRepository: Get.find()));
-  }
-}

+ 30 - 40
lib/modules/zdemo/demo_controller.dart

@@ -1,12 +1,10 @@
 import 'package:flustars/flustars.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
-import 'package:get/get.dart';
 import 'package:ftrecruiter/api/api_repository.dart';
 import 'package:ftrecruiter/comm/utils/log_utils.dart';
-import 'package:ftrecruiter/entity/response/industry_data.dart';
 import 'package:ftrecruiter/entity/response/server_time.dart';
-import 'package:ftrecruiter/entity/response/user_profile.dart';
+import 'package:get/get.dart';
 
 class DemoController extends GetxController with StateMixin<ServerTime> {
   DemoController({required this.apiRepository});
@@ -18,50 +16,42 @@ class DemoController extends GetxController with StateMixin<ServerTime> {
   //调用接口,获取服务器时间
   void getServerTime() {
     //获取服务器时间
-    apiRepository.getServerTime(success: (serverTime) {
-      Log.d("data:$serverTime");
-      change(serverTime, status: RxStatus.success());
-    }, onError: (code, msg) {
-      Log.d("data-error:$code $msg");
-      change(null, status: RxStatus.empty());
-    });
+    // apiRepository.getServerTime(success: (serverTime) {
+    //   Log.d("data:$serverTime");
+    //   change(serverTime, status: RxStatus.success());
+    // }, onError: (code, msg) {
+    //   Log.d("data-error:$code $msg");
+    //   change(null, status: RxStatus.empty());
+    // });
 
     //获取用户信息
-    apiRepository.getUserProfile(success: (userProfile) {
-      Log.d("user-profile-success - memberId:${userProfile.memberId}");
-      SmartDialog.compatible.showToast(
-          "get user profile success , memberId:${userProfile.memberId}");
-    }, onError: (code, msg) {
-      Log.d("user-profile-error:$code $msg");
-    });
+    // apiRepository.getUserProfile(success: (userProfile) {
+    //   Log.d("user-profile-success - memberId:${userProfile.memberId}");
+    //   SmartDialog.showToast(
+    //       "get user profile success , memberId:${userProfile.memberId}");
+    // }, onError: (code, msg) {
+    //   Log.d("user-profile-error:$code $msg");
+    // });
 
     //获取行业列表
-    apiRepository.getIndustryList(success: (list) {
-      Log.d("industry-success list length: ${list.length}");
+    // apiRepository.getIndustryList(success: (list) {
+    //   Log.d("industry-success list length: ${list.length}");
+    // }, onError: (code, msg) {
+    //   Log.d("industry-error:$code $msg");
+    // });
+
+    //测试Post请求,用户登陆
+    apiRepository.userLogin(success: (userLogin) {
+      SmartDialog.showToast("Token: ${userLogin.token}");
     }, onError: (code, msg) {
-      Log.d("industry-error:$code $msg");
-    });
-  }
-
-  //测试异步
-  void testFuture() async {
-    Log.d("start1- ${DateTime.now().millisecondsSinceEpoch}");
-
-    Future.delayed(const Duration(seconds: 3), () {
-      Log.d("start3- ${DateTime.now().millisecondsSinceEpoch}");
+      Log.d("用户登陆-error:$code $msg");
     });
 
-    Log.d("start2- ${DateTime.now().millisecondsSinceEpoch}");
-
-    String str = await Future.delayed(const Duration(seconds: 2), () {
-      return "I Love Flutter";
-    });
-
-    Log.d("start5- ${DateTime.now().millisecondsSinceEpoch}");
-    Log.d("start4- ${DateTime.now().millisecondsSinceEpoch} $str");
-
-  await Future.delayed(const Duration(seconds: 3));
-    Log.d("start6- ${DateTime.now().millisecondsSinceEpoch}");
+    // apiRepository.hotelLogin(success: (hotelLogin) {
+    //   SmartDialog.showToast("Token: ${hotelLogin.token}");
+    // }, onError: (code, msg) {
+    //   SmartDialog.showToast("酒店登陆-error:$code $msg");
+    // });
 
   }
 }

+ 0 - 77
lib/modules/zdemo/demo_load_page.dart

@@ -1,77 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:get/get.dart';
-import 'package:ftrecruiter/comm/utils/log_utils.dart';
-import 'package:ftrecruiter/comm/widget/load_state_layout.dart';
-import 'package:ftrecruiter/modules/zdemo/page_four.dart';
-import 'package:ftrecruiter/modules/zdemo/page_one.dart';
-import 'package:ftrecruiter/modules/zdemo/page_three.dart';
-import 'package:ftrecruiter/modules/zdemo/page_two.dart';
-
-class DemoLoadPage extends StatelessWidget {
-  final controller = Get.put(DemoLoadController());
-  final _pageController = PageController(initialPage: 0, keepPage: true);
-
-  @override
-  Widget build(BuildContext context) {
-    return Scaffold(
-        appBar: AppBar(
-          title: const Text("测试LoadStateLayout"),
-        ),
-        body: GetBuilder<DemoLoadController>(builder: (controller) {
-          //加载布局-封装Loading Error Empty Success状态切换
-          return LoadStateLayout(
-            state: controller._layoutState,
-            errorRetry: () {
-              controller.changeState(LoadState.State_Loading);
-              controller.loadData();
-            },
-            //加载成功的页面-试试ViewPager的滑动效果
-            successWidget: PageView(
-              controller: _pageController,
-              onPageChanged: (index) {
-                Log.d("cur index:$index");
-                // _pageController.jumpToPage(index);
-
-                _pageController.animateToPage(index,
-                    duration: const Duration(milliseconds: 16), //跳转的间隔时间
-                    curve: Curves.fastOutSlowIn);
-              },
-              children: [
-                PageOne(),
-                PageTwo(),
-                PageThree(),
-                PageFour(),
-              ],
-            ),
-          );
-        }));
-  }
-}
-
-class DemoLoadController extends GetxController {
-  LoadState _layoutState = LoadState.State_Loading;
-
-  void changeState(LoadState state) {
-    _layoutState = state;
-    update();
-  }
-
-  @override
-  void onReady() {
-    super.onReady();
-    loadData();
-  }
-
-  void loadData() {
-    //模拟网络请求
-    Future.delayed(const Duration(seconds: 2)).then((_) {
-      //此为加载结束
-      changeState(LoadState.State_Success);
-      // changeState(LoadState.State_Empty);
-      // changeState(LoadState.State_Error);
-    }).catchError((_) {
-      //此为加载失败
-      changeState(LoadState.State_Error);
-    });
-  }
-}

+ 0 - 270
lib/modules/zdemo/demo_page.dart

@@ -1,270 +0,0 @@
-import 'package:flustars/flustars.dart';
-import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
-import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
-import 'package:get/get.dart';
-import 'package:ftrecruiter/comm/constants/color_constants.dart';
-import 'package:ftrecruiter/comm/constants/sp_constant.dart';
-import 'package:ftrecruiter/comm/utils/log_utils.dart';
-import 'package:ftrecruiter/comm/widget/my_click_item.dart';
-import 'package:ftrecruiter/comm/widget/my_input_field.dart';
-import 'package:ftrecruiter/comm/widget/my_button.dart';
-import 'package:ftrecruiter/comm/widget/common_widget.dart';
-import 'package:ftrecruiter/comm/utils/dark_theme_util.dart';
-import 'package:ftrecruiter/comm/widget/my_load_image.dart';
-import 'package:ftrecruiter/comm/widget/my_text_view.dart';
-import 'package:ftrecruiter/modules/zdemo/demo_load_page.dart';
-import 'package:ftrecruiter/modules/zdemo/demo_scroll1.dart';
-import 'package:ftrecruiter/modules/zdemo/theme_page.dart';
-
-import 'demo_controller.dart';
-
-class DemoPage extends GetView<DemoController> {
-  @override
-  Widget build(BuildContext context) {
-    return Scaffold(
-      backgroundColor: DarkThemeUtil.multiColors(Colors.white),
-      appBar: CommonWidget.appBar(context, "Demo"),
-      body: Container(
-        width: double.infinity,
-        height: double.infinity,
-        child: ListView(
-          shrinkWrap: true,
-          padding: const EdgeInsets.symmetric(horizontal: 30.0),
-          children: [
-            const SizedBox(height: 20.0),
-            Row(
-              children: [
-                Text(
-                  'welcome'.tr,
-                  textAlign: TextAlign.left,
-                  softWrap: true,
-                  style: const TextStyle(fontSize: 20, color: Colors.black, decoration: TextDecoration.none),
-                ),
-              ],
-            ),
-            const SizedBox(height: 10.0),
-            Text(
-              'title'.tr,
-              textAlign: TextAlign.center,
-              style: TextStyle(
-                fontSize: 22,
-                decoration: TextDecoration.none,
-                color: Theme.of(context).textTheme.subtitle1!.color,
-              ),
-            ),
-            const SizedBox(height: 10.0),
-            Row(
-              //宽度不想充满屏幕,可以使用row包裹
-              children: [
-                ElevatedButton(
-                    child: const Text("Go To Demo Load Page"),
-                    onPressed: () {
-                      Get.to(() => DemoLoadPage());
-                    }),
-                const SizedBox(width: 15.0),
-                ElevatedButton(
-                    child: const Text("Go To Scroll Page"),
-                    onPressed: () {
-                      Get.to(() => DemoScroll1Page());
-                    })
-              ],
-            ),
-            CommonWidget.rowHeight(height: 10),
-            TextButton(
-              style: ButtonStyle(
-                minimumSize: MaterialStateProperty.all<Size>(Size(200, 45)), // 设置最小宽度和高度
-                backgroundColor: MaterialStateProperty.all<Color>(Colors.redAccent),
-              ),
-              onPressed: () {
-                //调用接口
-                controller.getServerTime();
-              },
-              child: const Text(
-                '网络请求获取数据',
-                style: TextStyle(fontSize: 16, color: Colors.white),
-              ),
-              // color: Colors.redAccent,
-              // textColor: Colors.white,
-              // disabledColor: Colors.black,
-              // disabledTextColor: Colors.black38,
-              // splashColor: Colors.white, //水波纹的颜色
-            ),
-            const SizedBox(height: 10.0),
-            controller.obx(
-              (state) => Text(
-                "time:${state?.timestamps}",
-                textAlign: TextAlign.center,
-                style: TextStyle(
-                  fontSize: 22,
-                  color: Theme.of(context).textTheme.subtitle1!.color,
-                ),
-              ),
-              onError: (err) => Text("onEmpty" + err.toString()),
-              onEmpty: const Text("onEmpty"),
-            ),
-            const SizedBox(height: 10.0),
-            DarkThemeUtil.multiImageColorFit("assets/images/splash_center_blue_logo.webp", 144, 112, darkColor: Colors.white),
-            const SizedBox(height: 10.0),
-            MyInputField(
-              controller: controller.registerEmailController,
-              keyboardType: TextInputType.text,
-              labelText: '',
-              placeholder: 'Enter Email Address',
-              validator: (value) {
-                if (value?.isEmpty ?? true) {
-                  return 'Email is required.';
-                }
-                return null;
-              },
-            ),
-            const SizedBox(height: 10.0),
-            MyClickItem(
-              title: '测试SP-存和取',
-              drawablePadding: 0,
-              onTap: () {
-                SpUtil.putString("username", "Sky24n");
-                SpUtil.putString(SPConstant.SP_KEY_TOKEN,
-                    "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC95eWpvYnMtYXBpLWRldi5ndWFiZWFuLmNvbVwvaW5kZXgucGhwXC9hcGlcL2VtcGxveWVlXC9hdXRoXC9sb2dpbiIsImlhdCI6MTY1MDQyMDQxMiwiZXhwIjoxNjg2NDIwNDEyLCJuYmYiOjE2NTA0MjA0MTIsImp0aSI6IjlWNmgyS29qQ1BJZ1NSa2MiLCJzdWIiOjI4OTQ3LCJwcnYiOiI4NjY1YWU5Nzc1Y2YyNmY2YjhlNDk2Zjg2ZmE1MzZkNjhkZDcxODE4In0.X2kXCz2HcBvVxBVTB-JQTou56pCh_t221WTZdVHpM5M");
-                String? userName = SpUtil.getString("username");
-                if (!TextUtil.isEmpty(userName)) {
-                  SmartDialog.compatible.showToast('username:$userName');
-                }
-              },
-              backgroundColor: ColorConstants.dividerColor,
-            ),
-            const SizedBox(height: 10.0),
-            TextButton(
-              child: const Text(
-                '测试吐司与Log',
-                style: TextStyle(fontSize: 16, color: Colors.white),
-              ),
-              onPressed: () {
-                SmartDialog.compatible.showToast('test toast');
-                Log.d("我是Lop数据 -ddd");
-                Log.e("我是Lop数据 -eee");
-                SmartDialog.compatible.showLoading();
-              },
-
-              style: ButtonStyle(
-                backgroundColor: MaterialStateProperty.all<Color>(Colors.redAccent), // 设置背景颜色为蓝色
-              ),
-              // color: Colors.redAccent,
-              // textColor: Colors.white,
-              // disabledColor: Colors.black,
-              // disabledTextColor: Colors.black38,
-              // splashColor: Colors.white, //水波纹的颜色
-            ),
-            const SizedBox(height: 10.0),
-            ElevatedButton(
-              // color: Colors.blue,
-              // highlightColor: Colors.blue[700],
-              // colorBrightness: Brightness.dark,
-              // splashColor: Colors.grey,
-              child: const Text("测试弹窗"),
-              // shape: RoundedRectangleBorder(
-              //     borderRadius: BorderRadius.circular(20.0)),
-              onPressed: () async {
-                SmartDialog.compatible.showLoading(clickBgDismissTemp: true);
-                SmartDialog.compatible.dismiss();
-
-              },
-
-              style: ButtonStyle(
-                backgroundColor: MaterialStateProperty.all<Color>(Colors.blue), // 设置背景色为蓝色
-                elevation: MaterialStateProperty.all<double>(10), // 设置阴影的程度
-                textStyle: MaterialStateProperty.all<TextStyle>(TextStyle(fontSize: 20)), // 设置文本的样式
-                padding:
-                    MaterialStateProperty.all<EdgeInsets>(EdgeInsets.symmetric(horizontal: 16, vertical: 8)), // 设置内边距
-              ),
-            ),
-            const SizedBox(height: 10.0),
-            MyButton(
-              text: "切换主题-黑暗模式",
-              backgroundColor: Colors.lightBlue,
-              radius: 5,
-              onPressed: () {
-                SmartDialog.compatible.showToast("切换主题");
-                Get.to(() => const ThemePage());
-              },
-            ),
-            const SizedBox(height: 10.0),
-            MyTextView("自定义textview自定义textview自定义textview自定义textview自定义textview",
-                backgroundColor: Colors.red,
-                textColor: Colors.white,
-                padding: 10,
-                cornerRadius: 10,
-                borderColor: Colors.yellow,
-                borderWidth: 1,
-                marginTop: 5,
-                singleLine: false, onClick: () {
-              Log.d("点击事件");
-            }),
-            const SizedBox(height: 10.0),
-            MyButton(
-              text: "自定义圆角按钮",
-              backgroundColor: DarkThemeUtil.multiColors(ColorConstants.dividerColor, darkColor: Colors.deepOrange),
-              radius: 20,
-              onPressed: () {},
-            ),
-            const SizedBox(height: 10.0),
-            MyTextView("简单的TextView显示", textColor: Colors.black, singleLine: false),
-            const SizedBox(height: 10.0),
-            MyTextView(
-              "Test Font Family Font Size",
-              fontSize: 18,
-              textColor: Colors.black,
-              singleLine: false,
-              isFonTimeNew: true,
-            ),
-            const SizedBox(height: 10.0),
-            MyLoadImage(
-              'https://i04piccdn.sogoucdn.com/a35bde4b5756167a',
-              width: 340,
-              height: 191,
-              cornerRadius: 15,
-              borderColor: Colors.red,
-              borderWidth: 1,
-            ),
-            const SizedBox(height: 10.0),
-            Row(
-              //如果不包裹容器,默认宽度会充满全屏的
-              children: [
-                MyLoadImage(
-                  'https://i04piccdn.sogoucdn.com/a35bde4b5756167a',
-                  width: 100,
-                  height: 100,
-                  isCircle: true,
-                  onClick: () {
-
-                    SmartDialog.compatible.show(
-                        widget: Container(
-                          height: 80,
-                          width: 180,
-                          decoration: BoxDecoration(
-                            color: Colors.black,
-                            borderRadius: BorderRadius.circular(10),
-                          ),
-                          alignment: Alignment.center,
-                          child: Text(
-                            'easy custom dialog',
-                            style: TextStyle(color: Colors.white),
-                          ),
-                        ));
-
-                  },
-                ),
-              ],
-            ),
-            const SizedBox(height: 10),
-            ElevatedButton(
-                child: const Text("Test Future"),
-                onPressed: () {
-                  controller.testFuture();
-                }),
-          ],
-        ),
-      ),
-    );
-  }
-}

+ 0 - 156
lib/modules/zdemo/demo_scroll1.dart

@@ -1,156 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:get/get.dart';
-import 'package:ftrecruiter/comm/utils/log_utils.dart';
-import 'package:ftrecruiter/comm/widget/load_state_layout.dart';
-import 'package:ftrecruiter/comm/widget/my_load_image.dart';
-import 'package:ftrecruiter/modules/zdemo/page_four.dart';
-import 'package:ftrecruiter/modules/zdemo/page_one.dart';
-import 'package:ftrecruiter/modules/zdemo/page_three.dart';
-import 'package:ftrecruiter/modules/zdemo/page_two.dart';
-
-class DemoScroll1Page extends StatelessWidget {
-  const DemoScroll1Page({Key? key}) : super(key: key);
-
-  @override
-  Widget build(BuildContext context) {
-    final _tabs = <String>['猜你喜欢', '今日特价', '发现更多'];
-    // 构建 tabBar
-    return DefaultTabController(
-      length: _tabs.length, // This is the number of tabs.
-      child: Scaffold(
-        body: NestedScrollView(
-          headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
-            return <Widget>[
-              SliverOverlapAbsorber(
-                handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
-                sliver: SliverAppBar(
-                  title: const Text('商城'),
-                  floating: false,
-                  snap: false,
-                  elevation: 0.0,
-                  forceElevated: innerBoxIsScrolled,
-                  pinned: true,
-                ),
-              ),
-               SliverToBoxAdapter(
-                child: Container(
-                  alignment: Alignment.center,
-                  width: double.infinity,
-                  height: 191,
-                  child: MyLoadImage("https://i04piccdn.sogoucdn.com/a35bde4b5756167a",width: 340, height: 191),
-                ),
-              ),
-              SliverPersistentHeader(
-                pinned: true,  // 固定在顶部
-                delegate: SliverHeaderDelegate.fixedHeight( //固定高度
-                  height: 50,
-                  child: Container(
-                    color: Colors.pink,
-                    child: TabBar(
-                      tabs: _tabs.map((String name) => Tab(text: name)).toList(),
-                    ),
-                  ),
-                ),
-              ),
-            ];
-          },
-          body: TabBarView(
-            children: _tabs.map((String name) {
-              return Builder(
-                builder: (BuildContext context) {
-                  return CustomScrollView(
-                    key: PageStorageKey<String>(name),
-                    slivers: <Widget>[
-                      SliverOverlapInjector(
-                        handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
-                      ),
-                      SliverPadding(
-                        padding: const EdgeInsets.all(8.0),
-                        sliver: buildSliverList(50),
-                      ),
-                    ],
-                  );
-                },
-              );
-            }).toList(),
-          ),
-        ),
-      ),
-    );
-  }
-
-  // 构建固定高度的SliverList,count为列表项属相
-  Widget buildSliverList([int count = 5]) {
-    return SliverFixedExtentList(
-      itemExtent: 50,
-      delegate: SliverChildBuilderDelegate(
-        (context, index) {
-          return ListTile(title: Text('$index'));
-        },
-        childCount: count,
-      ),
-    );
-  }
-}
-
-
-typedef SliverHeaderBuilder = Widget Function(
-    BuildContext context, double shrinkOffset, bool overlapsContent);
-class SliverHeaderDelegate extends SliverPersistentHeaderDelegate {
-  // child 为 header
-  SliverHeaderDelegate({
-    required this.maxHeight,
-    this.minHeight = 0,
-    required Widget child,
-  })  : builder = ((a, b, c) => child),
-        assert(minHeight <= maxHeight && minHeight >= 0);
-
-  //最大和最小高度相同
-  SliverHeaderDelegate.fixedHeight({
-    required double height,
-    required Widget child,
-  })  : builder = ((a, b, c) => child),
-        maxHeight = height,
-        minHeight = height;
-
-  //需要自定义builder时使用
-  SliverHeaderDelegate.builder({
-    required this.maxHeight,
-    this.minHeight = 0,
-    required this.builder,
-  });
-
-  final double maxHeight;
-  final double minHeight;
-  final SliverHeaderBuilder builder;
-
-  @override
-  Widget build(
-      BuildContext context,
-      double shrinkOffset,
-      bool overlapsContent,
-      ) {
-    Widget child = builder(context, shrinkOffset, overlapsContent);
-    //测试代码:如果在调试模式,且子组件设置了key,则打印日志
-    assert(() {
-      if (child.key != null) {
-        print('${child.key}: shrink: $shrinkOffset,overlaps:$overlapsContent');
-      }
-      return true;
-    }());
-    // 让 header 尽可能充满限制的空间;宽度为 Viewport 宽度,
-    // 高度随着用户滑动在[minHeight,maxHeight]之间变化。
-    return SizedBox.expand(child: child);
-  }
-
-  @override
-  double get maxExtent => maxHeight;
-
-  @override
-  double get minExtent => minHeight;
-
-  @override
-  bool shouldRebuild(SliverHeaderDelegate old) {
-    return old.maxExtent != maxExtent || old.minExtent != minExtent;
-  }
-}

+ 0 - 100
lib/modules/zdemo/list_item.dart

@@ -1,100 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:easy_refresh/src/painter/paths_painter.dart';
-
-/// List item.
-class ListItem extends StatelessWidget {
-  const ListItem({
-    Key? key,
-    required this.title,
-    this.subtitle,
-    this.leading,
-    this.icon,
-    this.iconPaths,
-    this.trailing,
-    this.onTap,
-    this.selected = false,
-    this.divider = false,
-  }) : super(key: key);
-
-  final String title;
-
-  final String? subtitle;
-
-  final Widget? leading;
-
-  final IconData? icon;
-
-  final List<String>? iconPaths;
-
-  final Widget? trailing;
-
-  final bool selected;
-
-  final VoidCallback? onTap;
-
-  final bool divider;
-
-  Widget? get _leading {
-    if (leading != null) {
-      return leading!;
-    }
-    if (icon != null) {
-      return Container(
-        height: 36,
-        width: 36,
-        decoration: BoxDecoration(
-          color: Colors.white,
-          borderRadius: const BorderRadius.all(Radius.circular(18)),
-        ),
-        alignment: Alignment.center,
-        child: Icon(
-          icon!,
-          color: Colors.white,
-        ),
-      );
-    }
-    if (iconPaths != null) {
-      return Container(
-        height: 36,
-        width: 36,
-        decoration: BoxDecoration(
-          color: Colors.white,
-          borderRadius: const BorderRadius.all(Radius.circular(18)),
-        ),
-        alignment: Alignment.center,
-        child: PathsPaint(
-          paths: iconPaths!,
-          colors: List.filled(
-              iconPaths!.length, Colors.white),
-          width: 24,
-        ),
-      );
-    }
-    return null;
-  }
-
-  @override
-  Widget build(BuildContext context) {
-    return Column(
-      children: [
-        ListTile(
-          title: Text(title),
-          subtitle: subtitle == null ? null : Text(subtitle!),
-          leading: _leading,
-          trailing: trailing,
-          selected: selected,
-          onTap: onTap,
-        ),
-        if (divider)
-          Padding(
-            padding: EdgeInsets.only(
-                left: leading == null && icon == null ? 16 : 72, right: 16),
-            child: const Divider(
-              thickness: 1,
-              height: 1,
-            ),
-          ),
-      ],
-    );
-  }
-}

+ 0 - 128
lib/modules/zdemo/page_four.dart

@@ -1,128 +0,0 @@
-import 'package:easy_refresh/easy_refresh.dart';
-import 'package:flutter/material.dart';
-import 'package:flutter/rendering.dart';
-import 'package:ftrecruiter/modules/zdemo/list_item.dart';
-
-//Demo列表3,使用StatefulWidget+GetBuilder的方式 可以保存状态了,推荐使用
-class PageFour extends StatefulWidget {
-  @override
-  State<StatefulWidget> createState() {
-    return _GoodsListPageState();
-  }
-}
-
-class _GoodsListPageState extends State<PageFour>
-    with AutomaticKeepAliveClientMixin<PageFour>, SingleTickerProviderStateMixin {
-  List<String> _list = List.generate(10, (index) => "1234");
-  int _page = 1;
-  final int _maxPage = 10;
-
-  //刷新控件控制器
-  final EasyRefreshController _controller = EasyRefreshController(
-    controlFinishRefresh: true,
-    controlFinishLoad: true,
-  );
-
-  Future _onRefresh() async {
-    // 设置两秒后关闭刷新,时间可以随便设置,根据项目需求,正常在请求成功后,也要关闭
-    await Future.delayed(const Duration(seconds: 2), () {
-      setState(() {
-        _page = 1;
-        _list = List.generate(10, (index) => "1234");
-
-        // 控制器关闭刷新功能
-        _controller.finishRefresh();
-        _controller.resetFooter();
-      });
-    });
-  }
-
-  Future _loadMore() async {
-    await Future.delayed(const Duration(seconds: 2), () {
-      setState(() {
-        _page++;
-        _list.addAll(List.generate(10, (i) => "4567"));
-
-        // 控制器关闭加载功能,还可以设置没有更多数据noMore
-        _controller.finishLoad(IndicatorResult.success);
-      });
-    });
-  }
-
-  @override
-  Widget build(BuildContext context) {
-    return EasyRefresh(
-      //创建的刷新控制器
-      controller: _controller,
-
-      //自定义刷新头
-      // header: MaterialHeader(),
-
-      // ClassicalHeader(
-      //   enableInfiniteRefresh: false,
-      //   float: false,
-      //   enableHapticFeedback: false,
-      //   refreshText: "pullToRefresh",
-      //   refreshReadyText: "releaseToRefresh",
-      //   refreshingText: "refreshing",
-      //   refreshedText: "refreshed",
-      //   refreshFailedText: "refreshFailed",
-      //   noMoreText: "noMore",
-      //   infoText: "updateAt %T",
-      // ),
-
-      //自定义刷新脚
-      // footer: MaterialFooter(),
-
-      // ClassicalFooter(
-      //   enableInfiniteLoad: true,
-      //   enableHapticFeedback: false,
-      //   loadText: "pushToLoad",
-      //   loadReadyText: "releaseToLoad",
-      //   loadingText: "loading",
-      //   loadedText: "loaded",
-      //   loadFailedText: "loadFailed",
-      //   noMoreText: "noMore",
-      //   infoText: "updateAt %T",
-      // ),
-      // CustomFootView(),
-
-      onRefresh: _onRefresh,
-      onLoad: _loadMore,
-
-      // childBuilder: (BuildContext context, ScrollPhysics physics) {
-      //   return NestedScrollView(
-      //       physics: physics,
-      //       headerSliverBuilder: (context, innerBoxIsScrolled) {
-      //         return [
-      //           const HeaderLocator.sliver(clearExtent: false),
-      //         ];
-      //       },
-      //       body: ListView.builder(
-      //
-      //         itemBuilder: (BuildContext context, int index) {
-      //           //Item布局
-      //           return ListTile(title: Text("$index"));
-      //         },
-      //       ));
-      // },
-
-      child: CustomScrollView(
-        slivers: [
-          SliverFixedExtentList( //或者直接用Sliver也是可以的,只是一个固定Item高度,一个不固定高度而已
-            itemExtent: 100,
-            delegate: SliverChildBuilderDelegate(
-              (context, index) {
-                return const ListItem(title: "index");
-              },
-              childCount: _list.length,
-            ),
-          ),
-        ],
-      ),
-    );
-  }
-
-  @override
-  bool get wantKeepAlive => true;
-}

+ 0 - 82
lib/modules/zdemo/page_one.dart

@@ -1,82 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:get/get.dart';
-import 'package:ftrecruiter/comm/constants/color_constants.dart';
-import 'package:ftrecruiter/comm/widget/alive/keep_alive_wrapper.dart';
-import 'package:ftrecruiter/comm/widget/my_refresh_list.dart';
-import 'package:ftrecruiter/local/theme/theme_config.dart';
-
-//Demo列表2,使用GetX和GetBuild的功能,但是不是StatefulWidget控件 左右切换无法保存页面状态
-class PageOne extends StatelessWidget {
-  final controller = Get.put(PageOneController());
-
-  Future _onRefresh() async {
-    controller.setCurPage(1);
-    controller.listData.clear();
-    controller.loadData();
-  }
-
-  Future _loadMore() async {
-    controller.setCurPage(controller.curPage++);
-    await controller.loadData();
-  }
-
-  @override
-  Widget build(BuildContext context) {
-    return Container(
-      width: double.infinity,
-      height: double.infinity,
-      color: ColorConstants.pageBg,
-      child: GetBuilder<PageOneController>(
-        builder: (controller) {
-          return KeepAliveWrapper(   //使用这样布局包裹一样可以保存页面状态
-            child: MyRefreshListView(
-              itemCount: controller.listData.length,
-              hasMore: controller.curPage < 10,
-              // onRefresh: _onRefresh,  //不加就不带刷新布局
-              loadMore: _loadMore,
-              itemBuilder: (_, index) {
-                return Container(
-                  margin: const EdgeInsets.only(top: 10.0),
-                  width: double.infinity,
-                  height: 100,
-                  color: Colors.grey,
-                  child: Row(
-                    children: [
-                      Text("我是列表Item:$index"),
-                    ],
-                  ),
-                );
-              },
-            ),
-          );
-        }),
-    );
-  }
-}
-
-class PageOneController extends GetxController {
-  List<String> listData = [];
-  int curPage = 1;
-
-  @override
-  void onReady() {
-    super.onReady();
-    loadData();
-  }
-
-  void setCurPage(page) {
-    curPage = page;
-    update();
-  }
-
-  Future loadData() async {
-    //模拟网络请求
-    Future.delayed(const Duration(seconds: 2)).then((_) {
-      //此为加载结束
-      listData.addAll(List.generate(10, (index) => "123"));
-      update();
-    }).catchError((_) {
-      //此为加载失败
-    });
-  }
-}

+ 0 - 90
lib/modules/zdemo/page_three.dart

@@ -1,90 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:get/get.dart';
-import 'package:ftrecruiter/comm/widget/my_refresh_list.dart';
-import 'package:ftrecruiter/local/theme/theme_config.dart';
-
-//Demo列表3,使用StatefulWidget+GetBuilder的方式 可以保存状态了,推荐使用
-class PageThree extends StatefulWidget {
-  final controller = Get.put(PageThreeController());
-
-  @override
-  State<StatefulWidget> createState() {
-    return _GoodsListPageState();
-  }
-}
-
-class _GoodsListPageState extends State<PageThree>
-    with AutomaticKeepAliveClientMixin<PageThree>, SingleTickerProviderStateMixin {
-
-  final int _maxPage = 10;
-
-  final PageThreeController controller = Get.find<PageThreeController>();
-
-
-  Future _onRefresh() async {
-    controller.setCurPage(1);
-    controller.listData.clear();
-    controller.loadData();
-  }
-
-  Future _loadMore() async {
-    controller.setCurPage(controller.curPage++);
-    await controller.loadData();
-  }
-
-  @override
-  Widget build(BuildContext context) {
-    return GetBuilder<PageThreeController>(
-        builder: (controller) {
-          return MyRefreshListView(
-            itemCount: controller.listData.length,
-            hasMore: controller.curPage < _maxPage,
-            onRefresh: _onRefresh,
-            loadMore: _loadMore,
-            itemBuilder: (_, index) {
-              return Container(
-                margin: const EdgeInsets.only(top: 10.0),
-                width: double.infinity,
-                height: 100,
-                color: Colors.lightBlue,
-                child: Row(
-                  children: [
-                    Text("我是列表Item:$index"),
-                  ],
-                ),
-              );
-            },
-          );
-        });
-  }
-
-  @override
-  bool get wantKeepAlive => true;
-}
-
-class PageThreeController extends GetxController {
-  List<String> listData = [];
-  int curPage = 1;
-
-  @override
-  void onReady() {
-    super.onReady();
-    loadData();
-  }
-
-  void setCurPage(page) {
-    curPage = page;
-    update();
-  }
-
-  Future loadData() async {
-    //模拟网络请求
-    Future.delayed(const Duration(seconds: 2)).then((_) {
-      //此为加载结束
-      listData.addAll(List.generate(10, (index) => "123"));
-      update();
-    }).catchError((_) {
-      //此为加载失败
-    });
-  }
-}

+ 0 - 67
lib/modules/zdemo/page_two.dart

@@ -1,67 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:get/get.dart';
-import 'package:ftrecruiter/comm/widget/my_refresh_list.dart';
-import 'package:ftrecruiter/local/theme/theme_config.dart';
-
-//Demo列表2,单纯的使用StatefulWidget的方式 可以保存状态了,但是无法使用GetX和GetBuild的功能了
-class PageTwo extends StatefulWidget {
-  @override
-  _GoodsListPageState createState() => _GoodsListPageState();
-}
-
-class _GoodsListPageState extends State<PageTwo>
-    with AutomaticKeepAliveClientMixin<PageTwo>, SingleTickerProviderStateMixin {
-  List<String> _list = [];
-  int _page = 1;
-  final int _maxPage = 10;
-
-  Future _onRefresh() async {
-    await Future.delayed(const Duration(seconds: 2), () {
-      setState(() {
-        _page = 1;
-        _list = List.generate(10, (index) => "1234");
-      });
-    });
-  }
-
-  Future _loadMore() async {
-    await Future.delayed(const Duration(seconds: 2), () {
-      setState(() {
-        _list.addAll(List.generate(10, (i) => "4567"));
-        _page++;
-      });
-    });
-  }
-
-  @override
-  void initState() {
-    super.initState();
-    _onRefresh();
-  }
-
-  @override
-  Widget build(BuildContext context) {
-    return MyRefreshListView(
-      itemCount: _list.length,
-      hasMore: _page < _maxPage,
-      onRefresh: _onRefresh,
-      loadMore: _loadMore,
-      itemBuilder: (_, index) {
-        return Container(
-          margin: const EdgeInsets.only(top: 10.0),
-          width: double.infinity,
-          height: 100,
-          color: Colors.lightGreen,
-          child: Row(
-            children: [
-              Text("我是列表Item:$index"),
-            ],
-          ),
-        );
-      },
-    );
-  }
-
-  @override
-  bool get wantKeepAlive => true;
-}

+ 0 - 39
lib/modules/zdemo/theme_page.dart

@@ -1,39 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:get/get.dart';
-import 'package:ftrecruiter/local/theme/theme_config.dart';
-
-class ThemePage extends StatelessWidget {
-  const ThemePage({Key? key}) : super(key: key);
-
-  @override
-  Widget build(BuildContext context) {
-    return Scaffold(
-      appBar: AppBar(
-        title: Text("主题"),
-      ),
-      body: Center(
-        child: Column(
-          children: [
-            Container(
-              height: 100,
-              child: Align(
-                  alignment: Alignment.center,
-                  child: Text(
-                    "是否黑色主题 -> " + Get.isDarkMode.toString(),
-                    style: TextStyle(fontSize: 24),
-                  )),
-            ),
-            Divider(),
-            ListTile(
-              title: Text("切换主题"),
-              subtitle: Text('Get.changeTheme'),
-              onTap: () {
-                Get.changeTheme(Get.isDarkMode ? ThemeConfig.lightTheme : ThemeConfig.darkTheme);
-              },
-            ),
-          ],
-        ),
-      ),
-    );
-  }
-}

+ 1 - 3
lib/router/page_router.dart

@@ -6,8 +6,7 @@ import 'package:ftrecruiter/modules/auth/forgot_psd/forgot_psd_binding.dart';
 import 'package:ftrecruiter/modules/auth/forgot_psd/forgot_psd_page.dart';
 import 'package:ftrecruiter/modules/auth/login/login_binding.dart';
 import 'package:ftrecruiter/modules/auth/login/login_page.dart';
-import 'package:ftrecruiter/modules/zdemo/demo_binding.dart';
-import 'package:ftrecruiter/modules/zdemo/demo_page.dart';
+import 'package:ftrecruiter/modules/zdemo/DemoPage.dart';
 import 'package:get/get.dart';
 import 'package:ftrecruiter/modules/auth/choose/choose_binding.dart';
 import 'package:ftrecruiter/modules/auth/choose/choose_page.dart';
@@ -64,7 +63,6 @@ class PageRouter {
     GetPage(
       name: RouterPath.DEMO,
       page: () => DemoPage(),
-      binding: DemoBinding(),
     ),
   ];
 }