Переглянути джерело

[fit]修改会员页获取状态时机,修改扫描照片获取实际

云天逵 9 місяців тому
батько
коміт
0604ef584b

+ 12 - 0
lib/data/consts/constants.dart

@@ -44,6 +44,8 @@ class Constants {
 
   static const String isFirstIntoStore = 'isFirstIntoStore';
 
+  static const String isGoodsFree = 'isGoodsFree';
+
 }
 
 String getBaseUrl() {
@@ -83,6 +85,7 @@ void setFirstOpenPhotoPreview(bool firstTime) {
 bool isFirstIntro() {
   return KVUtil.getBool(Constants.isIntro, true);
 }
+
 void setFirstIntro(bool firstTime) {
   KVUtil.putBool(Constants.isIntro, firstTime);
 }
@@ -90,6 +93,7 @@ void setFirstIntro(bool firstTime) {
 bool isAgreePrivacyPolicy() {
   return KVUtil.getBool(Constants.isPolicyGranted, false);
 }
+
 void setPrivacyPolicy(bool isAgree) {
   KVUtil.putBool(Constants.isPolicyGranted, isAgree);
 }
@@ -98,6 +102,7 @@ void setPrivacyPolicy(bool isAgree) {
 bool isFirstClickHomeClean() {
   return KVUtil.getBool(Constants.isFirstClickHomeClean, true);
 }
+
 void setFirstClickHomeClean(bool isFirst) {
   KVUtil.putBool(Constants.isFirstClickHomeClean, isFirst);
 }
@@ -118,6 +123,13 @@ void setFirstIntoStore(bool isFirst) {
   KVUtil.putBool(Constants.isFirstIntoStore, isFirst);
 }
 
+bool isGoodsFree() {
+  return KVUtil.getBool(Constants.isGoodsFree, false);
+}
+
+void setGoodsFree(bool isFree) {
+  return KVUtil.putBool(Constants.isGoodsFree, isFree);
+}
 
 
 

+ 211 - 0
lib/handler/photo_scan_handler.dart

@@ -0,0 +1,211 @@
+import 'dart:io';
+
+import 'package:classify_photo/classify_photo.dart';
+import 'package:get/get.dart';
+import 'package:permission_handler/permission_handler.dart';
+import 'package:wechat_assets_picker/wechat_assets_picker.dart';
+
+import '../../module/image_picker/image_picker_util.dart';
+import '../utils/toast_util.dart';
+
+class PhotoScanHandler {
+  static final _photoClassify = ClassifyPhoto();
+
+  static RxBool isSimilarScanned = false.obs;
+  static RxBool isPeopleScanned = false.obs;
+  static RxBool isScreenShotScanned = false.obs;
+  static RxBool isBlurryScanned = false.obs;
+
+  // 人物图片
+  static RxList<AssetEntity> peoplePhotos = <AssetEntity>[].obs;
+
+  // 地点图片
+  static Rx<AssetEntity?> locationPhoto = Rx<AssetEntity?>(null);
+
+  // 截图照片
+  static Rx<AssetEntity?> screenshotPhoto = Rx<AssetEntity?>(null);
+
+  // 模糊照片
+  static Rx<AssetEntity?> blurryPhoto = Rx<AssetEntity?>(null);
+
+  // 相似照片
+  static RxList<AssetEntity> similarPhotos = <AssetEntity>[].obs;
+
+  /// 执行所有的照片处理操作
+  static Future<void> handleAllPhotos() async {
+    var request = Platform.isIOS
+        ? await Permission.photos.request()
+        : await Permission.storage.request();
+
+    if (request.isGranted) {
+      PhotoManager.clearFileCache();
+      await handleScreenPhotos();
+      await handleBlurryPhotos();
+      await handlePeoplePhotos();
+      await handleSimilarPhotos();
+      if (Platform.isAndroid) {
+        await handleAndroidPhotos();
+      }
+    } else if (request.isPermanentlyDenied) {
+      ToastUtil.show("Please enable the album permission");
+      openAppSettings();
+    } else {
+      ToastUtil.show("Please enable the album permission");
+
+      isSimilarScanned.value = false;
+      isPeopleScanned.value = false;
+      isBlurryScanned.value = false;
+      isScreenShotScanned.value = false;
+    }
+  }
+
+  /// 截图照片
+  static Future<bool> handleScreenPhotos() async {
+    try {
+      final photos = await _photoClassify.getScreenshots();
+      print('获取截图照片完成: ${photos?.length ?? 0} 组照片');
+      isScreenShotScanned.value = true;
+      if (photos != null) {
+        await ImagePickerUtil.updatePhotos(photos);
+        if (ImagePickerUtil.screenshotPhotos.isNotEmpty) {
+          var asset = ImagePickerUtil.screenshotPhotos.first;
+          screenshotPhoto.value = asset;
+        }
+      }
+    } catch (e, stackTrace) {
+      print('获取截图失败: $e\n$stackTrace');
+    }
+    isScreenShotScanned.value = true;
+    return true;
+  }
+
+  /// 模糊照片
+  static Future<bool> handleBlurryPhotos() async {
+    try {
+      final photos = await _photoClassify.getBlurryPhotos();
+      print('获取模糊照片完成: ${photos?.length ?? 0} 组照片');
+      isBlurryScanned.value = true;
+      if (photos != null) {
+        await ImagePickerUtil.updatePhotos(photos);
+        if (ImagePickerUtil.blurryPhotos.isNotEmpty) {
+          var asset = ImagePickerUtil.blurryPhotos.first;
+          blurryPhoto.value = asset;
+        }
+        return true;
+      }
+    } catch (e, stackTrace) {
+      print('获取模糊失败: $e\n$stackTrace');
+    }
+    isBlurryScanned.value = true;
+    return true;
+  }
+
+  /// 人物照片
+  static Future<bool> handlePeoplePhotos() async {
+    try {
+      final photos = await _photoClassify.getPeoplePhotos();
+      print('获取人物照片完成: ${photos?.length ?? 0} 组照片');
+      isPeopleScanned.value = true;
+      if (photos != null) {
+        await ImagePickerUtil.updatePhotos(photos);
+        // 处理人物照片
+        peoplePhotos.clear();
+        if (ImagePickerUtil.peoplePhotos.isNotEmpty) {
+          for (var personPhotos in ImagePickerUtil.peoplePhotos) {
+            peoplePhotos.add(personPhotos);
+            if (peoplePhotos.length == 2) {
+              break;
+            }
+          }
+        }
+        return true;
+      }
+    } catch (e, stackTrace) {
+      print('获取人物失败: $e\n$stackTrace');
+    }
+    isPeopleScanned.value = true;
+    return true;
+  }
+
+  /// 相似照片
+  static Future<bool> handleSimilarPhotos() async {
+    try {
+      print('开始获取相似照片');
+      final photos = await _photoClassify.getSimilarPhotos();
+      print('获取相似照片完成: ${photos?.length ?? 0} 组照片');
+      isSimilarScanned.value = true;
+      if (photos != null) {
+        await ImagePickerUtil.updatePhotos(photos);
+        similarPhotos.clear();
+        if (ImagePickerUtil.similarPhotos.isNotEmpty) {
+          for (var group in ImagePickerUtil.similarPhotos) {
+            for (var asset in group) {
+              similarPhotos.add(asset);
+              if (similarPhotos.length == 4) {
+                break;
+              }
+            }
+          }
+        }
+        return true;
+      }
+    } catch (e, stackTrace) {
+      print('获取相似失败: $e\n$stackTrace');
+    }
+    isSimilarScanned.value = true;
+    return true;
+  }
+
+  /// Android平台处理方式
+  static Future<void> handleAndroidPhotos() async {
+    final List<AssetEntity> result = await ImagePickerUtil.loadAssets();
+    ImagePickerUtil.peoplePhotos.value = result ?? [];
+    ImagePickerUtil.locationPhotos['location'] = result ?? [];
+    ImagePickerUtil.screenshotPhotos.value = result ?? [];
+    ImagePickerUtil.similarPhotos.add(result ?? []);
+    ImagePickerUtil.blurryPhotos.value = result ?? [];
+
+    print("handleAndroidPhotos $result");
+    print(
+        "ImagePickerUtil.peoplePhotos.value ${ImagePickerUtil.peoplePhotos.length}");
+
+    isSimilarScanned.value = true;
+    isPeopleScanned.value = true;
+    isBlurryScanned.value = true;
+    isScreenShotScanned.value = true;
+
+    similarPhotos.clear();
+    if (ImagePickerUtil.similarPhotos.isNotEmpty) {
+      for (var group in ImagePickerUtil.similarPhotos) {
+        print(
+            " ImagePickerUtil.similarPhotos ${ImagePickerUtil.similarPhotos.length}");
+        for (var asset in group) {
+          similarPhotos.add(asset);
+          if (similarPhotos.length == 4) {
+            break;
+          }
+        }
+      }
+    }
+
+    peoplePhotos.clear();
+    if (ImagePickerUtil.peoplePhotos.isNotEmpty) {
+      for (var personPhotos in ImagePickerUtil.peoplePhotos) {
+        peoplePhotos.add(personPhotos);
+        if (peoplePhotos.length == 2) {
+          break;
+        }
+      }
+    }
+
+    if (ImagePickerUtil.blurryPhotos.isNotEmpty) {
+      var asset = ImagePickerUtil.blurryPhotos.first;
+      blurryPhoto.value = asset;
+    }
+
+    if (ImagePickerUtil.screenshotPhotos.isNotEmpty) {
+      var asset = ImagePickerUtil.screenshotPhotos.first;
+      screenshotPhoto.value = asset;
+    }
+  }
+}

+ 172 - 248
lib/module/home/home_controller.dart

@@ -23,6 +23,7 @@ import '../../data/api/response/user_info_response.dart';
 import '../../data/consts/event_report_id.dart';
 import '../../data/repositories/config_repository.dart';
 import '../../handler/event_handler.dart';
+import '../../handler/photo_scan_handler.dart';
 import '../../widget/multi_segment_circle_indicator.dart';
 
 class HomeController extends BaseController {
@@ -51,31 +52,31 @@ class HomeController extends BaseController {
   RxInt imageCount = 0.obs;
 
   // 相似图片
-  RxList<AssetEntity> similarPhotos = <AssetEntity>[].obs;
+  RxList<AssetEntity> similarPhotos = PhotoScanHandler.similarPhotos;
 
   // 人物图片
-  RxList<AssetEntity> peoplePhotos = <AssetEntity>[].obs;
+  RxList<AssetEntity> peoplePhotos = PhotoScanHandler.peoplePhotos;
 
   // 地点图片
-  Rx<AssetEntity?> locationPhoto = Rx<AssetEntity?>(null);
+  Rx<AssetEntity?> locationPhoto = PhotoScanHandler.locationPhoto;
 
   // 截图照片
-  Rx<AssetEntity?> screenshotPhoto = Rx<AssetEntity?>(null);
+  Rx<AssetEntity?> screenshotPhoto = PhotoScanHandler.screenshotPhoto;
 
   // 模糊照片
-  Rx<AssetEntity?> blurryPhoto = Rx<AssetEntity?>(null);
+  Rx<AssetEntity?> blurryPhoto = PhotoScanHandler.blurryPhoto;
 
   // 是否扫描完成
-  RxBool isSimilarScanned = false.obs;
+  RxBool isSimilarScanned = PhotoScanHandler.isSimilarScanned;
 
   // 是否扫描完成
-  RxBool isPeopleScanned = false.obs;
+  RxBool isPeopleScanned = PhotoScanHandler.isPeopleScanned;
 
   // 是否扫描完成
-  RxBool isScreenShotScanned = false.obs;
+  RxBool isScreenShotScanned = PhotoScanHandler.isScreenShotScanned;
 
   // 是否扫描完成
-  RxBool isBlurryScanned = false.obs;
+  RxBool isBlurryScanned = PhotoScanHandler.isBlurryScanned;
 
   // 存储是否扫描完成
   RxBool isStorageScanned = false.obs;
@@ -95,7 +96,6 @@ class HomeController extends BaseController {
     super.onInit();
 
     if (Platform.isAndroid) {
-      await loadPhotosFromDirectory();
       // 延迟3秒
       Future.delayed(const Duration(seconds: 3), () {
         isStorageScanned.value = true;
@@ -103,22 +103,9 @@ class HomeController extends BaseController {
         usedSpace.value = 50.0;
         photoSpace.value = 30.0;
         freeSpace.value = 150.0;
-        isScreenShotScanned.value = true;
-        isBlurryScanned.value = true;
-        isPeopleScanned.value = true;
-        isSimilarScanned.value = true;
-        isStorageScanned.value = true;
       });
     }
 
-    // if (await Permission.photos.request().isGranted) {
-    //   PhotoManager.clearFileCache();
-    //   getStorageInfo();
-    //   handlePhotos();
-    // } else {
-    //   ToastUtil.show("Please enable the album permission");
-    // }
-
     configRepository.refreshConfig();
     await userRepository.getUserInfo();
 
@@ -143,20 +130,11 @@ class HomeController extends BaseController {
     }
     setFirstIntoApp(false);
 
-    if (Platform.isAndroid) {
-      loadPhotosFromDirectory();
-    }
-   var result= await Permission.photos.request();
-    if (result.isGranted) {
-      PhotoManager.clearFileCache();
-      getStorageInfo();
+    var status = await Permission.photos.status;
+    if (status.isGranted) {
 
-      // handlePhotos();
-      await handleScreenPhotos();
-      await handleBlurryPhotos();
-      await handlePeoplePhotos();
-      await handleSimilarPhotos();
-    } else if (result.isPermanentlyDenied) {
+      getStorageInfo();
+    } else if (status.isPermanentlyDenied) {
       ToastUtil.show("Please enable the album permission");
       openAppSettings();
     } else {
@@ -170,60 +148,6 @@ class HomeController extends BaseController {
     // EventHandler.report(EventId.event_03000);
   }
 
-  Future<void> loadPhotosFromDirectory() async {
-    if (ImagePickerUtil.peoplePhotos.isEmpty ||
-        ImagePickerUtil.similarPhotos.isEmpty ||
-        ImagePickerUtil.locationPhotos.isEmpty ||
-        ImagePickerUtil.screenshotPhotos.isEmpty) {
-      try {
-        final List<AssetEntity> result = await ImagePickerUtil.loadAssets();
-        ImagePickerUtil.peoplePhotos.value = result ?? [];
-        if (ImagePickerUtil.peoplePhotos.isNotEmpty) {
-          for (var personPhotos in ImagePickerUtil.peoplePhotos) {
-            peoplePhotos.add(personPhotos);
-            if (peoplePhotos.length == 2) {
-              break;
-            }
-          }
-        }
-        ImagePickerUtil.locationPhotos['location'] = result ?? [];
-        if (ImagePickerUtil.locationPhotos.isNotEmpty) {
-          // 获取第一个地点的第一张照片
-          final firstLocationPhotos =
-              ImagePickerUtil.locationPhotos.values.first;
-          if (firstLocationPhotos.isNotEmpty) {
-            var asset = firstLocationPhotos.first;
-            locationPhoto.value = asset;
-          }
-        }
-        ImagePickerUtil.screenshotPhotos.value = result ?? [];
-        if (ImagePickerUtil.screenshotPhotos.isNotEmpty) {
-          var asset = ImagePickerUtil.screenshotPhotos.first;
-          screenshotPhoto.value = asset;
-        }
-
-        ImagePickerUtil.similarPhotos.add(result ?? []);
-        if (ImagePickerUtil.similarPhotos.isNotEmpty) {
-          for (var group in ImagePickerUtil.similarPhotos) {
-            for (var asset in group) {
-              similarPhotos.add(asset);
-              if (similarPhotos.length == 4) {
-                break;
-              }
-            }
-          }
-        }
-        ImagePickerUtil.blurryPhotos.value = result ?? [];
-        if (ImagePickerUtil.blurryPhotos.isNotEmpty) {
-          var asset = ImagePickerUtil.blurryPhotos.first;
-          blurryPhoto.value = asset;
-        }
-      } catch (e) {
-        print('Error loading photos: $e');
-      }
-    }
-  }
-
   Future<void> getStorageInfo() async {
     final classifyPhoto = ClassifyPhoto();
 
@@ -264,164 +188,164 @@ class HomeController extends BaseController {
     }
   }
 
-  Future<void> handleScreenPhotos() async {
-    final photoClassify = ClassifyPhoto();
-    try {
-      print('开始获取截图照片');
-      final photos = await photoClassify.getScreenshots();
-      print('获取截图照片完成: ${photos?.length ?? 0} 组照片');
-      isScreenShotScanned.value = true;
-      if (photos != null) {
-        await ImagePickerUtil.updatePhotos(photos);
-        if (ImagePickerUtil.screenshotPhotos.isNotEmpty) {
-          var asset = ImagePickerUtil.screenshotPhotos.first;
-          screenshotPhoto.value = asset;
-        }
-      }
-    } catch (e, stackTrace) {
-      print('获取照片失败: $e');
-      print('Stack trace: $stackTrace');
-    }
-  }
-
-  Future<void> handleBlurryPhotos() async {
-    final photoClassify = ClassifyPhoto();
-    try {
-      print('开始获取模糊照片');
-      final photos = await photoClassify.getBlurryPhotos();
-      print('获取模糊照片完成: ${photos?.length ?? 0} 组照片');
-      isBlurryScanned.value = true;
-      if (photos != null) {
-        await ImagePickerUtil.updatePhotos(photos);
-        if (ImagePickerUtil.blurryPhotos.isNotEmpty) {
-          var asset = ImagePickerUtil.blurryPhotos.first;
-          blurryPhoto.value = asset;
-        }
-      }
-    } catch (e, stackTrace) {
-      print('获取照片失败: $e');
-      print('Stack trace: $stackTrace');
-    }
-  }
-
-  Future<void> handlePeoplePhotos() async {
-    final photoClassify = ClassifyPhoto();
-    try {
-      print('开始获取人物照片');
-      final photos = await photoClassify.getPeoplePhotos();
-      print('获取人物照片完成: ${photos?.length ?? 0} 组照片');
-      isPeopleScanned.value = true;
-      if (photos != null) {
-        await ImagePickerUtil.updatePhotos(photos);
-
-        // 处理人物照片
-        peoplePhotos.clear();
-        if (ImagePickerUtil.peoplePhotos.isNotEmpty) {
-          for (var personPhotos in ImagePickerUtil.peoplePhotos) {
-            peoplePhotos.add(personPhotos);
-            if (peoplePhotos.length == 2) {
-              break;
-            }
-          }
-        }
-      }
-    } catch (e, stackTrace) {
-      print('获取照片失败: $e');
-      print('Stack trace: $stackTrace');
-    }
-  }
-
-  Future<void> handleSimilarPhotos() async {
-    final photoClassify = ClassifyPhoto();
-    try {
-      print('开始获取相似照片');
-      final photos = await photoClassify.getSimilarPhotos();
-      print('获取相似照片完成: ${photos?.length ?? 0} 组照片');
-      isSimilarScanned.value = true;
-      if (photos != null) {
-        await ImagePickerUtil.updatePhotos(photos);
-
-        similarPhotos.clear();
-        if (ImagePickerUtil.similarPhotos.isNotEmpty) {
-          for (var group in ImagePickerUtil.similarPhotos) {
-            for (var asset in group) {
-              similarPhotos.add(asset);
-              if (similarPhotos.length == 4) {
-                break;
-              }
-            }
-          }
-        }
-      }
-    } catch (e, stackTrace) {
-      print('获取照片失败: $e');
-      print('Stack trace: $stackTrace');
-    }
-  }
-
-  Future<void> handlePhotos() async {
-    final photoClassify = ClassifyPhoto();
-    try {
-      print('开始获取照片');
-      final photos = await photoClassify.getPhoto();
-      print('获取照片完成: ${photos?.length ?? 0} 组照片');
-
-      // 已完成扫描
-      // isScanned.value = true;
-
-      if (photos != null) {
-        await ImagePickerUtil.updatePhotos(photos);
-
-        similarPhotos.clear();
-        if (ImagePickerUtil.similarPhotos.isNotEmpty) {
-          for (var group in ImagePickerUtil.similarPhotos) {
-            for (var asset in group) {
-              similarPhotos.add(asset);
-              if (similarPhotos.length == 4) {
-                break;
-              }
-            }
-          }
-        }
-
-        // 处理地点照片
-        locationPhoto.value = null;
-        if (ImagePickerUtil.locationPhotos.isNotEmpty) {
-          // 获取第一个地点的第一张照片
-          final firstLocationPhotos =
-              ImagePickerUtil.locationPhotos.values.first;
-          if (firstLocationPhotos.isNotEmpty) {
-            var asset = firstLocationPhotos.first;
-            locationPhoto.value = asset;
-          }
-        }
-
-        // 处理人物照片
-        peoplePhotos.clear();
-        if (ImagePickerUtil.peoplePhotos.isNotEmpty) {
-          for (var personPhotos in ImagePickerUtil.peoplePhotos) {
-            peoplePhotos.add(personPhotos);
-            if (peoplePhotos.length == 2) {
-              break;
-            }
-          }
-        }
-
-        if (ImagePickerUtil.screenshotPhotos.isNotEmpty) {
-          var asset = ImagePickerUtil.screenshotPhotos.first;
-          screenshotPhoto.value = asset;
-        }
-
-        if (ImagePickerUtil.blurryPhotos.isNotEmpty) {
-          var asset = ImagePickerUtil.blurryPhotos.first;
-          blurryPhoto.value = asset;
-        }
-      }
-    } catch (e, stackTrace) {
-      print('获取照片失败: $e');
-      print('Stack trace: $stackTrace');
-    }
-  }
+  // Future<void> handleScreenPhotos() async {
+  //   final photoClassify = ClassifyPhoto();
+  //   try {
+  //     print('开始获取截图照片');
+  //     final photos = await photoClassify.getScreenshots();
+  //     print('获取截图照片完成: ${photos?.length ?? 0} 组照片');
+  //     isScreenShotScanned.value = true;
+  //     if (photos != null) {
+  //       await ImagePickerUtil.updatePhotos(photos);
+  //       if (ImagePickerUtil.screenshotPhotos.isNotEmpty) {
+  //         var asset = ImagePickerUtil.screenshotPhotos.first;
+  //         screenshotPhoto.value = asset;
+  //       }
+  //     }
+  //   } catch (e, stackTrace) {
+  //     print('获取照片失败: $e');
+  //     print('Stack trace: $stackTrace');
+  //   }
+  // }
+  //
+  // Future<void> handleBlurryPhotos() async {
+  //   final photoClassify = ClassifyPhoto();
+  //   try {
+  //     print('开始获取模糊照片');
+  //     final photos = await photoClassify.getBlurryPhotos();
+  //     print('获取模糊照片完成: ${photos?.length ?? 0} 组照片');
+  //     isBlurryScanned.value = true;
+  //     if (photos != null) {
+  //       await ImagePickerUtil.updatePhotos(photos);
+  //       if (ImagePickerUtil.blurryPhotos.isNotEmpty) {
+  //         var asset = ImagePickerUtil.blurryPhotos.first;
+  //         blurryPhoto.value = asset;
+  //       }
+  //     }
+  //   } catch (e, stackTrace) {
+  //     print('获取照片失败: $e');
+  //     print('Stack trace: $stackTrace');
+  //   }
+  // }
+  //
+  // Future<void> handlePeoplePhotos() async {
+  //   final photoClassify = ClassifyPhoto();
+  //   try {
+  //     print('开始获取人物照片');
+  //     final photos = await photoClassify.getPeoplePhotos();
+  //     print('获取人物照片完成: ${photos?.length ?? 0} 组照片');
+  //     isPeopleScanned.value = true;
+  //     if (photos != null) {
+  //       await ImagePickerUtil.updatePhotos(photos);
+  //
+  //       // 处理人物照片
+  //       peoplePhotos.clear();
+  //       if (ImagePickerUtil.peoplePhotos.isNotEmpty) {
+  //         for (var personPhotos in ImagePickerUtil.peoplePhotos) {
+  //           peoplePhotos.add(personPhotos);
+  //           if (peoplePhotos.length == 2) {
+  //             break;
+  //           }
+  //         }
+  //       }
+  //     }
+  //   } catch (e, stackTrace) {
+  //     print('获取照片失败: $e');
+  //     print('Stack trace: $stackTrace');
+  //   }
+  // }
+  //
+  // Future<void> handleSimilarPhotos() async {
+  //   final photoClassify = ClassifyPhoto();
+  //   try {
+  //     print('开始获取相似照片');
+  //     final photos = await photoClassify.getSimilarPhotos();
+  //     print('获取相似照片完成: ${photos?.length ?? 0} 组照片');
+  //     isSimilarScanned.value = true;
+  //     if (photos != null) {
+  //       await ImagePickerUtil.updatePhotos(photos);
+  //
+  //       similarPhotos.clear();
+  //       if (ImagePickerUtil.similarPhotos.isNotEmpty) {
+  //         for (var group in ImagePickerUtil.similarPhotos) {
+  //           for (var asset in group) {
+  //             similarPhotos.add(asset);
+  //             if (similarPhotos.length == 4) {
+  //               break;
+  //             }
+  //           }
+  //         }
+  //       }
+  //     }
+  //   } catch (e, stackTrace) {
+  //     print('获取照片失败: $e');
+  //     print('Stack trace: $stackTrace');
+  //   }
+  // }
+
+  // Future<void> handlePhotos() async {
+  //   final photoClassify = ClassifyPhoto();
+  //   try {
+  //     print('开始获取照片');
+  //     final photos = await photoClassify.getPhoto();
+  //     print('获取照片完成: ${photos?.length ?? 0} 组照片');
+  //
+  //     // 已完成扫描
+  //     // isScanned.value = true;
+  //
+  //     if (photos != null) {
+  //       await ImagePickerUtil.updatePhotos(photos);
+  //
+  //       similarPhotos.clear();
+  //       if (ImagePickerUtil.similarPhotos.isNotEmpty) {
+  //         for (var group in ImagePickerUtil.similarPhotos) {
+  //           for (var asset in group) {
+  //             similarPhotos.add(asset);
+  //             if (similarPhotos.length == 4) {
+  //               break;
+  //             }
+  //           }
+  //         }
+  //       }
+  //
+  //       // 处理地点照片
+  //       locationPhoto.value = null;
+  //       if (ImagePickerUtil.locationPhotos.isNotEmpty) {
+  //         // 获取第一个地点的第一张照片
+  //         final firstLocationPhotos =
+  //             ImagePickerUtil.locationPhotos.values.first;
+  //         if (firstLocationPhotos.isNotEmpty) {
+  //           var asset = firstLocationPhotos.first;
+  //           locationPhoto.value = asset;
+  //         }
+  //       }
+  //
+  //       // 处理人物照片
+  //       peoplePhotos.clear();
+  //       if (ImagePickerUtil.peoplePhotos.isNotEmpty) {
+  //         for (var personPhotos in ImagePickerUtil.peoplePhotos) {
+  //           peoplePhotos.add(personPhotos);
+  //           if (peoplePhotos.length == 2) {
+  //             break;
+  //           }
+  //         }
+  //       }
+  //
+  //       if (ImagePickerUtil.screenshotPhotos.isNotEmpty) {
+  //         var asset = ImagePickerUtil.screenshotPhotos.first;
+  //         screenshotPhoto.value = asset;
+  //       }
+  //
+  //       if (ImagePickerUtil.blurryPhotos.isNotEmpty) {
+  //         var asset = ImagePickerUtil.blurryPhotos.first;
+  //         blurryPhoto.value = asset;
+  //       }
+  //     }
+  //   } catch (e, stackTrace) {
+  //     print('获取照片失败: $e');
+  //     print('Stack trace: $stackTrace');
+  //   }
+  // }
 
   void _navigateAndStartPage(Function pageStartFunction) {
     // if (isFirstClickHomeClean()) {

+ 2 - 0
lib/module/home/home_view.dart

@@ -379,6 +379,7 @@ class HomePage extends BaseView<HomeController> {
                 return Row(
                   mainAxisAlignment: MainAxisAlignment.spaceBetween,
                   children: List.generate(4, (index) {
+
                     if (!controller.isSimilarScanned.value) {
                       return ImageContainer(
                         size: 70.w,
@@ -399,6 +400,7 @@ class HomePage extends BaseView<HomeController> {
                     );
                     if (controller.isSimilarScanned.value &&
                         controller.similarPhotos.length > index) {
+
                       image = AssetEntityImage(
                           width: 70.w,
                           height: 70.w,

+ 25 - 30
lib/module/image_picker/image_picker_util.dart

@@ -14,6 +14,7 @@ import 'package:flutter/widgets.dart';
 import 'package:get/get.dart';
 import 'package:photo_manager/photo_manager.dart';
 
+import '../../handler/photo_scan_handler.dart';
 import '../calendar/calendar_state.dart';
 import '../home/home_controller.dart';
 
@@ -44,7 +45,7 @@ class ImagePickerUtil {
 
   // android测试
 
-  static late List<AssetEntity>  androidPhotos = <AssetEntity>[];
+  static late List<AssetEntity> androidPhotos = <AssetEntity>[];
 
   static final RxSet<String> selectedScreenshotPhotosIds = <String>{}.obs;
   static final RxSet<String> selectedSimilarPhotosIds = <String>{}.obs;
@@ -181,54 +182,54 @@ class ImagePickerUtil {
     selectedBlurryPhotosIds
         .removeWhere((element) => selectedPhotosIds.contains(element));
 
-    HomeController homeController = Get.find<HomeController>();
-    if (homeController.locationPhoto.value != null &&
-        selectedPhotosIds.contains(homeController.locationPhoto.value!.id)) {
-      homeController.locationPhoto.value = null;
+    if (PhotoScanHandler.locationPhoto.value != null &&
+        selectedPhotosIds.contains(PhotoScanHandler.locationPhoto.value!.id)) {
+      PhotoScanHandler.locationPhoto.value = null;
       if (locationPhotos.isNotEmpty) {
         var asset = locationPhotos.values.first.first;
-        homeController.locationPhoto.value = asset;
+        PhotoScanHandler.locationPhoto.value = asset;
       }
     }
-    if (homeController.screenshotPhoto.value != null &&
-        selectedPhotosIds.contains(homeController.screenshotPhoto.value!.id)) {
-      homeController.screenshotPhoto.value = null;
+    if (PhotoScanHandler.screenshotPhoto.value != null &&
+        selectedPhotosIds
+            .contains(PhotoScanHandler.screenshotPhoto.value!.id)) {
+      PhotoScanHandler.screenshotPhoto.value = null;
       if (screenshotPhotos.isNotEmpty) {
         var asset = screenshotPhotos.first;
-        homeController.screenshotPhoto.value = asset;
+        PhotoScanHandler.screenshotPhoto.value = asset;
       }
     }
-    if (homeController.blurryPhoto.value != null &&
-        selectedPhotosIds.contains(homeController.blurryPhoto.value!.id)) {
-      homeController.blurryPhoto.value = null;
+    if (PhotoScanHandler.blurryPhoto.value != null &&
+        selectedPhotosIds.contains(PhotoScanHandler.blurryPhoto.value!.id)) {
+      PhotoScanHandler.blurryPhoto.value = null;
       if (blurryPhotos.isNotEmpty) {
         var asset = blurryPhotos.first;
-        homeController.blurryPhoto.value = asset;
+        PhotoScanHandler.blurryPhoto.value = asset;
       }
     }
-    homeController.similarPhotos
+    PhotoScanHandler.similarPhotos
         .removeWhere((element) => selectedPhotosIds.contains(element.id));
-    if (homeController.locationPhoto.value != null &&
-        selectedPhotosIds.contains(homeController.locationPhoto.value!.id)) {
-      homeController.locationPhoto.value = null;
+    if (PhotoScanHandler.locationPhoto.value != null &&
+        selectedPhotosIds.contains(PhotoScanHandler.locationPhoto.value!.id)) {
+      PhotoScanHandler.locationPhoto.value = null;
     }
     if (similarPhotos.isNotEmpty) {
       for (var group in ImagePickerUtil.similarPhotos) {
         for (var asset in group) {
-          homeController.similarPhotos.add(asset);
-          if (homeController.similarPhotos.length == 4) {
+          PhotoScanHandler.similarPhotos.add(asset);
+          if (PhotoScanHandler.similarPhotos.length == 4) {
             break;
           }
         }
       }
     }
 
-    homeController.peoplePhotos
+    PhotoScanHandler.peoplePhotos
         .removeWhere((element) => selectedPhotosIds.contains(element.id));
     if (peoplePhotos.isNotEmpty) {
       for (var personPhotos in peoplePhotos) {
-        homeController.peoplePhotos.add(personPhotos);
-        if (homeController.peoplePhotos.length == 2) {
+        PhotoScanHandler.peoplePhotos.add(personPhotos);
+        if (PhotoScanHandler.peoplePhotos.length == 2) {
           break;
         }
       }
@@ -382,11 +383,8 @@ class ImagePickerUtil {
     }
   }
 
-
-
   // 加载图片资源
   static Future<List<AssetEntity>> loadAssets({bool sortByDate = true}) async {
-
     final PermissionState result = await PhotoManager.requestPermissionExtend();
     if (!result.isAuth) return [];
 
@@ -405,13 +403,10 @@ class ImagePickerUtil {
       ),
     );
 
-
-
-
     int assetCount = await albums.first.assetCountAsync;
 
     debugPrint("ImagePickerUtil loadAssets assetCount $assetCount");
-   androidPhotos = await albums.first.getAssetListPaged(
+    androidPhotos = await albums.first.getAssetListPaged(
       page: 0,
       size: assetCount,
     );

+ 30 - 1
lib/module/splash/splash_controller.dart

@@ -8,9 +8,15 @@ import 'package:clean/module/main/main_view.dart';
 import 'package:clean/module/splash/intro/intro_view.dart';
 import 'package:flutter/Material.dart';
 import 'package:get/get.dart';
+import 'package:apple_pay/apple_pay.dart';
 
+import '../../data/bean/payment_way.dart';
+import '../../data/bean/store_item.dart';
 import '../../data/consts/event_report_id.dart';
+import '../../data/repositories/store_repository.dart';
+import '../../dialog/loading_dialog.dart';
 import '../../handler/event_handler.dart';
+import '../../handler/photo_scan_handler.dart';
 
 class SplashController extends BaseController {
   Animation<double>? animation;
@@ -27,7 +33,6 @@ class SplashController extends BaseController {
 
     final isAgreePrivacy = isAgreePrivacyPolicy();
     if (isAgreePrivacy) {
-
       onAgreePrivacy();
       EventHandler.report(EventId.event_01000);
     } else {
@@ -51,6 +56,13 @@ class SplashController extends BaseController {
   // 已经同意隐私
   void onAgreePrivacy() async {
     await initAfterGrant();
+    initStoreIndexData();
+
+
+
+
+    PhotoScanHandler.handleAllPhotos();
+
     Future.delayed(const Duration(seconds: 2), () {
       if (isFirstIntro()) {
         IntroPage.start();
@@ -60,6 +72,23 @@ class SplashController extends BaseController {
     });
   }
 
+  void initStoreIndexData() {
+    // LoadingDialog.showLoading();
+    final List<StoreItem> storeItems = <StoreItem>[];
+    storeRepository.storeIndex().then((indexData) async {
+      storeItems.addAll(indexData.items);
+      var freeAppleId = "";
+      for (var item in storeItems) {
+        if (item.freeTrialName != null) {
+          freeAppleId = item.appleGoodsId;
+        }
+      }
+      var isFree = await ApplePay().check(freeAppleId);
+      setGoodsFree(isFree);
+      // LoadingDialog.hide();
+    });
+  }
+
   @override
   void onClose() {
     print('SplashController onClose');

+ 17 - 17
lib/module/store/discount/discount_controller.dart

@@ -16,8 +16,8 @@ import 'package:get/get.dart';
 import '../../../data/consts/event_report_id.dart';
 import '../../../handler/event_handler.dart';
 
-class DiscountController extends BaseController implements PaymentStatusCallback {
-
+class DiscountController extends BaseController
+    implements PaymentStatusCallback {
   final RxList<StoreItem> storeItems = <StoreItem>[].obs;
 
   final RxList<PaymentWay> paymentWays = <PaymentWay>[].obs;
@@ -26,7 +26,7 @@ class DiscountController extends BaseController implements PaymentStatusCallback
 
   final Rxn<PaymentWay> currentSelectedPaymentWay = Rxn<PaymentWay>();
 
-  RxBool isFree = false.obs;
+  RxBool isFree = isGoodsFree().obs;
 
   @override
   Future<void> onInit() async {
@@ -47,12 +47,12 @@ class DiscountController extends BaseController implements PaymentStatusCallback
       storeItems.clear();
       storeItems.addAll(indexData.items);
       currentSelectedStoreItem.value =
-      storeItems.isNotEmpty ? storeItems.first : null;
+          storeItems.isNotEmpty ? storeItems.first : null;
 
       paymentWays.clear();
       paymentWays.addAll(indexData.paymentWays);
       currentSelectedPaymentWay.value =
-      paymentWays.isNotEmpty ? paymentWays.first : null;
+          paymentWays.isNotEmpty ? paymentWays.first : null;
 
       var freeAppleId = "";
       for (var item in storeItems) {
@@ -60,15 +60,12 @@ class DiscountController extends BaseController implements PaymentStatusCallback
           freeAppleId = item.appleGoodsId;
         }
       }
-
-      isFree.value = await ApplePay().check(freeAppleId);
-
+      // isFree.value = await ApplePay().check(freeAppleId);
       LoadingDialog.hide();
     });
   }
 
   void onBuyClick() async {
-
     EventHandler.report(EventId.event_02006);
     StoreItem? storeItem = currentSelectedStoreItem.value;
     if (storeItem == null) {
@@ -85,8 +82,9 @@ class DiscountController extends BaseController implements PaymentStatusCallback
     LoadingDialog.showLoading();
     try {
       // OrderPayResponse response =
-      storeRepository.orderPay(storeItem.id, payPlatform, payMethod).then((response) async {
-
+      storeRepository
+          .orderPay(storeItem.id, payPlatform, payMethod)
+          .then((response) async {
         dynamic payInfo;
         String outTradeNo = response.outTradeNo;
         if (payPlatform == PayPlatform.apple) {
@@ -98,11 +96,14 @@ class DiscountController extends BaseController implements PaymentStatusCallback
               response.appAccountToken);
         }
 
-        final result = await ApplePay().purchase(productId: storeItem.appleGoodsId, appAccountToken: response.appAccountToken);
+        final result = await ApplePay().purchase(
+            productId: storeItem.appleGoodsId,
+            appAccountToken: response.appAccountToken);
         if (result["success"] == true) {
           var receipt = result['receipt'];
           print('购买成功: ${result['receipt']}');
-          checkPaymentStatus(outTradeNo, paymentWay, storeItem, receiptData: receipt);
+          checkPaymentStatus(outTradeNo, paymentWay, storeItem,
+              receiptData: receipt);
         } else {
           LoadingDialog.hide();
           ToastUtil.show("Pay Error, Please try again");
@@ -117,8 +118,6 @@ class DiscountController extends BaseController implements PaymentStatusCallback
     }
   }
 
-
-
   void checkPaymentStatus(
       String orderNo, PaymentWay paymentWay, StoreItem storeItemBean,
       {String? receiptData}) {
@@ -128,7 +127,8 @@ class DiscountController extends BaseController implements PaymentStatusCallback
   }
 
   @override
-  void onPaymentSuccess(String orderNo, PaymentWay paymentWay, StoreItem storeItemBean) {
+  void onPaymentSuccess(
+      String orderNo, PaymentWay paymentWay, StoreItem storeItemBean) {
     // TODO: implement onPaymentSuccess
     LoadingDialog.hide();
     ToastUtil.show("Pay success");
@@ -146,4 +146,4 @@ class DiscountController extends BaseController implements PaymentStatusCallback
     LoadingDialog.hide();
     ErrorHandler.toastError(error);
   }
-}
+}

+ 2 - 2
lib/module/store/store_controller.dart

@@ -36,7 +36,7 @@ class StoreController extends BaseController implements PaymentStatusCallback {
 
   var freeAppleId = "";
 
-  RxBool isFree = false.obs;
+  RxBool isFree = isGoodsFree().obs;
 
   @override
   Future<void> onInit() async {
@@ -82,7 +82,7 @@ class StoreController extends BaseController implements PaymentStatusCallback {
         }
       }
 
-      isFree.value = await ApplePay().check(freeAppleId);
+      // isFree.value = await ApplePay().check(freeAppleId);
       LoadingDialog.hide();
     });
   }