diff --git a/star_lock/android/app/build.gradle b/star_lock/android/app/build.gradle index d6cc2826..4b2998cc 100644 --- a/star_lock/android/app/build.gradle +++ b/star_lock/android/app/build.gradle @@ -28,6 +28,35 @@ apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { + + // ----- BEGIN flavorDimensions (autogenerated by flutter_flavorizr) ----- + flavorDimensions "flavor-type" + + productFlavors { + dev { + dimension "flavor-type" + applicationId "com.starlock.lock.dev" + resValue "string", "app_name", "星锁-dev" + } + pre { + dimension "flavor-type" + applicationId "com.starlock.lock.pre" + resValue "string", "app_name", "星锁" + } + sky { + dimension "flavor-type" + applicationId "com.skychip.lock" + resValue "string", "app_name", "锁通通" + } + xhj { + dimension "flavor-type" + applicationId "com.xhjcn.lock" + resValue "string", "app_name", "鑫锁" + } + } + + // ----- END flavorDimensions (autogenerated by flutter_flavorizr) ----- + compileSdkVersion flutter.compileSdkVersion ndkVersion flutter.ndkVersion diff --git a/star_lock/android/app/src/dev/res/mipmap-hdpi/ic_launcher.png b/star_lock/android/app/src/dev/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 00000000..c4abfb2f Binary files /dev/null and b/star_lock/android/app/src/dev/res/mipmap-hdpi/ic_launcher.png differ diff --git a/star_lock/android/app/src/dev/res/mipmap-mdpi/ic_launcher.png b/star_lock/android/app/src/dev/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 00000000..6ef8ace4 Binary files /dev/null and b/star_lock/android/app/src/dev/res/mipmap-mdpi/ic_launcher.png differ diff --git a/star_lock/android/app/src/dev/res/mipmap-xhdpi/ic_launcher.png b/star_lock/android/app/src/dev/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 00000000..d17ccde3 Binary files /dev/null and b/star_lock/android/app/src/dev/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/star_lock/android/app/src/dev/res/mipmap-xxhdpi/ic_launcher.png b/star_lock/android/app/src/dev/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 00000000..d496e04a Binary files /dev/null and b/star_lock/android/app/src/dev/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/star_lock/android/app/src/dev/res/mipmap-xxxhdpi/ic_launcher.png b/star_lock/android/app/src/dev/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 00000000..7af9b770 Binary files /dev/null and b/star_lock/android/app/src/dev/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/star_lock/android/app/src/main/AndroidManifest.xml b/star_lock/android/app/src/main/AndroidManifest.xml index 3a99482b..1cf2a9b9 100644 --- a/star_lock/android/app/src/main/AndroidManifest.xml +++ b/star_lock/android/app/src/main/AndroidManifest.xml @@ -1,110 +1,78 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/star_lock/android/app/src/main/res/drawable-v21/launch_background.xml b/star_lock/android/app/src/main/res/drawable-v21/launch_background.xml index dd2edc21..6a36c4f3 100644 --- a/star_lock/android/app/src/main/res/drawable-v21/launch_background.xml +++ b/star_lock/android/app/src/main/res/drawable-v21/launch_background.xml @@ -7,6 +7,6 @@ + android:src="@mipmap/ic_launcher" /> diff --git a/star_lock/android/app/src/main/res/drawable/launch_background.xml b/star_lock/android/app/src/main/res/drawable/launch_background.xml index dd2edc21..6a36c4f3 100644 --- a/star_lock/android/app/src/main/res/drawable/launch_background.xml +++ b/star_lock/android/app/src/main/res/drawable/launch_background.xml @@ -7,6 +7,6 @@ + android:src="@mipmap/ic_launcher" /> diff --git a/star_lock/android/app/src/main/res/mipmap-hdpi/ic_logo.png b/star_lock/android/app/src/main/res/mipmap-hdpi/ic_logo.png deleted file mode 100644 index 9e24e3f8..00000000 Binary files a/star_lock/android/app/src/main/res/mipmap-hdpi/ic_logo.png and /dev/null differ diff --git a/star_lock/android/app/src/main/res/mipmap-ldpi/ic_logo.png b/star_lock/android/app/src/main/res/mipmap-ldpi/ic_logo.png deleted file mode 100644 index 7cfb7f16..00000000 Binary files a/star_lock/android/app/src/main/res/mipmap-ldpi/ic_logo.png and /dev/null differ diff --git a/star_lock/android/app/src/main/res/mipmap-mdpi/ic_logo.png b/star_lock/android/app/src/main/res/mipmap-mdpi/ic_logo.png deleted file mode 100644 index 3af52dd8..00000000 Binary files a/star_lock/android/app/src/main/res/mipmap-mdpi/ic_logo.png and /dev/null differ diff --git a/star_lock/android/app/src/main/res/mipmap-xhdpi/ic_logo.png b/star_lock/android/app/src/main/res/mipmap-xhdpi/ic_logo.png deleted file mode 100644 index fc53ab17..00000000 Binary files a/star_lock/android/app/src/main/res/mipmap-xhdpi/ic_logo.png and /dev/null differ diff --git a/star_lock/android/app/src/main/res/mipmap-xxhdpi/ic_logo.png b/star_lock/android/app/src/main/res/mipmap-xxhdpi/ic_logo.png deleted file mode 100644 index ea687ea3..00000000 Binary files a/star_lock/android/app/src/main/res/mipmap-xxhdpi/ic_logo.png and /dev/null differ diff --git a/star_lock/android/app/src/main/res/mipmap-xxxhdpi/ic_logo.png b/star_lock/android/app/src/main/res/mipmap-xxxhdpi/ic_logo.png deleted file mode 100644 index 3a446edc..00000000 Binary files a/star_lock/android/app/src/main/res/mipmap-xxxhdpi/ic_logo.png and /dev/null differ diff --git a/star_lock/android/app/src/pre/res/mipmap-hdpi/ic_launcher.png b/star_lock/android/app/src/pre/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 00000000..99717435 Binary files /dev/null and b/star_lock/android/app/src/pre/res/mipmap-hdpi/ic_launcher.png differ diff --git a/star_lock/android/app/src/pre/res/mipmap-mdpi/ic_launcher.png b/star_lock/android/app/src/pre/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 00000000..57a9488a Binary files /dev/null and b/star_lock/android/app/src/pre/res/mipmap-mdpi/ic_launcher.png differ diff --git a/star_lock/android/app/src/pre/res/mipmap-xhdpi/ic_launcher.png b/star_lock/android/app/src/pre/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 00000000..ec6c223a Binary files /dev/null and b/star_lock/android/app/src/pre/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/star_lock/android/app/src/pre/res/mipmap-xxhdpi/ic_launcher.png b/star_lock/android/app/src/pre/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 00000000..a5008e10 Binary files /dev/null and b/star_lock/android/app/src/pre/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/star_lock/android/app/src/pre/res/mipmap-xxxhdpi/ic_launcher.png b/star_lock/android/app/src/pre/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 00000000..539be179 Binary files /dev/null and b/star_lock/android/app/src/pre/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/star_lock/android/app/src/sky/res/mipmap-hdpi/ic_launcher.png b/star_lock/android/app/src/sky/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 00000000..4587c19d Binary files /dev/null and b/star_lock/android/app/src/sky/res/mipmap-hdpi/ic_launcher.png differ diff --git a/star_lock/android/app/src/sky/res/mipmap-mdpi/ic_launcher.png b/star_lock/android/app/src/sky/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 00000000..32e709f3 Binary files /dev/null and b/star_lock/android/app/src/sky/res/mipmap-mdpi/ic_launcher.png differ diff --git a/star_lock/android/app/src/sky/res/mipmap-xhdpi/ic_launcher.png b/star_lock/android/app/src/sky/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 00000000..bdd7f056 Binary files /dev/null and b/star_lock/android/app/src/sky/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/star_lock/android/app/src/sky/res/mipmap-xxhdpi/ic_launcher.png b/star_lock/android/app/src/sky/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 00000000..1598749d Binary files /dev/null and b/star_lock/android/app/src/sky/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/star_lock/android/app/src/sky/res/mipmap-xxxhdpi/ic_launcher.png b/star_lock/android/app/src/sky/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 00000000..644b4d33 Binary files /dev/null and b/star_lock/android/app/src/sky/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/star_lock/android/app/src/xhj/res/mipmap-hdpi/ic_launcher.png b/star_lock/android/app/src/xhj/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 00000000..e17ec78d Binary files /dev/null and b/star_lock/android/app/src/xhj/res/mipmap-hdpi/ic_launcher.png differ diff --git a/star_lock/android/app/src/xhj/res/mipmap-mdpi/ic_launcher.png b/star_lock/android/app/src/xhj/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 00000000..4e071c25 Binary files /dev/null and b/star_lock/android/app/src/xhj/res/mipmap-mdpi/ic_launcher.png differ diff --git a/star_lock/android/app/src/xhj/res/mipmap-xhdpi/ic_launcher.png b/star_lock/android/app/src/xhj/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 00000000..f190d692 Binary files /dev/null and b/star_lock/android/app/src/xhj/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/star_lock/android/app/src/xhj/res/mipmap-xxhdpi/ic_launcher.png b/star_lock/android/app/src/xhj/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 00000000..db495a38 Binary files /dev/null and b/star_lock/android/app/src/xhj/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/star_lock/android/app/src/xhj/res/mipmap-xxxhdpi/ic_launcher.png b/star_lock/android/app/src/xhj/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 00000000..58a29a5e Binary files /dev/null and b/star_lock/android/app/src/xhj/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/star_lock/assets/icon/dev.png b/star_lock/assets/icon/dev.png index 38848652..3b73699c 100644 Binary files a/star_lock/assets/icon/dev.png and b/star_lock/assets/icon/dev.png differ diff --git a/star_lock/flavorizr.yaml b/star_lock/flavorizr.yaml index 32971971..9484655e 100644 --- a/star_lock/flavorizr.yaml +++ b/star_lock/flavorizr.yaml @@ -1,93 +1,54 @@ # 用于编译出不同的APPID -# 用法:dart run flutter_flavorizr -p xxx +# 生成:意思是将本文件定义的配置,生成对应的代码,或者原生的配置、构建过程、文件资源等 +# 风味用法:dart run flutter_flavorizr -p , -# 用法-生成flutter风味配置文件(lib/flavors.dart):dart run flutter_flavorizr -p flutter:flavors +# 以下行为都是覆盖,所以如果不是很清楚自己在做什么,请不要随意运行,以免覆盖有用的文件 +# 安卓图标:dart run flutter_flavorizr -p android:icons +# 安卓构建参数集配置:dart run flutter_flavorizr -p android:androidManifest +# 安卓构建目标配置:dart run flutter_flavorizr -p android:buildGradle +# iOS图标:dart run flutter_flavorizr - +# iOS构建参数集配置:dart run flutter_flavorizr - +# iOS构建目标配置:dart run flutter_flavorizr - -# 用法-生成安卓图标:dart run flutter_flavorizr -p android:icons -# 用法-生成安卓构建参数集配置:dart run flutter_flavorizr -p android:androidManifest -# 用法-生成安卓构建目标配置:dart run flutter_flavorizr -p android:buildGradle +# 项目运行说明:添加不同风味后,不能再使用flutter默认的运行方式`flutter run`,而是需要指定运行的风味 +# flutter run --flavor -t lib/main_.dart +# 注意,这里有 入口文件(main_.dart) 和 口味() 两个参数 +# 其中入口文件在代码中指定运行时的差异,例如 页面上的名称、颜色、API请求的域名等 +# 而 口味 指定 构建差异,例如 APPID、Logo、应用名称等 +# 下面是4个运行示例: +# flutter run --flavor dev -t lib/main_dev.dart +# flutter run --flavor pre -t lib/main_pre.dart +# flutter run --flavor sky -t lib/main_sky.dart +# flutter run --flavor xhj -t lib/main_xhj.dart -# 用法-生成iOS图标:dart run flutter_flavorizr -p ios:icons -# 用法-生成iOS构建参数集配置:dart run flutter_flavorizr -p ios:xcconfig -# 用法-生成iOS构建目标配置:dart run flutter_flavorizr -p ios:buildTargets +app: + android: + flavorDimensions: "flavor-type" -# 运行:flutter run --flavor -t lib/main.dart -# 构建:flutter build --flavor -t lib/main.dart -# 例如:flutter run --profile --flavor dev -t lib/main.dart - -flavorizr: - app: - android: - flavorDimensions: "flavor-type" - ios: - ide: "idea" flavors: dev: app: name: "星锁-dev" icon: "assets/icon/dev.png" - instructions: [ - "android:icons", - "android:androidManifest", - "android:buildGradle", - "ios:icons", - "ios:xcconfig", - "ios:buildTargets" - ] android: applicationId: "com.starlock.lock.dev" - ios: - bundleId: "com.starlock.lock.dev" - buildSettings: - # 开发团队在苹果开发者门户中可见 - DEVELOPMENT_TEAM: YOURDEVTEAMID - PROVISIONING_PROFILE_SPECIFIER: "Dev-ProvisioningProfile" pre: app: - name: "星锁-pre" + name: "星锁" icon: "assets/icon/pre.png" - instructions: [ - "android:icons", - "android:androidManifest", - "android:buildGradle", - "ios:icons", - "ios:xcconfig", - "ios:buildTargets" - ] android: applicationId: "com.starlock.lock.pre" - ios: - bundleId: "com.starlock.lock.pre" sky: app: name: "锁通通" icon: "assets/icon/sky.png" - instructions: [ - "android:icons", - "android:androidManifest", - "android:buildGradle", - "ios:icons", - "ios:xcconfig", - "ios:buildTargets" - ] android: applicationId: "com.skychip.lock" - ios: - bundleId: "com.skychip.lock" xhj: app: name: "鑫锁" icon: "assets/icon/xhj.png" - instructions: [ - "android:icons", - "android:androidManifest", - "android:buildGradle", - "ios:icons", - "ios:xcconfig", - "ios:buildTargets" - ] android: applicationId: "com.xhjcn.lock" - ios: - bundleId: "com.xhjcn.lock" +ide: idea diff --git a/star_lock/lib/app.dart b/star_lock/lib/app.dart new file mode 100644 index 00000000..b5308d9f --- /dev/null +++ b/star_lock/lib/app.dart @@ -0,0 +1,177 @@ +import 'package:aliyun_push/aliyun_push.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_easyloading/flutter_easyloading.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:permission_handler/permission_handler.dart'; +import 'package:star_lock/tools/app_manager.dart'; +import 'package:star_lock/tools/bindings/app_binding.dart'; + +import 'package:star_lock/tools/storage.dart'; +import 'package:star_lock/tools/xs_aliyunPush.dart'; +import 'package:star_lock/translations/app_dept.dart'; +import 'package:star_lock/translations/trans_lib.dart'; + +import 'appRouters.dart'; +import 'baseWidget.dart'; +import 'tools/appRouteObserver.dart'; +import 'dart:io'; +import 'package:flutter/services.dart'; + +class MyApp extends StatefulWidget { + const MyApp({GlobalKey? key}) : super(key: key); + + @override + State createState() => _MyAppState(); +} + +// 注册 RouteObserver 作为 navigation observer. +// final RouteObserver routeObserver = RouteObserver(); + +class _MyAppState extends State with WidgetsBindingObserver, BaseWidget { + @override + Widget build(BuildContext context) { + return ScreenUtilInit( + designSize: const Size(585, 1265), + builder: (w, a) => _initMaterialApp()); + } + + GetMaterialApp _initMaterialApp() => GetMaterialApp( + title: 'Star Lock', + navigatorObservers: [AppRouteObserver().routeObserver], + translations: TranslationMessage(), + supportedLocales: appDept.deptSupportedLocales, + localizationsDelegates: const [ + GlobalMaterialLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + ], + localeResolutionCallback: (locale, supportedLocales) { + if (!supportedLocales.contains(locale)) { + int idx = appSupportedLocales.indexWhere( + (element) => element.languageCode == locale!.languageCode); + if (idx != -1) { + locale = appSupportedLocales[idx]; + } else { + locale = const Locale('zh', 'CN'); + } + } + // print("localelocalelocalelocalelocale locale:${locale} locale.languageCode:${locale.languageCode} locale.countryCode:${locale.countryCode} supportedLocales:${supportedLocales}"); + AppManager() + .setLanCode(code: '${locale!.languageCode}_${locale.countryCode}'); + return locale; + }, + // locale: StoreService.to.getLanguageCode().isNotEmpty ? appDept.deptSupportedLocales.where((element) => element.languageCode == StoreService.to.getLanguageCode()).first : Get.deviceLocale, + locale: Get.deviceLocale, + fallbackLocale: const Locale('zh', 'CN'), + theme: ThemeData( + scaffoldBackgroundColor: const Color(0xFFF6F6F6), + backgroundColor: const Color(0xFFF6F6F6), + primaryColor: const Color(0xFFFFFFFF), + textTheme: TextTheme( + //用在非Material组件上的文字显示, + bodyText1: + TextStyle(fontSize: 28.sp, color: const Color(0xff2E2B2B)), + //Material组件上的文字显示 + bodyText2: + TextStyle(fontSize: 28.sp, color: const Color(0xff2E2B2B)), + button: TextStyle(fontSize: 28.sp)), + iconTheme: IconThemeData(size: 28.sp, color: const Color(0xff2E2B2B)), + appBarTheme: AppBarTheme( + backgroundColor: const Color(0xFFFFFFFF), + elevation: 0, + centerTitle: true, + iconTheme: IconThemeData(color: const Color(0xff333333), size: 36.sp), + titleTextStyle: TextStyle( + color: const Color(0xff333333), + fontWeight: FontWeight.w400, + fontSize: 36.sp), + ), + splashColor: Colors.transparent, // 点击时的高亮效果设置为透明 + highlightColor: Colors.transparent, + ), + debugShowCheckedModeBanner: false, + getPages: AppRouters.routePages, + builder: EasyLoading.init(), + initialBinding: AppBindings(), + initialRoute: '/'); + + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addObserver(this); + + openBlueScan(); + + initAliyunPush(); + } + + //初始化阿里云推送 + void initAliyunPush() { + final aliyunPush = AliyunPush(); + XSAliyunPushProvider().init(aliyunPush); + XSAliyunPushProvider().initAliyunPush(); + + if (Platform.isAndroid) { + XSAliyunPushProvider().initAliyunThirdPush(); + } + + //暂使用DeviceID推送 + aliyunPush.getDeviceId().then((deviceId) async { + // print('得到的DeviceId$deviceId'); + final data = await Storage.getString(saveUserLoginData); + if (data!.isNotEmpty && deviceId.isNotEmpty) { + XSAliyunPushProvider() + .pushBindDeviceID(deviceId, Platform.isAndroid ? 10 : 20); + } + }); + } + + @override + void dispose() { + WidgetsBinding.instance.removeObserver(this); + super.dispose(); + } +} + + +void openBlueScan() { + if (Platform.isIOS) { + print("有蓝牙权限开始扫描"); + // startScanAction(); + } else { + getMicrophonePermission().then((value) { + if (value) { + // 有权限 + print("有蓝牙权限开始扫描"); + // startScanAction(); + } else { + //没有权限 + openAppSettings(); //打开app系统设置 + } + }); + } +} + +// void startScanAction() { +// BlueManage().startScan(); +// } + +///请求蓝牙权限 +Future getMicrophonePermission() async { + // You can request multiple permissions at once. + Map statuses = await [ + Permission.bluetoothScan, + Permission.bluetoothConnect, + Permission.location, + ].request(); + + //granted 通过,denied 被拒绝,permanentlyDenied 拒绝且不在提示 + if (statuses[Permission.bluetoothScan]!.isGranted && + statuses[Permission.bluetoothConnect]!.isGranted && + statuses[Permission.location]!.isGranted) { + return true; + } + return false; +} diff --git a/star_lock/lib/common/XSConstantMacro/XSConstantMacro.dart b/star_lock/lib/common/XSConstantMacro/XSConstantMacro.dart index 4c6cff9d..3af67c78 100644 --- a/star_lock/lib/common/XSConstantMacro/XSConstantMacro.dart +++ b/star_lock/lib/common/XSConstantMacro/XSConstantMacro.dart @@ -1,8 +1,8 @@ -import 'package:star_lock/network/api.dart'; +import '../../flavors.dart'; class XSConstantMacro { // 网页的宏定义网址 - static String baseWebURL = Api.baseAddress; //base地址 + static String baseWebURL = F.apiPrefix; //base地址 static String introduceURL = '$baseWebURL/app/introduce'; //介绍页 static String userAgreementURL = '$baseWebURL/app/userAgreement'; //用户协议 static String privacyPolicyURL = '$baseWebURL/app/privacy'; //隐私政策 diff --git a/star_lock/lib/flavors.dart b/star_lock/lib/flavors.dart new file mode 100644 index 00000000..f893ff5b --- /dev/null +++ b/star_lock/lib/flavors.dart @@ -0,0 +1,43 @@ +enum Flavor { + dev, + pre, + sky, + xhj, +} + +class F { + static Flavor? appFlavor; + + static String get name => appFlavor?.name ?? ''; + + static String get title { + switch (appFlavor) { + case Flavor.dev: + return '星锁-dev'; + case Flavor.pre: + return '星锁-pre'; + case Flavor.sky: + return '锁通通'; + case Flavor.xhj: + return '鑫锁'; + default: + throw Exception('flavor[$name] title not found'); + } + } + static String get apiPrefix { + switch (appFlavor) { + case Flavor.dev: + return 'https://dev.lock.star-lock.cn'; + case Flavor.pre: + return 'https://pre.lock.star-lock.cn'; + case Flavor.sky: + return 'https://lock.skychip.top'; + case Flavor.xhj: + return 'https://lock.xhjcn.ltd'; + default: + // "http://192.168.1.15:8022"; //谢总本地 + // "https://ge.lock.star-lock.cn"; //葛工开发环境地址 + throw Exception('flavor[$name] apiPrefix not found'); + } + } +} diff --git a/star_lock/lib/main.dart b/star_lock/lib/main.dart index f96e0a75..66b92028 100644 --- a/star_lock/lib/main.dart +++ b/star_lock/lib/main.dart @@ -1,28 +1,16 @@ -import 'package:aliyun_push/aliyun_push.dart'; +import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:flutter_easyloading/flutter_easyloading.dart'; -import 'package:flutter_localizations/flutter_localizations.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:get/get.dart'; -import 'package:permission_handler/permission_handler.dart'; -import 'package:star_lock/tools/app_manager.dart'; -import 'package:star_lock/tools/bindings/app_binding.dart'; +import 'package:flutter/services.dart'; +import 'package:star_lock/translations/trans_lib.dart'; +import 'app.dart'; import 'package:star_lock/tools/device_info_service.dart'; import 'package:star_lock/tools/platform_info_services.dart'; -import 'package:star_lock/tools/storage.dart'; -import 'package:star_lock/tools/xs_aliyunPush.dart'; -import 'package:star_lock/translations/app_dept.dart'; -import 'package:star_lock/translations/trans_lib.dart'; - -import 'appRouters.dart'; -import 'baseWidget.dart'; -import 'blue/blue_manage.dart'; -import 'tools/appRouteObserver.dart'; +import 'app_settings/app_settings.dart'; import 'tools/store_service.dart'; -import 'dart:io'; -import 'package:flutter/services.dart'; +import 'package:get/get.dart'; -void main() async { +// 该文件不可作为编译入口,请查看 flavorizr.yaml 中的说明 +FutureOr main() async { await _setCommonServices(); // 设置国际化信息 @@ -30,135 +18,19 @@ void main() async { runApp(MyApp()); - if (Platform.isAndroid) { + if (AppPlatform.isAndroid) { SystemUiOverlayStyle systemUiOverlayStyle = - const SystemUiOverlayStyle(statusBarColor: Colors.transparent); + const SystemUiOverlayStyle(statusBarColor: Colors.transparent); SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle); } } -class MyApp extends StatefulWidget { - const MyApp({GlobalKey? key}) : super(key: key); - - @override - State createState() => _MyAppState(); -} - -// 注册 RouteObserver 作为 navigation observer. -// final RouteObserver routeObserver = RouteObserver(); - -class _MyAppState extends State with WidgetsBindingObserver, BaseWidget { - @override - Widget build(BuildContext context) { - return ScreenUtilInit( - designSize: const Size(585, 1265), - builder: (w, a) => _initMaterialApp()); - } - - GetMaterialApp _initMaterialApp() => GetMaterialApp( - title: 'Star Lock', - navigatorObservers: [AppRouteObserver().routeObserver], - translations: TranslationMessage(), - supportedLocales: appDept.deptSupportedLocales, - localizationsDelegates: const [ - GlobalMaterialLocalizations.delegate, - GlobalCupertinoLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - ], - localeResolutionCallback: (locale, supportedLocales) { - if (!supportedLocales.contains(locale)) { - int idx = appSupportedLocales.indexWhere( - (element) => element.languageCode == locale!.languageCode); - if (idx != -1) { - locale = appSupportedLocales[idx]; - } else { - locale = const Locale('zh', 'CN'); - } - } - // print("localelocalelocalelocalelocale locale:${locale} locale.languageCode:${locale.languageCode} locale.countryCode:${locale.countryCode} supportedLocales:${supportedLocales}"); - AppManager() - .setLanCode(code: '${locale!.languageCode}_${locale.countryCode}'); - return locale; - }, - // locale: StoreService.to.getLanguageCode().isNotEmpty ? appDept.deptSupportedLocales.where((element) => element.languageCode == StoreService.to.getLanguageCode()).first : Get.deviceLocale, - locale: Get.deviceLocale, - fallbackLocale: const Locale('zh', 'CN'), - theme: ThemeData( - scaffoldBackgroundColor: const Color(0xFFF6F6F6), - backgroundColor: const Color(0xFFF6F6F6), - primaryColor: const Color(0xFFFFFFFF), - textTheme: TextTheme( - //用在非Material组件上的文字显示, - bodyText1: - TextStyle(fontSize: 28.sp, color: const Color(0xff2E2B2B)), - //Material组件上的文字显示 - bodyText2: - TextStyle(fontSize: 28.sp, color: const Color(0xff2E2B2B)), - button: TextStyle(fontSize: 28.sp)), - iconTheme: IconThemeData(size: 28.sp, color: const Color(0xff2E2B2B)), - appBarTheme: AppBarTheme( - backgroundColor: const Color(0xFFFFFFFF), - elevation: 0, - centerTitle: true, - iconTheme: IconThemeData(color: const Color(0xff333333), size: 36.sp), - titleTextStyle: TextStyle( - color: const Color(0xff333333), - fontWeight: FontWeight.w400, - fontSize: 36.sp), - ), - splashColor: Colors.transparent, // 点击时的高亮效果设置为透明 - highlightColor: Colors.transparent, - ), - debugShowCheckedModeBanner: false, - getPages: AppRouters.routePages, - builder: EasyLoading.init(), - initialBinding: AppBindings(), - initialRoute: '/'); - - @override - void initState() { - super.initState(); - WidgetsBinding.instance.addObserver(this); - - openBlueScan(); - - initAliyunPush(); - } - - //初始化阿里云推送 - void initAliyunPush() { - final aliyunPush = AliyunPush(); - XSAliyunPushProvider().init(aliyunPush); - XSAliyunPushProvider().initAliyunPush(); - - if (Platform.isAndroid) { - XSAliyunPushProvider().initAliyunThirdPush(); - } - - //暂使用DeviceID推送 - aliyunPush.getDeviceId().then((deviceId) async { - // print('得到的DeviceId$deviceId'); - final data = await Storage.getString(saveUserLoginData); - if (data!.isNotEmpty && deviceId.isNotEmpty) { - XSAliyunPushProvider() - .pushBindDeviceID(deviceId, Platform.isAndroid ? 10 : 20); - } - }); - } - - @override - void dispose() { - WidgetsBinding.instance.removeObserver(this); - super.dispose(); - } -} - // 设置国际化信息 Future _initTranslation() async => TranslationLoader.loadTranslation( - zhSource: "images/lan/lan_zh.json", - enSource: "images/lan/lan_en.json", - keySource: "images/lan/lan_keys.json", - ); + zhSource: "images/lan/lan_zh.json", + enSource: "images/lan/lan_en.json", + keySource: "images/lan/lan_keys.json", +); // 设置包名服务设备信息 Future _setCommonServices() async { @@ -167,43 +39,3 @@ Future _setCommonServices() async { await Get.putAsync(() => DeviceInfoService().init()); // Get.log(PlatformInfoService.to.info.version); } - -void openBlueScan() { - if (Platform.isIOS) { - print("有蓝牙权限开始扫描"); - // startScanAction(); - } else { - getMicrophonePermission().then((value) { - if (value) { - // 有权限 - print("有蓝牙权限开始扫描"); - // startScanAction(); - } else { - //没有权限 - openAppSettings(); //打开app系统设置 - } - }); - } -} - -// void startScanAction() { -// BlueManage().startScan(); -// } - -///请求蓝牙权限 -Future getMicrophonePermission() async { - // You can request multiple permissions at once. - Map statuses = await [ - Permission.bluetoothScan, - Permission.bluetoothConnect, - Permission.location, - ].request(); - - //granted 通过,denied 被拒绝,permanentlyDenied 拒绝且不在提示 - if (statuses[Permission.bluetoothScan]!.isGranted && - statuses[Permission.bluetoothConnect]!.isGranted && - statuses[Permission.location]!.isGranted) { - return true; - } - return false; -} diff --git a/star_lock/lib/main_dev.dart b/star_lock/lib/main_dev.dart new file mode 100644 index 00000000..c9275a23 --- /dev/null +++ b/star_lock/lib/main_dev.dart @@ -0,0 +1,8 @@ +import 'flavors.dart'; + +import 'main.dart' as runner; + +Future main() async { + F.appFlavor = Flavor.dev; + await runner.main(); +} diff --git a/star_lock/lib/main_pre.dart b/star_lock/lib/main_pre.dart new file mode 100644 index 00000000..d2e9fed6 --- /dev/null +++ b/star_lock/lib/main_pre.dart @@ -0,0 +1,8 @@ +import 'flavors.dart'; + +import 'main.dart' as runner; + +Future main() async { + F.appFlavor = Flavor.pre; + await runner.main(); +} diff --git a/star_lock/lib/main_sky.dart b/star_lock/lib/main_sky.dart new file mode 100644 index 00000000..ab526bfb --- /dev/null +++ b/star_lock/lib/main_sky.dart @@ -0,0 +1,8 @@ +import 'flavors.dart'; + +import 'main.dart' as runner; + +Future main() async { + F.appFlavor = Flavor.sky; + await runner.main(); +} diff --git a/star_lock/lib/main_xhj.dart b/star_lock/lib/main_xhj.dart new file mode 100644 index 00000000..8f92a4f0 --- /dev/null +++ b/star_lock/lib/main_xhj.dart @@ -0,0 +1,8 @@ +import 'flavors.dart'; + +import 'main.dart' as runner; + +Future main() async { + F.appFlavor = Flavor.xhj; + await runner.main(); +} diff --git a/star_lock/lib/mine/about/about_page.dart b/star_lock/lib/mine/about/about_page.dart index 82283c67..a9d58280 100644 --- a/star_lock/lib/mine/about/about_page.dart +++ b/star_lock/lib/mine/about/about_page.dart @@ -5,6 +5,7 @@ import 'package:star_lock/appRouters.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; import '../../app_settings/app_colors.dart'; +import '../../flavors.dart'; import '../../tools/commonItem.dart'; import '../../tools/titleAppBar.dart'; import '../../translations/trans_lib.dart'; @@ -38,12 +39,12 @@ class _AboutPageState extends State { ), SizedBox(height: 20.h), Text( - "星锁 1.0.0.09(preRelease-20240126-1)", + "${F.title} 1.0.0.09(preRelease-20240126-1)", style: TextStyle(fontSize: 24.sp, color: AppColors.blackColor), ), SizedBox(height: 20.h), Text( - Api.baseAddress, + F.apiPrefix, style: TextStyle(fontSize: 24.sp, color: AppColors.blackColor), ), SizedBox( diff --git a/star_lock/lib/network/api.dart b/star_lock/lib/network/api.dart index 5f658d46..2731df5b 100644 --- a/star_lock/lib/network/api.dart +++ b/star_lock/lib/network/api.dart @@ -1,11 +1,4 @@ abstract class Api { - static String baseAddress = "https://pre.lock.star-lock.cn"; //预发布环境 - // static String baseAddress = "https://dev.lock.star-lock.cn"; //联调环境 - // static String baseAddress = "http://192.168.1.15:8022"; //谢总本地 - // static String baseAddress = "https://ge.lock.star-lock.cn"; //葛工开发环境地址 - - final String baseUrl = "$baseAddress/api"; - // 登录注册 final String getVerificationCodeUrl = '/user/sendValidationCode'; final String registerUrl = '/user/register'; diff --git a/star_lock/lib/network/api_provider_base.dart b/star_lock/lib/network/api_provider_base.dart index fcbb8ab5..c19d9621 100644 --- a/star_lock/lib/network/api_provider_base.dart +++ b/star_lock/lib/network/api_provider_base.dart @@ -2,6 +2,7 @@ import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:get/get.dart'; import '../appRouters.dart'; +import '../flavors.dart'; import 'api.dart'; import 'request_interceptor.dart'; import 'request_interceptor_log.dart'; @@ -11,7 +12,7 @@ import 'response_interceptor_log.dart'; class BaseProvider extends GetConnect with Api { @override void onInit() { - httpClient.baseUrl = baseUrl; + httpClient.baseUrl = '${F.apiPrefix}/api'; httpClient.addRequestModifier(requestInterceptor); httpClient.addResponseModifier(responseInterceptor); httpClient.addRequestModifier(requestLogInterceptor); diff --git a/star_lock/test/widget_test.dart b/star_lock/test/widget_test.dart index 64ae1c59..1c7575bf 100644 --- a/star_lock/test/widget_test.dart +++ b/star_lock/test/widget_test.dart @@ -8,7 +8,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:star_lock/main.dart'; +import 'package:star_lock/app.dart'; void main() { testWidgets('Counter increments smoke test', (WidgetTester tester) async {