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 {