Browse Source

Merge branch 'v1.1.0' into v1.1.2

“HeShaoZe” 3 months ago
parent
commit
537002f4ef

BIN
assets/images/icon_splash_title_ios.webp


+ 1 - 0
assets/string/base/string.xml

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="app_name">手机实时定位</string>
+    <string name="app_name_ios">手机实时定位</string>
     <string name="main_tab_home">首页</string>
     <string name="main_tab_camera">扫一扫</string>
     <string name="main_tab_mine">我的</string>

+ 3 - 3
ios/Runner.xcodeproj/project.pbxproj

@@ -494,7 +494,7 @@
 				DEVELOPMENT_TEAM = JYA454HZ72;
 				ENABLE_BITCODE = NO;
 				INFOPLIST_FILE = Runner/Info.plist;
-				INFOPLIST_KEY_CFBundleDisplayName = "手机实时定位";
+				INFOPLIST_KEY_CFBundleDisplayName = "手机定位追迹";
 				INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
 				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
 				LD_RUNPATH_SEARCH_PATHS = (
@@ -684,7 +684,7 @@
 				DEVELOPMENT_TEAM = JYA454HZ72;
 				ENABLE_BITCODE = NO;
 				INFOPLIST_FILE = Runner/Info.plist;
-				INFOPLIST_KEY_CFBundleDisplayName = "手机实时定位";
+				INFOPLIST_KEY_CFBundleDisplayName = "手机定位追迹";
 				INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
 				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
 				LD_RUNPATH_SEARCH_PATHS = (
@@ -714,7 +714,7 @@
 				DEVELOPMENT_TEAM = JYA454HZ72;
 				ENABLE_BITCODE = NO;
 				INFOPLIST_FILE = Runner/Info.plist;
-				INFOPLIST_KEY_CFBundleDisplayName = "手机实时定位";
+				INFOPLIST_KEY_CFBundleDisplayName = "手机定位追迹";
 				INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
 				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
 				LD_RUNPATH_SEARCH_PATHS = (

+ 1 - 1
lib/main.dart

@@ -178,7 +178,7 @@ class MyApp extends StatelessWidget {
 }
 
 class AppCommonConfig {
-  static GenerateAppTitle? appName = (_) => StringName.appName;
+  static GenerateAppTitle? appName = (_) => Platform.isIOS? StringName.appNameIos : StringName.appName;
 
   // 路由配置
   static List<GetPage>? getPages = AppPage.pages;

+ 3 - 1
lib/module/about/about_page.dart

@@ -1,3 +1,5 @@
+import 'dart:io';
+
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/src/widgets/framework.dart';
@@ -32,7 +34,7 @@ class AboutPage extends BasePage<AboutController> {
         SizedBox(height: 48.w),
         Assets.images.iconLogo.image(width: 70.w, height: 70.w),
         SizedBox(height: 8.w),
-        Text(StringName.appName,
+        Text(Platform.isIOS? StringName.appNameIos : StringName.appName,
             style: TextStyle(fontSize: 14.sp, color: Colors.black)),
         SizedBox(height: 2.w),
         Text('当前版本:${appInfoUtil.appVersionName}',

+ 1 - 1
lib/module/feedback/feed_back_controller.dart

@@ -45,7 +45,7 @@ class FeedBackController extends BaseController {
         "&app_platform=${Platform.isAndroid ? 1 : 2}"
         "&app_version=${appInfoUtil.appVersionName}"
         "&package_name=${appInfoUtil.packageName}"
-        "&app_name=${StringName.appName}"
+        "&app_name=${Platform.isIOS? StringName.appNameIos : StringName.appName}"
         "&phone=$phone";
     BrowserPage.start(url);
   }

+ 1 - 1
lib/module/mine/mine_controller.dart

@@ -75,7 +75,7 @@ class MineController extends BaseController {
         "&app_platform=${Platform.isAndroid ? 1 : 2}"
         "&app_version=${appInfoUtil.appVersionName}"
         "&package_name=${appInfoUtil.packageName}"
-        "&app_name=${StringName.appName}"
+        "&app_name=${Platform.isIOS? StringName.appNameIos : StringName.appName}"
         "&phone=$phone";
     BrowserPage.start(url);
   }

+ 2 - 0
lib/module/splash/splash_page.dart

@@ -1,3 +1,5 @@
+import 'dart:io';
+
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/src/widgets/framework.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';

+ 3 - 1
lib/module/track/track_day_detail/track_share_view.dart

@@ -1,3 +1,5 @@
+import 'dart:io';
+
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
@@ -92,7 +94,7 @@ class TrackShareView extends StatelessWidget {
         Column(
           crossAxisAlignment: CrossAxisAlignment.start,
           children: [
-            Text(StringName.appName,
+            Text(Platform.isIOS? StringName.appNameIos : StringName.appName,
                 style: TextStyle(
                     fontSize: 12.sp,
                     fontWeight: FontWeight.bold,

+ 5 - 0
lib/resource/assets.gen.dart

@@ -567,6 +567,10 @@ class $AssetsImagesGen {
   AssetGenImage get iconSplashTitle =>
       const AssetGenImage('assets/images/icon_splash_title.webp');
 
+  /// File path: assets/images/icon_splash_title_ios.webp
+  AssetGenImage get iconSplashTitleIos =>
+      const AssetGenImage('assets/images/icon_splash_title_ios.webp');
+
   /// File path: assets/images/icon_track_ai_interpretation.webp
   AssetGenImage get iconTrackAiInterpretation =>
       const AssetGenImage('assets/images/icon_track_ai_interpretation.webp');
@@ -889,6 +893,7 @@ class $AssetsImagesGen {
         iconShareStay,
         iconShareTrackDetail,
         iconSplashTitle,
+        iconSplashTitleIos,
         iconTrackAiInterpretation,
         iconTrackAnalyseRefresh,
         iconTrackDailyDoubt,

+ 2 - 0
lib/resource/string.gen.dart

@@ -3,6 +3,7 @@ import 'package:get/get.dart';
 class StringName {
   StringName._();
   static String get appName => 'app_name'.tr; // 手机实时定位
+  static String get appNameIos => 'app_name_ios'.tr; // 手机实时定位
   static String get mainTabHome => 'main_tab_home'.tr; // 首页
   static String get mainTabCamera => 'main_tab_camera'.tr; // 扫一扫
   static String get mainTabMine => 'main_tab_mine'.tr; // 我的
@@ -336,6 +337,7 @@ class StringMultiSource {
   static const Map<String, Map<String, String>> translations = {
     'zh_CN': {
       'app_name': '手机实时定位',
+      'app_name_ios': '手机实时定位',
       'main_tab_home': '首页',
       'main_tab_camera': '扫一扫',
       'main_tab_mine': '我的',

+ 20 - 10
lib/utils/app_review_service.dart

@@ -4,29 +4,39 @@ import 'package:url_launcher/url_launcher.dart';
 
 class AppReviewService {
   static final InAppReview _inAppReview = InAppReview.instance;
+  static const String _appStoreId = '6743112546'; // 替换为你的App Store ID
 
   // 触发评价逻辑
   static Future<void> requestAppReview(BuildContext context) async {
     try {
-      // iOS和Android优先使用应用内评价
-      if (await _inAppReview.isAvailable()) {
+      bool isAvailable = await _inAppReview.isAvailable();
+      if (isAvailable) {
+        // 尝试显示应用内评分
         await _inAppReview.requestReview();
       } else {
-        await _openStoreListing();
+        // 不可用时直接跳转到App Store
+        await _launchAppStore();
       }
     } catch (e) {
+      // 任何错误都跳转到App Store
+      await _launchAppStore();
       ScaffoldMessenger.of(context).showSnackBar(
-          SnackBar(content: Text('评价功能暂时不可用,请稍后再试'))
+          const SnackBar(content: Text('已为您打开应用商店评价页面'))
       );
       print('Error requesting review: $e');
     }
   }
 
-  // 打开应用商店列表
-  static Future<void> _openStoreListing() async {
-    await _inAppReview.openStoreListing(
-      appStoreId: 'com.shishi.dingwei', // iOS应用ID
-    );
+  // 使用url_launcher直接打开App Store
+  static Future<void> _launchAppStore() async {
+    final url = Uri.parse('https://apps.apple.com/app/id$_appStoreId');
+    if (await canLaunchUrl(url)) {
+      await launchUrl(url, mode: LaunchMode.externalApplication);
+    }
   }
 
-}
+  // 直接打开应用商店(备用方法)
+  static Future<void> openStoreReview(BuildContext context) async {
+    await _launchAppStore();
+  }
+}

+ 5 - 0
plugins/map_amap_ios/ios/Classes/ViewAndDataExchange/MapAmapViewAndDataExchange.swift

@@ -61,6 +61,9 @@ class MapAmapViewAndDataExchange: NSObject, ObservableObject, MapCapability {
         var markerDict = Dictionary(uniqueKeysWithValues: self.markers.map { ($0.id, $0) })
         
         for marker in newMarkers {
+            if marker.id.isEmpty {
+                marker.id = "mine"
+            }
             markerDict[marker.id] = marker
         }
         DispatchQueue.main.async{
@@ -73,7 +76,9 @@ class MapAmapViewAndDataExchange: NSObject, ObservableObject, MapCapability {
     func handleMapClearMarkers(result: @escaping FlutterResult) {
         DispatchQueue.main.async{
             self.markers = []
+            self.polylines = []
         }
+        self.markers = []
         result(nil)
     }