diff --git a/star_lock/.run/main_dev_dart.xml b/star_lock/.run/main_dev_dart.xml
new file mode 100644
index 00000000..0741c7cc
--- /dev/null
+++ b/star_lock/.run/main_dev_dart.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/star_lock/.run/main_pre_dart.xml b/star_lock/.run/main_pre_dart.xml
new file mode 100644
index 00000000..f3cf3086
--- /dev/null
+++ b/star_lock/.run/main_pre_dart.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/star_lock/.run/main_sky_dart.xml b/star_lock/.run/main_sky_dart.xml
new file mode 100644
index 00000000..cc2938e0
--- /dev/null
+++ b/star_lock/.run/main_sky_dart.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/star_lock/.run/main_xhj_dart.xml b/star_lock/.run/main_xhj_dart.xml
new file mode 100644
index 00000000..1eaab668
--- /dev/null
+++ b/star_lock/.run/main_xhj_dart.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
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
new file mode 100644
index 00000000..3b73699c
Binary files /dev/null and b/star_lock/assets/icon/dev.png differ
diff --git a/star_lock/assets/icon/pre.png b/star_lock/assets/icon/pre.png
new file mode 100644
index 00000000..c20eb514
Binary files /dev/null and b/star_lock/assets/icon/pre.png differ
diff --git a/star_lock/assets/icon/sky.png b/star_lock/assets/icon/sky.png
new file mode 100644
index 00000000..6c3676ae
Binary files /dev/null and b/star_lock/assets/icon/sky.png differ
diff --git a/star_lock/assets/icon/xhj.png b/star_lock/assets/icon/xhj.png
new file mode 100644
index 00000000..8aa598c7
Binary files /dev/null and b/star_lock/assets/icon/xhj.png differ
diff --git a/star_lock/flavorizr.yaml b/star_lock/flavorizr.yaml
new file mode 100644
index 00000000..9484655e
--- /dev/null
+++ b/star_lock/flavorizr.yaml
@@ -0,0 +1,54 @@
+# 用于编译出不同的APPID
+
+# 生成:意思是将本文件定义的配置,生成对应的代码,或者原生的配置、构建过程、文件资源等
+# 风味用法:dart run flutter_flavorizr -p ,
+
+# 以下行为都是覆盖,所以如果不是很清楚自己在做什么,请不要随意运行,以免覆盖有用的文件
+# 安卓图标: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 -
+
+# 项目运行说明:添加不同风味后,不能再使用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
+
+app:
+ android:
+ flavorDimensions: "flavor-type"
+
+flavors:
+ dev:
+ app:
+ name: "星锁-dev"
+ icon: "assets/icon/dev.png"
+ android:
+ applicationId: "com.starlock.lock.dev"
+ pre:
+ app:
+ name: "星锁"
+ icon: "assets/icon/pre.png"
+ android:
+ applicationId: "com.starlock.lock.pre"
+ sky:
+ app:
+ name: "锁通通"
+ icon: "assets/icon/sky.png"
+ android:
+ applicationId: "com.skychip.lock"
+ xhj:
+ app:
+ name: "鑫锁"
+ icon: "assets/icon/xhj.png"
+ android:
+ applicationId: "com.xhjcn.lock"
+ide: idea
diff --git a/star_lock/images/main/icon_lockLog_play.png b/star_lock/images/main/icon_lockLog_play.png
new file mode 100644
index 00000000..fec3120c
Binary files /dev/null and b/star_lock/images/main/icon_lockLog_play.png differ
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/lockDetail/doorLockLog/doorLockLog_logic.dart b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart
index ceb96444..12910890 100644
--- a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart
+++ b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart
@@ -271,9 +271,9 @@ class DoorLockLogLogic extends BaseGetXController {
super.onClose();
// 获取是否是演示模式 演示模式不获取接口
- var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
- if (isDemoMode == false) {
- _replySubscription.cancel();
- }
+ // var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
+ // if (isDemoMode == false) {
+ // _replySubscription.cancel();
+ // }
}
}
diff --git a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart
index 3c166332..57750ac2 100644
--- a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart
+++ b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart
@@ -1,8 +1,10 @@
import 'package:flutter/material.dart';
-import 'package:flutter_advanced_calendar/flutter_advanced_calendar.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
+import 'package:star_lock/appRouters.dart';
import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_logic.dart';
+import 'package:star_lock/tools/advancedCalendar/src/widget.dart';
+import 'package:star_lock/tools/menuItem/xsDropDownWidget.dart';
import 'package:timelines/timelines.dart';
import '../../../app_settings/app_colors.dart';
@@ -64,10 +66,17 @@ class _DoorLockLogPageState extends State {
endIndent: 30.w,
),
eventDropDownWidget(),
- SizedBox(
- height: 20.h,
- ),
- Expanded(child: timeLineView()),
+ Expanded(child: timeLineView())
+ // Expanded(
+ // // 添加 Expanded 来让 ListView 占据剩余的空间
+ // child: ListView.builder(
+ // itemBuilder: (context, index) {
+ // // 返回你想要在 ListView 中显示的小部件
+ // return timeLineView();
+ // },
+ // itemCount: 5, // 替换成你的列表项数量
+ // ),
+ // ),
],
),
);
@@ -115,41 +124,24 @@ class _DoorLockLogPageState extends State {
//事件下拉框组件
Widget eventDropDownWidget() {
- return Row(children: [
- SizedBox(
- width: 50.w,
+ return Container(
+ margin: EdgeInsets.only(top: 20.h, left: 30.w, bottom: 20.h),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.start,
+ children: [
+ Obx(() => XSDropDownWidget(
+ items: state.getDropDownItemList,
+ value: state.dropdownValue.value,
+ valueChanged: (value) {})),
+ ],
),
- Obx(() => DropdownButton(
- value: state.dropdownValue.value,
- icon: const Icon(Icons.arrow_drop_down),
- iconSize: 40,
- // elevation: 12,
- style: TextStyle(
- fontSize: 26.sp,
- color: Colors.black,
- fontWeight: FontWeight.w600),
- iconEnabledColor: Colors.grey,
- underline: Container(
- height: 0,
- ),
- onChanged: (newValue) {
- state.dropdownValue.value = newValue!;
- },
- items: state.dropDownItemList.obs
- .map>((item) {
- return DropdownMenuItem(
- value: item,
- child: Text(item),
- );
- }).toList(),
- ))
- ]);
+ );
}
//时间轴组件
Widget timeLineView() {
return Container(
- margin: EdgeInsets.only(left: 20.w, right: 20.w, bottom: 20.h),
+ margin: EdgeInsets.only(left: 20.w, right: 20.w, bottom: 20.h, top: 20.h),
//给contain设置一个10像素的圆角
decoration: BoxDecoration(
color: Colors.white, borderRadius: BorderRadius.circular(16.w)),
@@ -168,11 +160,31 @@ class _DoorLockLogPageState extends State {
color: Colors.black,
fontSize: 24.sp,
fontWeight: FontWeight.w600)),
- Image(
- image: const AssetImage(
- 'images/main/icon_lockDetail_monitoringvoiceFrist.png'),
- width: 260.w,
- height: 260.h,
+ GestureDetector(
+ onTap: () {
+ Get.toNamed(Routers.videoLogDetailPage);
+ },
+ child: Stack(
+ children: [
+ Image(
+ image: const AssetImage(
+ 'images/main/icon_lockDetail_monitoringvoiceFrist.png'),
+ width: 260.w,
+ height: 260.h,
+ ),
+ //在图片上添加一个三角视频图标
+ Positioned(
+ top: 200.h,
+ left: 10.w,
+ child: Image(
+ image: const AssetImage(
+ 'images/main/icon_lockLog_play.png'),
+ width: 24.w,
+ height: 20.w,
+ ),
+ ),
+ ],
+ ),
),
],
),
diff --git a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart
index c37bece3..e3b30267 100644
--- a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart
+++ b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart
@@ -1,5 +1,7 @@
-import 'package:flutter_advanced_calendar/flutter_advanced_calendar.dart';
+import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
+import 'package:star_lock/tools/advancedCalendar/src/controller.dart';
+import 'package:star_lock/tools/menuItem/dropDownItem.dart';
import '../../lockMian/entity/lockListInfo_entity.dart';
import '../electronicKey/electronicKeyDetail/keyOperationRecordEntity.dart';
@@ -14,8 +16,14 @@ class DoorLockLogState {
DateTime(2024, 10, 10),
];
var dropdownValue = '全部事件'.obs;
- final List dropDownItemList =
- ['全部事件', '门锁异常', '有人出现', '有人按门铃', '一次性密码开门'].obs;
+ List getDropDownItemList = [
+ DropDownItem(itemTitle: "全部事件", itemValue: '0', isCheked: false),
+ DropDownItem(itemTitle: "开锁事件", itemValue: '1', isCheked: false),
+ DropDownItem(itemTitle: "异常事件", itemValue: '2', isCheked: false),
+ DropDownItem(itemTitle: "门锁事件", itemValue: '3', isCheked: false),
+ DropDownItem(itemTitle: "视频事件", itemValue: '4', isCheked: false),
+ ];
+
var currentStep = 0.obs;
DoorLockLogState() {
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 0f0096cc..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 ee82aa85..668add51 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/lib/tools/advancedCalendar/flutter_advanced_calendar.dart b/star_lock/lib/tools/advancedCalendar/flutter_advanced_calendar.dart
new file mode 100644
index 00000000..d7dff31b
--- /dev/null
+++ b/star_lock/lib/tools/advancedCalendar/flutter_advanced_calendar.dart
@@ -0,0 +1,4 @@
+library flutter_advanced_calendar;
+
+export 'src/controller.dart';
+export 'src/widget.dart';
diff --git a/star_lock/lib/tools/advancedCalendar/src/controller.dart b/star_lock/lib/tools/advancedCalendar/src/controller.dart
new file mode 100644
index 00000000..399ec83a
--- /dev/null
+++ b/star_lock/lib/tools/advancedCalendar/src/controller.dart
@@ -0,0 +1,15 @@
+import 'package:flutter/widgets.dart';
+
+import 'datetime_util.dart';
+
+/// Advanced Calendar controller that manage selection date state.
+class AdvancedCalendarController extends ValueNotifier {
+ /// Generates controller with custom date selected.
+ AdvancedCalendarController(DateTime value) : super(value);
+
+ /// Generates controller with today date selected.
+ AdvancedCalendarController.today() : this(DateTime.now().toZeroTime());
+
+ @override
+ set value(DateTime newValue) => super.value = newValue.toZeroTime();
+}
diff --git a/star_lock/lib/tools/advancedCalendar/src/date_box.dart b/star_lock/lib/tools/advancedCalendar/src/date_box.dart
new file mode 100644
index 00000000..185b5d69
--- /dev/null
+++ b/star_lock/lib/tools/advancedCalendar/src/date_box.dart
@@ -0,0 +1,94 @@
+part of 'widget.dart';
+
+/// Unit of calendar.
+class DateBox extends StatelessWidget {
+ const DateBox({
+ Key? key,
+ required this.child,
+ this.color,
+ this.width = 24.0,
+ this.height = 24.0,
+ this.borderRadius = const BorderRadius.all(Radius.circular(8.0)),
+ this.onPressed,
+ this.showDot = false,
+ this.isSelected = false,
+ this.isToday = false,
+ this.hasEvent = false,
+ }) : super(key: key);
+
+ /// Child widget.
+ final Widget child;
+
+ /// Background color.
+ final Color? color;
+
+ /// Widget width.
+ final double width;
+
+ /// Widget height.
+ final double height;
+
+ /// Container border radius.
+ final BorderRadius borderRadius;
+
+ /// Pressed callback function.
+ final VoidCallback? onPressed;
+
+ /// Show DateBox event in container.
+ final bool showDot;
+
+ /// DateBox is today.
+ final bool isToday;
+
+ /// DateBox selection.
+ final bool isSelected;
+
+ /// Show event in DateBox.
+ final bool hasEvent;
+
+ @override
+ Widget build(BuildContext context) {
+ final theme = Theme.of(context);
+ return UnconstrainedBox(
+ alignment: Alignment.center,
+ child: InkResponse(
+ onTap: onPressed,
+ radius: 16.0,
+ borderRadius: borderRadius,
+ highlightShape: BoxShape.rectangle,
+ child: AnimatedContainer(
+ duration: const Duration(milliseconds: 150),
+ width: width,
+ height: height,
+ alignment: Alignment.center,
+ decoration: BoxDecoration(
+ color: isSelected
+ ? theme.primaryColor
+ : isToday
+ ? theme.highlightColor
+ : null,
+ borderRadius: borderRadius,
+ ),
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ child,
+ if (showDot && hasEvent)
+ Container(
+ margin: const EdgeInsets.all(2.0),
+ height: 4,
+ width: 4,
+ decoration: BoxDecoration(
+ shape: BoxShape.circle,
+ color: isSelected
+ ? theme.colorScheme.onPrimary
+ : theme.colorScheme.secondary,
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ );
+ }
+}
diff --git a/star_lock/lib/tools/advancedCalendar/src/datetime_util.dart b/star_lock/lib/tools/advancedCalendar/src/datetime_util.dart
new file mode 100644
index 00000000..ce4e2cd9
--- /dev/null
+++ b/star_lock/lib/tools/advancedCalendar/src/datetime_util.dart
@@ -0,0 +1,56 @@
+extension DateTimeUtil on DateTime {
+ /// Generate a new DateTime instance with a zero time.
+ DateTime toZeroTime() => DateTime.utc(year, month, day, 12);
+
+ int findWeekIndex(List dates) {
+ return dates.indexWhere(isAtSameMomentAs) ~/ 7;
+ }
+
+ /// Calculates first week date (Sunday) from this date.
+ DateTime firstDayOfWeek({int? startWeekDay}) {
+ final utcDate = DateTime.utc(year, month, day, 12);
+ if (startWeekDay != null && startWeekDay < 7) {
+ return utcDate.subtract(Duration(days: utcDate.weekday - startWeekDay));
+ }
+ return utcDate.subtract(Duration(days: utcDate.weekday % 7));
+ }
+
+ /// Generates 7 dates according to this date.
+ /// (Supposed that this date is result of [firstDayOfWeek])
+ List weekDates() {
+ return List.generate(
+ 7,
+ (index) => add(Duration(days: index)),
+ growable: false,
+ );
+ }
+
+ /// Generates list of list with [DateTime]
+ /// according to [date] and [weeksAmount].
+ /// gives the beginning of the day of the week [startWeekDay]
+ List> generateWeeks(int weeksAmount, {int? startWeekDay}) {
+ final firstViewDate = firstDayOfWeek(startWeekDay: startWeekDay).subtract(
+ Duration(
+ days: (weeksAmount ~/ 2) * 7,
+ ),
+ );
+
+ return List.generate(
+ weeksAmount,
+ (weekIndex) {
+ final firstDateOfNextWeek = firstViewDate.add(
+ Duration(
+ days: weekIndex * 7,
+ ),
+ );
+
+ return firstDateOfNextWeek.weekDates();
+ },
+ growable: false,
+ );
+ }
+
+ bool isSameDate(DateTime other) {
+ return year == other.year && month == other.month && day == other.day;
+ }
+}
diff --git a/star_lock/lib/tools/advancedCalendar/src/handlebar.dart b/star_lock/lib/tools/advancedCalendar/src/handlebar.dart
new file mode 100644
index 00000000..20154beb
--- /dev/null
+++ b/star_lock/lib/tools/advancedCalendar/src/handlebar.dart
@@ -0,0 +1,39 @@
+part of 'widget.dart';
+
+class HandleBar extends StatelessWidget {
+ const HandleBar({
+ Key? key,
+ this.decoration,
+ this.margin = const EdgeInsets.only(
+ top: 8.0,
+ ),
+ this.onPressed,
+ }) : super(key: key);
+
+ final BoxDecoration? decoration;
+ final EdgeInsetsGeometry margin;
+ final VoidCallback? onPressed;
+
+ @override
+ Widget build(BuildContext context) {
+ return GestureDetector(
+ onTap: onPressed,
+ behavior: HitTestBehavior.translucent,
+ child: Container(
+ margin: margin,
+ alignment: Alignment.center,
+ child: FractionallySizedBox(
+ widthFactor: 0.1,
+ child: Container(
+ height: 4.0,
+ decoration: decoration ??
+ BoxDecoration(
+ color: Theme.of(context).dividerColor,
+ borderRadius: BorderRadius.circular(2.0),
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+}
diff --git a/star_lock/lib/tools/advancedCalendar/src/header.dart b/star_lock/lib/tools/advancedCalendar/src/header.dart
new file mode 100644
index 00000000..1a09140e
--- /dev/null
+++ b/star_lock/lib/tools/advancedCalendar/src/header.dart
@@ -0,0 +1,63 @@
+part of 'widget.dart';
+
+class Header extends StatelessWidget {
+ const Header({
+ Key? key,
+ required this.monthDate,
+ this.margin = const EdgeInsets.only(
+ left: 16.0,
+ right: 8.0,
+ top: 4.0,
+ bottom: 4.0,
+ ),
+ this.onPressed,
+ this.dateStyle,
+ this.todayStyle,
+ }) : super(key: key);
+
+ static final _dateFormatter = DateFormat().add_yMMMM();
+ // static final _dateFormatter = DateFormat('MM月dd日', 'zh_CN');
+ final DateTime monthDate;
+ final EdgeInsetsGeometry margin;
+ final VoidCallback? onPressed;
+ final TextStyle? dateStyle;
+ final TextStyle? todayStyle;
+
+ @override
+ Widget build(BuildContext context) {
+ final theme = Theme.of(context);
+ // initializeDateFormatting('zh_CN', null);
+
+ return Container(
+ margin: margin,
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ // Text(
+ // _dateFormatter.format(monthDate),
+ // style: dateStyle ?? theme.textTheme.titleMedium,
+ // ),
+ InkWell(
+ onTap: onPressed,
+ borderRadius: const BorderRadius.all(
+ Radius.circular(4.0),
+ ),
+ child: Padding(
+ padding: const EdgeInsets.symmetric(
+ horizontal: 8.0,
+ vertical: 4.0,
+ ),
+ child: Text(
+ '今天',
+ style: TextStyle(
+ color: Colors.black,
+ fontSize: 24.sp,
+ fontWeight: FontWeight.w600),
+ ),
+ ),
+ ),
+ ],
+ ),
+ );
+ }
+}
diff --git a/star_lock/lib/tools/advancedCalendar/src/month_view.dart b/star_lock/lib/tools/advancedCalendar/src/month_view.dart
new file mode 100644
index 00000000..fd1a0598
--- /dev/null
+++ b/star_lock/lib/tools/advancedCalendar/src/month_view.dart
@@ -0,0 +1,62 @@
+part of 'widget.dart';
+
+class MonthView extends StatelessWidget {
+ const MonthView({
+ Key? key,
+ required this.monthView,
+ required this.todayDate,
+ required this.selectedDate,
+ required this.weekLineHeight,
+ required this.weeksAmount,
+ required this.innerDot,
+ this.onChanged,
+ this.events,
+ required this.keepLineSize,
+ this.textStyle,
+ }) : super(key: key);
+
+ final ViewRange monthView;
+ final DateTime? todayDate;
+ final DateTime selectedDate;
+ final double weekLineHeight;
+ final int weeksAmount;
+ final ValueChanged? onChanged;
+ final List? events;
+ final bool innerDot;
+ final bool keepLineSize;
+ final TextStyle? textStyle;
+
+ @override
+ Widget build(BuildContext context) {
+ final index = selectedDate.findWeekIndex(monthView.dates);
+ final offset = index / (weeksAmount - 1) * 2 - 1.0;
+
+ return OverflowBox(
+ alignment: Alignment(0, offset),
+ minHeight: weekLineHeight,
+ maxHeight: weekLineHeight * weeksAmount,
+ child: Column(
+ mainAxisSize: MainAxisSize.min,
+ children: List.generate(
+ 6,
+ (weekIndex) {
+ final weekStart = weekIndex * 7;
+
+ return WeekView(
+ innerDot: innerDot,
+ dates: monthView.dates.sublist(weekStart, weekStart + 7),
+ selectedDate: selectedDate,
+ highlightMonth: monthView.firstDay.month,
+ lineHeight: weekLineHeight,
+ onChanged: onChanged,
+ events: events,
+ keepLineSize: keepLineSize,
+ textStyle: textStyle,
+ );
+ },
+ growable: false,
+ ),
+ ),
+ );
+ }
+}
diff --git a/star_lock/lib/tools/advancedCalendar/src/month_view_bean.dart b/star_lock/lib/tools/advancedCalendar/src/month_view_bean.dart
new file mode 100644
index 00000000..fef38b42
--- /dev/null
+++ b/star_lock/lib/tools/advancedCalendar/src/month_view_bean.dart
@@ -0,0 +1,40 @@
+part of 'widget.dart';
+
+class ViewRange {
+ const ViewRange._(this.firstDay, this.dates);
+
+ /// Creates custom filled [ViewRange] instance.
+ const ViewRange.custom(
+ DateTime firstDay,
+ List dates,
+ ) : this._(firstDay, dates);
+
+ /// Generates [ViewRange] instance based on [date],
+ /// number of [month] and [weeksAmount].
+ /// gives the beginning of the day of the week [startWeekDay]
+ factory ViewRange.generateDates(
+ DateTime date,
+ int month,
+ int weeksAmount, {
+ int? startWeekDay,
+ }) {
+ final firstMonthDate = DateTime.utc(date.year, month, 1);
+ final firstViewDate =
+ firstMonthDate.firstDayOfWeek(startWeekDay: startWeekDay);
+
+ return ViewRange._(
+ firstMonthDate,
+ List.generate(
+ weeksAmount * 7,
+ (index) => firstViewDate.add(Duration(days: index)),
+ growable: false,
+ ),
+ );
+ }
+
+ /// Month view index.
+ final DateTime firstDay;
+
+ /// Month view dates.
+ final List dates;
+}
diff --git a/star_lock/lib/tools/advancedCalendar/src/week_days.dart b/star_lock/lib/tools/advancedCalendar/src/week_days.dart
new file mode 100644
index 00000000..e1f8ea87
--- /dev/null
+++ b/star_lock/lib/tools/advancedCalendar/src/week_days.dart
@@ -0,0 +1,36 @@
+part of 'widget.dart';
+
+/// Week day names line.
+class WeekDays extends StatelessWidget {
+ const WeekDays({
+ Key? key,
+ this.weekNames = const ['日', '一', '二', '三', '四', '五', '六'],
+ this.style,
+ required this.keepLineSize,
+ }) : assert(weekNames.length == 7, '`weekNames` must have length 7'),
+ super(key: key);
+
+ /// Week day names.
+ final List weekNames;
+
+ /// Text style.
+ final TextStyle? style;
+
+ final bool keepLineSize;
+
+ @override
+ Widget build(BuildContext context) {
+ return DefaultTextStyle(
+ style: style!,
+ child: Row(
+ mainAxisSize: MainAxisSize.max,
+ mainAxisAlignment: MainAxisAlignment.spaceAround,
+ children: List.generate(weekNames.length, (index) {
+ return DateBox(
+ child: Text(weekNames[index]),
+ );
+ }),
+ ),
+ );
+ }
+}
diff --git a/star_lock/lib/tools/advancedCalendar/src/week_view.dart b/star_lock/lib/tools/advancedCalendar/src/week_view.dart
new file mode 100644
index 00000000..725d04e3
--- /dev/null
+++ b/star_lock/lib/tools/advancedCalendar/src/week_view.dart
@@ -0,0 +1,137 @@
+part of 'widget.dart';
+
+class WeekView extends StatelessWidget {
+ WeekView({
+ Key? key,
+ required this.dates,
+ required this.selectedDate,
+ required this.lineHeight,
+ this.highlightMonth,
+ this.onChanged,
+ this.events,
+ required this.innerDot,
+ required this.keepLineSize,
+ this.textStyle,
+ }) : super(key: key);
+
+ final DateTime todayDate = DateTime.now().toZeroTime();
+ final List dates;
+ final double lineHeight;
+ final int? highlightMonth;
+ final DateTime selectedDate;
+ final ValueChanged? onChanged;
+ final List? events;
+ final bool innerDot;
+ final bool keepLineSize;
+ final TextStyle? textStyle;
+
+ @override
+ Widget build(BuildContext context) {
+ final theme = Theme.of(context);
+ return SizedBox(
+ height: lineHeight,
+ child: Row(
+ mainAxisSize: MainAxisSize.max,
+ mainAxisAlignment: MainAxisAlignment.spaceAround,
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: List.generate(
+ 7,
+ (dayIndex) {
+ final date = dates[dayIndex];
+ final isToday = date.isAtSameMomentAs(todayDate);
+ final isSelected = date.isAtSameMomentAs(selectedDate);
+ final isHighlight = highlightMonth == date.month;
+
+ final hasEvent =
+ events!.indexWhere((element) => element.isSameDate(date));
+
+ if (keepLineSize) {
+ return InkResponse(
+ onTap: onChanged != null ? () => onChanged!(date) : null,
+ child: Container(
+ height: 36,
+ width: 36,
+ decoration: BoxDecoration(
+ color: isSelected
+ ? theme.primaryColor
+ : isToday
+ ? theme.highlightColor
+ : null,
+ borderRadius: BorderRadius.circular(18),
+ shape: BoxShape.rectangle,
+ ),
+ child: Column(
+ children: [
+ Text(
+ '${date.day}',
+ style: textStyle?.copyWith(
+ color: isSelected || isToday
+ ? theme.colorScheme.onPrimary
+ : isHighlight || highlightMonth == null
+ ? null
+ : theme.disabledColor,
+ fontWeight:
+ isSelected && textStyle?.fontWeight != null
+ ? FontWeight
+ .values[textStyle!.fontWeight!.index + 2]
+ : textStyle?.fontWeight,
+ ),
+ ),
+ if (!hasEvent.isNegative)
+ Container(
+ height: 4,
+ width: 4,
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.circular(50),
+ color: isSelected
+ ? theme.colorScheme.onPrimary
+ : theme.colorScheme.secondary,
+ ),
+ )
+ ],
+ ),
+ ),
+ );
+ }
+
+ return Column(
+ mainAxisAlignment: MainAxisAlignment.spaceEvenly,
+ children: [
+ DateBox(
+ width: innerDot ? 32 : 24,
+ height: innerDot ? 32 : 24,
+ showDot: innerDot,
+ onPressed: onChanged != null ? () => onChanged!(date) : null,
+ isSelected: isSelected,
+ isToday: isToday,
+ hasEvent: !hasEvent.isNegative,
+ child: Text(
+ '${date.day}',
+ maxLines: 1,
+ style: TextStyle(
+ color: isSelected || isToday
+ ? theme.colorScheme.onPrimary
+ : isHighlight || highlightMonth == null
+ ? null
+ : theme.disabledColor,
+ ),
+ ),
+ ),
+ if (!innerDot && !hasEvent.isNegative)
+ Container(
+ height: 6,
+ width: 6,
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.circular(50),
+ color: theme.primaryColor,
+ ),
+ )
+ ],
+ );
+ },
+ growable: false,
+ ),
+ ),
+ );
+ }
+}
diff --git a/star_lock/lib/tools/advancedCalendar/src/widget.dart b/star_lock/lib/tools/advancedCalendar/src/widget.dart
new file mode 100644
index 00000000..0df0da71
--- /dev/null
+++ b/star_lock/lib/tools/advancedCalendar/src/widget.dart
@@ -0,0 +1,420 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+import 'package:intl/date_symbol_data_local.dart';
+import 'package:intl/intl.dart';
+
+import 'controller.dart';
+import 'datetime_util.dart';
+
+part 'date_box.dart';
+part 'handlebar.dart';
+part 'header.dart';
+part 'month_view.dart';
+part 'month_view_bean.dart';
+part 'week_days.dart';
+part 'week_view.dart';
+
+/// Advanced Calendar widget.
+class AdvancedCalendar extends StatefulWidget {
+ const AdvancedCalendar({
+ Key? key,
+ this.controller,
+ this.startWeekDay,
+ this.events,
+ this.weekLineHeight = 32.0,
+ this.preloadMonthViewAmount = 13,
+ this.preloadWeekViewAmount = 21,
+ this.weeksInMonthViewAmount = 6,
+ this.todayStyle,
+ this.headerStyle,
+ this.onHorizontalDrag,
+ this.innerDot = false,
+ this.keepLineSize = false,
+ this.calendarTextStyle,
+ }) : assert(
+ keepLineSize && innerDot ||
+ innerDot && !keepLineSize ||
+ !innerDot && !keepLineSize,
+ 'keepLineSize should be used only when innerDot is true',
+ ),
+ super(key: key);
+
+ /// Calendar selection date controller.
+ final AdvancedCalendarController? controller;
+
+ /// Executes on horizontal calendar swipe. Allows to load additional dates.
+ final Function(DateTime)? onHorizontalDrag;
+
+ /// Height of week line.
+ final double weekLineHeight;
+
+ /// Amount of months in month view to preload.
+ final int preloadMonthViewAmount;
+
+ /// Amount of weeks in week view to preload.
+ final int preloadWeekViewAmount;
+
+ /// Weeks lines amount in month view.
+ final int weeksInMonthViewAmount;
+
+ /// List of points for the week and month
+ final List? events;
+
+ /// The first day of the week starts[0-6]
+ final int? startWeekDay;
+
+ /// Style of headers date
+ final TextStyle? headerStyle;
+
+ /// Style of Today button
+ final TextStyle? todayStyle;
+
+ /// Show DateBox event in container.
+ final bool innerDot;
+
+ /// Keeps consistent line size for dates
+ /// Can't be used without innerDot
+ final bool keepLineSize;
+
+ /// Text style for dates in calendar
+ final TextStyle? calendarTextStyle;
+
+ @override
+ _AdvancedCalendarState createState() => _AdvancedCalendarState();
+}
+
+class _AdvancedCalendarState extends State
+ with SingleTickerProviderStateMixin {
+ late ValueNotifier _monthViewCurrentPage;
+ late AnimationController _animationController;
+ late AdvancedCalendarController _controller;
+ late double _animationValue;
+ late List _monthRangeList;
+ late List> _weekRangeList;
+
+ PageController? _monthPageController;
+ PageController? _weekPageController;
+ Offset? _captureOffset;
+ DateTime? _todayDate;
+ List? _weekNames;
+
+ @override
+ void initState() {
+ super.initState();
+
+ final monthPageIndex = widget.preloadMonthViewAmount ~/ 2;
+
+ _monthViewCurrentPage = ValueNotifier(monthPageIndex);
+
+ _monthPageController = PageController(
+ initialPage: monthPageIndex,
+ );
+
+ final weekPageIndex = widget.preloadWeekViewAmount ~/ 2;
+
+ _weekPageController = PageController(
+ initialPage: weekPageIndex,
+ );
+
+ _animationController = AnimationController(
+ vsync: this,
+ duration: const Duration(milliseconds: 300),
+ value: 0,
+ );
+
+ _animationValue = _animationController.value;
+
+ _controller = widget.controller ?? AdvancedCalendarController.today();
+ _todayDate = _controller.value;
+
+ _monthRangeList = List.generate(
+ widget.preloadMonthViewAmount,
+ (index) => ViewRange.generateDates(
+ _todayDate!,
+ _todayDate!.month + (index - _monthPageController!.initialPage),
+ widget.weeksInMonthViewAmount,
+ startWeekDay: widget.startWeekDay,
+ ),
+ );
+
+ _weekRangeList = _controller.value.generateWeeks(
+ widget.preloadWeekViewAmount,
+ startWeekDay: widget.startWeekDay,
+ );
+ _controller.addListener(() {
+ _weekRangeList = _controller.value.generateWeeks(
+ widget.preloadWeekViewAmount,
+ startWeekDay: widget.startWeekDay,
+ );
+ _weekPageController!.jumpToPage(widget.preloadWeekViewAmount ~/ 2);
+ });
+ if (widget.startWeekDay != null && widget.startWeekDay! < 7) {
+ final time = _controller.value.subtract(
+ Duration(days: _controller.value.weekday - widget.startWeekDay!),
+ );
+ final list = List.generate(
+ 8,
+ (index) => time.add(Duration(days: index * 1)),
+ ).toList();
+ // _weekNames = List.generate(7, (index) {
+ // return DateFormat("EEEE").format(list[index]).split('').first;
+ // }
+ // );
+ //by DaisyWu 修改源文件为中文环境下 周一到周日
+ _weekNames = List.generate(7, (index) {
+ String fullWeekName =
+ DateFormat.E('zh_CN').format(list[index]); // 获取星期的完整形式
+ return fullWeekName
+ .substring(fullWeekName.length - 1); // 获取最后一个字符,即星期的简称
+ });
+ }
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ final theme = Theme.of(context);
+ return Material(
+ color: Colors.transparent,
+ child: DefaultTextStyle.merge(
+ style: theme.textTheme.bodyMedium,
+ child: GestureDetector(
+ onVerticalDragStart: (details) {
+ _captureOffset = details.globalPosition;
+ },
+ onVerticalDragUpdate: (details) {
+ final moveOffset = details.globalPosition;
+ final diffY = moveOffset.dy - _captureOffset!.dy;
+
+ _animationController.value =
+ _animationValue + diffY / (widget.weekLineHeight * 5);
+ },
+ onVerticalDragEnd: (details) => _handleFinishDrag(),
+ onVerticalDragCancel: _handleFinishDrag,
+ child: Container(
+ color: Colors.transparent,
+ child: Column(
+ mainAxisSize: MainAxisSize.min,
+ mainAxisAlignment: MainAxisAlignment.start,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ ValueListenableBuilder(
+ valueListenable: _monthViewCurrentPage,
+ builder: (_, value, __) {
+ return Header(
+ monthDate:
+ _monthRangeList[_monthViewCurrentPage.value].firstDay,
+ onPressed: _handleTodayPressed,
+ dateStyle: widget.headerStyle,
+ todayStyle: widget.todayStyle,
+ );
+ },
+ ),
+ WeekDays(
+ style: theme.textTheme.bodyLarge?.copyWith(
+ color: Colors.black,
+ ),
+ keepLineSize: widget.keepLineSize,
+ weekNames: _weekNames != null
+ ? _weekNames!
+ : const ['日', '一', '二', '三', '四', '五', '六'],
+ ),
+ AnimatedBuilder(
+ animation: _animationController,
+ builder: (_, __) {
+ final height = Tween(
+ begin: widget.weekLineHeight,
+ end:
+ widget.weekLineHeight * widget.weeksInMonthViewAmount,
+ ).transform(_animationController.value);
+ return SizedBox(
+ height: height,
+ child: ValueListenableBuilder(
+ valueListenable: _controller,
+ builder: (_, selectedDate, __) {
+ return Stack(
+ alignment: Alignment.center,
+ children: [
+ IgnorePointer(
+ ignoring: _animationController.value == 0.0,
+ child: Opacity(
+ opacity: Tween(
+ begin: 0.0,
+ end: 1.0,
+ ).evaluate(_animationController),
+ child: PageView.builder(
+ onPageChanged: (pageIndex) {
+ if (widget.onHorizontalDrag != null) {
+ widget.onHorizontalDrag!(
+ _monthRangeList[pageIndex].firstDay,
+ );
+ }
+ _monthViewCurrentPage.value = pageIndex;
+ },
+ controller: _monthPageController,
+ physics: _animationController.value == 1.0
+ ? const AlwaysScrollableScrollPhysics()
+ : const NeverScrollableScrollPhysics(),
+ itemCount: _monthRangeList.length,
+ itemBuilder: (_, pageIndex) {
+ return MonthView(
+ innerDot: widget.innerDot,
+ monthView: _monthRangeList[pageIndex],
+ todayDate: _todayDate,
+ selectedDate: selectedDate,
+ weekLineHeight: widget.weekLineHeight,
+ weeksAmount:
+ widget.weeksInMonthViewAmount,
+ onChanged: _handleDateChanged,
+ events: widget.events,
+ keepLineSize: widget.keepLineSize,
+ textStyle: widget.calendarTextStyle,
+ );
+ },
+ ),
+ ),
+ ),
+ ValueListenableBuilder(
+ valueListenable: _monthViewCurrentPage,
+ builder: (_, pageIndex, __) {
+ final index = selectedDate.findWeekIndex(
+ _monthRangeList[_monthViewCurrentPage.value]
+ .dates,
+ );
+ final offset = index /
+ (widget.weeksInMonthViewAmount - 1) *
+ 2 -
+ 1.0;
+ return Align(
+ alignment: Alignment(0.0, offset),
+ child: IgnorePointer(
+ ignoring:
+ _animationController.value == 1.0,
+ child: Opacity(
+ opacity: Tween(
+ begin: 1.0,
+ end: 0.0,
+ ).evaluate(_animationController),
+ child: SizedBox(
+ height: widget.weekLineHeight,
+ child: PageView.builder(
+ onPageChanged: (indexPage) {
+ final pageIndex =
+ _monthRangeList.indexWhere(
+ (index) =>
+ index.firstDay.month ==
+ _weekRangeList[indexPage]
+ .first
+ .month,
+ );
+
+ if (widget.onHorizontalDrag !=
+ null) {
+ widget.onHorizontalDrag!(
+ _monthRangeList[pageIndex]
+ .firstDay,
+ );
+ }
+ _monthViewCurrentPage.value =
+ pageIndex;
+ },
+ controller: _weekPageController,
+ itemCount: _weekRangeList.length,
+ physics: _closeMonthScroll(),
+ itemBuilder: (context, index) {
+ return WeekView(
+ innerDot: widget.innerDot,
+ dates: _weekRangeList[index],
+ selectedDate: selectedDate,
+ lineHeight:
+ widget.weekLineHeight,
+ onChanged:
+ _handleWeekDateChanged,
+ events: widget.events,
+ keepLineSize:
+ widget.keepLineSize,
+ textStyle:
+ widget.calendarTextStyle,
+ );
+ },
+ ),
+ ),
+ ),
+ ),
+ );
+ },
+ ),
+ ],
+ );
+ },
+ ),
+ );
+ },
+ ),
+ // HandleBar(
+ // onPressed: () async {
+ // await _animationController.forward();
+ // _animationValue = 1.0;
+ // },
+ // ),
+ ],
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+
+ @override
+ void dispose() {
+ _animationController.dispose();
+ _monthPageController!.dispose();
+ _monthViewCurrentPage.dispose();
+
+ if (widget.controller == null) {
+ _controller.dispose();
+ }
+
+ super.dispose();
+ }
+
+ void _handleWeekDateChanged(DateTime date) {
+ _handleDateChanged(date);
+
+ _monthViewCurrentPage.value = _monthRangeList
+ .lastIndexWhere((monthRange) => monthRange.dates.contains(date));
+ }
+
+ void _handleDateChanged(DateTime date) {
+ _controller.value = date;
+ }
+
+ void _handleFinishDrag() async {
+ _captureOffset = null;
+
+ if (_animationController.value > 0.5) {
+ await _animationController.forward();
+ _animationValue = 1.0;
+ } else {
+ await _animationController.reverse();
+ _animationValue = 0.0;
+ }
+ }
+
+ void _handleTodayPressed() {
+ _controller.value = DateTime.now().toZeroTime();
+
+ _monthPageController!.jumpToPage(widget.preloadMonthViewAmount ~/ 2);
+ _weekPageController!.jumpToPage(widget.preloadWeekViewAmount ~/ 2);
+ }
+
+ ScrollPhysics _closeMonthScroll() {
+ if ((_monthViewCurrentPage.value ==
+ (widget.preloadMonthViewAmount ~/ 2) + 3 ||
+ _monthViewCurrentPage.value ==
+ (widget.preloadMonthViewAmount ~/ 2) - 3)) {
+ return const NeverScrollableScrollPhysics();
+ } else {
+ return const AlwaysScrollableScrollPhysics();
+ }
+ }
+}
diff --git a/star_lock/lib/tools/menuItem/dropDownItem.dart b/star_lock/lib/tools/menuItem/dropDownItem.dart
new file mode 100644
index 00000000..b08b44c3
--- /dev/null
+++ b/star_lock/lib/tools/menuItem/dropDownItem.dart
@@ -0,0 +1,14 @@
+/// 通用菜单项
+class DropDownItem {
+ // 显示的文本
+ String itemTitle = '';
+ // 选中的值
+ dynamic itemValue;
+ // 是否选中
+ bool isCheked = false;
+
+ DropDownItem(
+ {required this.itemTitle,
+ required this.itemValue,
+ required this.isCheked});
+}
diff --git a/star_lock/lib/tools/menuItem/xsDropDownWidget.dart b/star_lock/lib/tools/menuItem/xsDropDownWidget.dart
new file mode 100644
index 00000000..25ea1eb4
--- /dev/null
+++ b/star_lock/lib/tools/menuItem/xsDropDownWidget.dart
@@ -0,0 +1,161 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+import 'package:star_lock/app_settings/app_colors.dart';
+import 'package:star_lock/tools/menuItem/dropDownItem.dart';
+
+/// @author baorant
+/// @创建时间:2024/4/11
+/// 下拉菜单按钮组件
+class XSDropDownWidget extends StatefulWidget {
+ // 显示的菜单项
+ List items = [];
+ // 当前选中的值
+ final dynamic value;
+ // 选择框前的标题
+ final String? title;
+ // 提示语
+ final String tooltip;
+ // 选中数据的回调事件
+ final ValueChanged? valueChanged;
+ XSDropDownWidget(
+ {Key? key,
+ required this.items,
+ this.value,
+ this.valueChanged,
+ this.title,
+ this.tooltip = "点击选择"})
+ : super(key: key);
+
+ @override
+ State createState() => _XSDropDownWidgetState();
+}
+
+class _XSDropDownWidgetState extends State {
+ String label = '请选择';
+ // 是否展开下拉按钮
+ bool isExpand = false;
+ // 当前的值
+ dynamic currentValue;
+
+ @override
+ void initState() {
+ currentValue = widget.value;
+ super.initState();
+ }
+
+ /// 根据当前的value处理当前文本显示
+ void initTitle() {
+ if (currentValue != null) {
+ // 有值查值
+ for (DropDownItem item in widget.items) {
+ if (item.itemValue == currentValue) {
+ label = item.itemTitle;
+ return;
+ }
+ }
+ }
+ // 没值默认取第一个
+ if (widget.items.isNotEmpty) {
+ label = widget.items[0].itemTitle;
+ }
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ initTitle();
+ return Wrap(
+ children: [
+ if (widget.title != null)
+ Text(widget.title!,
+ style: TextStyle(
+ fontSize: 26.sp,
+ color: Colors.black,
+ fontWeight: FontWeight.w600,
+ )),
+ PopupMenuButton(
+ color: Colors.white,
+ // initialValue: currentValue,
+ tooltip: widget.tooltip,
+ offset: const Offset(0, 30),
+ enableFeedback: true,
+ child: Listener(
+ // 使用listener事件能够继续传递
+ onPointerDown: (event) {
+ setState(() {
+ isExpand = !isExpand;
+ });
+ },
+ child: Wrap(
+ children: [
+ Text(
+ label,
+ style: TextStyle(
+ fontSize: 24.sp,
+ color: Colors.black,
+ fontWeight: FontWeight.w600,
+ ),
+ ),
+ isExpand
+ ? const Icon(Icons.arrow_drop_up)
+ : const Icon(Icons.arrow_drop_down)
+ ],
+ ),
+ ),
+ onSelected: (value) {
+ widget.valueChanged?.call(value);
+ setState(() {
+ currentValue = value;
+ isExpand = !isExpand;
+ });
+ },
+ onCanceled: () {
+ // 取消展开
+ setState(() {
+ isExpand = false;
+ });
+ },
+ itemBuilder: (context) {
+ return widget.items.map((item) {
+ return PopupMenuItem(
+ value: item.itemValue,
+ child: Container(
+ margin:
+ EdgeInsets.only(left: 0.w, right: 0, top: 0, bottom: 0),
+ color: item.itemValue == currentValue
+ ? AppColors.mainColor
+ : null, // 设置选中项背景色为蓝色
+ child: Text(
+ item.itemTitle,
+ style: TextStyle(
+ color: item.itemValue == currentValue
+ ? Colors.white
+ : Colors.black, // 设置选中项文字颜色为白色
+ ),
+ ),
+ ),
+ );
+ }).toList();
+ },
+ // itemBuilder: (context) {
+ // return widget.items
+ // .map(
+ // (item) => item.itemValue == currentValue
+ // ? PopupMenuItem(
+ // value: item.itemValue,
+ // child: Text(
+ // item.itemTitle,
+ // style: TextStyle(color: AppColors.mainColor),
+ // ),
+ // )
+ // : PopupMenuItem(
+ // value: item.itemValue,
+ // child: Text(item.itemTitle),
+ // ),
+ // )
+ // .toList();
+ // },
+ )
+ ],
+ );
+ }
+}
diff --git a/star_lock/linux/.gitignore b/star_lock/linux/.gitignore
deleted file mode 100644
index d3896c98..00000000
--- a/star_lock/linux/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-flutter/ephemeral
diff --git a/star_lock/linux/CMakeLists.txt b/star_lock/linux/CMakeLists.txt
deleted file mode 100644
index 62853b7e..00000000
--- a/star_lock/linux/CMakeLists.txt
+++ /dev/null
@@ -1,138 +0,0 @@
-# Project-level configuration.
-cmake_minimum_required(VERSION 3.10)
-project(runner LANGUAGES CXX)
-
-# The name of the executable created for the application. Change this to change
-# the on-disk name of your application.
-set(BINARY_NAME "star_lock")
-# The unique GTK application identifier for this application. See:
-# https://wiki.gnome.org/HowDoI/ChooseApplicationID
-set(APPLICATION_ID "com.example.star_lock")
-
-# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
-# versions of CMake.
-cmake_policy(SET CMP0063 NEW)
-
-# Load bundled libraries from the lib/ directory relative to the binary.
-set(CMAKE_INSTALL_RPATH "$ORIGIN/lib")
-
-# Root filesystem for cross-building.
-if(FLUTTER_TARGET_PLATFORM_SYSROOT)
- set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT})
- set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT})
- set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
- set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
- set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
- set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-endif()
-
-# Define build configuration options.
-if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
- set(CMAKE_BUILD_TYPE "Debug" CACHE
- STRING "Flutter build mode" FORCE)
- set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
- "Debug" "Profile" "Release")
-endif()
-
-# Compilation settings that should be applied to most targets.
-#
-# Be cautious about adding new options here, as plugins use this function by
-# default. In most cases, you should add new options to specific targets instead
-# of modifying this function.
-function(APPLY_STANDARD_SETTINGS TARGET)
- target_compile_features(${TARGET} PUBLIC cxx_std_14)
- target_compile_options(${TARGET} PRIVATE -Wall -Werror)
- target_compile_options(${TARGET} PRIVATE "$<$>:-O3>")
- target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>")
-endfunction()
-
-# Flutter library and tool build rules.
-set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
-add_subdirectory(${FLUTTER_MANAGED_DIR})
-
-# System-level dependencies.
-find_package(PkgConfig REQUIRED)
-pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
-
-add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}")
-
-# Define the application target. To change its name, change BINARY_NAME above,
-# not the value here, or `flutter run` will no longer work.
-#
-# Any new source files that you add to the application should be added here.
-add_executable(${BINARY_NAME}
- "main.cc"
- "my_application.cc"
- "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
-)
-
-# Apply the standard set of build settings. This can be removed for applications
-# that need different build settings.
-apply_standard_settings(${BINARY_NAME})
-
-# Add dependency libraries. Add any application-specific dependencies here.
-target_link_libraries(${BINARY_NAME} PRIVATE flutter)
-target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK)
-
-# Run the Flutter tool portions of the build. This must not be removed.
-add_dependencies(${BINARY_NAME} flutter_assemble)
-
-# Only the install-generated bundle's copy of the executable will launch
-# correctly, since the resources must in the right relative locations. To avoid
-# people trying to run the unbundled copy, put it in a subdirectory instead of
-# the default top-level location.
-set_target_properties(${BINARY_NAME}
- PROPERTIES
- RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run"
-)
-
-# Generated plugin build rules, which manage building the plugins and adding
-# them to the application.
-include(flutter/generated_plugins.cmake)
-
-
-# === Installation ===
-# By default, "installing" just makes a relocatable bundle in the build
-# directory.
-set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle")
-if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
- set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE)
-endif()
-
-# Start with a clean build bundle directory every time.
-install(CODE "
- file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\")
- " COMPONENT Runtime)
-
-set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data")
-set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib")
-
-install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}"
- COMPONENT Runtime)
-
-install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
- COMPONENT Runtime)
-
-install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
- COMPONENT Runtime)
-
-foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES})
- install(FILES "${bundled_library}"
- DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
- COMPONENT Runtime)
-endforeach(bundled_library)
-
-# Fully re-copy the assets directory on each build to avoid having stale files
-# from a previous install.
-set(FLUTTER_ASSET_DIR_NAME "flutter_assets")
-install(CODE "
- file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\")
- " COMPONENT Runtime)
-install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}"
- DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime)
-
-# Install the AOT library on non-Debug builds only.
-if(NOT CMAKE_BUILD_TYPE MATCHES "Debug")
- install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
- COMPONENT Runtime)
-endif()
diff --git a/star_lock/linux/flutter/CMakeLists.txt b/star_lock/linux/flutter/CMakeLists.txt
deleted file mode 100644
index d5bd0164..00000000
--- a/star_lock/linux/flutter/CMakeLists.txt
+++ /dev/null
@@ -1,88 +0,0 @@
-# This file controls Flutter-level build steps. It should not be edited.
-cmake_minimum_required(VERSION 3.10)
-
-set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral")
-
-# Configuration provided via flutter tool.
-include(${EPHEMERAL_DIR}/generated_config.cmake)
-
-# TODO: Move the rest of this into files in ephemeral. See
-# https://github.com/flutter/flutter/issues/57146.
-
-# Serves the same purpose as list(TRANSFORM ... PREPEND ...),
-# which isn't available in 3.10.
-function(list_prepend LIST_NAME PREFIX)
- set(NEW_LIST "")
- foreach(element ${${LIST_NAME}})
- list(APPEND NEW_LIST "${PREFIX}${element}")
- endforeach(element)
- set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE)
-endfunction()
-
-# === Flutter Library ===
-# System-level dependencies.
-find_package(PkgConfig REQUIRED)
-pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
-pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0)
-pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0)
-
-set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so")
-
-# Published to parent scope for install step.
-set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE)
-set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE)
-set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE)
-set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE)
-
-list(APPEND FLUTTER_LIBRARY_HEADERS
- "fl_basic_message_channel.h"
- "fl_binary_codec.h"
- "fl_binary_messenger.h"
- "fl_dart_project.h"
- "fl_engine.h"
- "fl_json_message_codec.h"
- "fl_json_method_codec.h"
- "fl_message_codec.h"
- "fl_method_call.h"
- "fl_method_channel.h"
- "fl_method_codec.h"
- "fl_method_response.h"
- "fl_plugin_registrar.h"
- "fl_plugin_registry.h"
- "fl_standard_message_codec.h"
- "fl_standard_method_codec.h"
- "fl_string_codec.h"
- "fl_value.h"
- "fl_view.h"
- "flutter_linux.h"
-)
-list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/")
-add_library(flutter INTERFACE)
-target_include_directories(flutter INTERFACE
- "${EPHEMERAL_DIR}"
-)
-target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}")
-target_link_libraries(flutter INTERFACE
- PkgConfig::GTK
- PkgConfig::GLIB
- PkgConfig::GIO
-)
-add_dependencies(flutter flutter_assemble)
-
-# === Flutter tool backend ===
-# _phony_ is a non-existent file to force this command to run every time,
-# since currently there's no way to get a full input/output list from the
-# flutter tool.
-add_custom_command(
- OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS}
- ${CMAKE_CURRENT_BINARY_DIR}/_phony_
- COMMAND ${CMAKE_COMMAND} -E env
- ${FLUTTER_TOOL_ENVIRONMENT}
- "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh"
- ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE}
- VERBATIM
-)
-add_custom_target(flutter_assemble DEPENDS
- "${FLUTTER_LIBRARY}"
- ${FLUTTER_LIBRARY_HEADERS}
-)
diff --git a/star_lock/linux/flutter/generated_plugin_registrant.cc b/star_lock/linux/flutter/generated_plugin_registrant.cc
deleted file mode 100644
index 05d9a9b9..00000000
--- a/star_lock/linux/flutter/generated_plugin_registrant.cc
+++ /dev/null
@@ -1,27 +0,0 @@
-//
-// Generated file. Do not edit.
-//
-
-// clang-format off
-
-#include "generated_plugin_registrant.h"
-
-#include
-#include
-#include
-#include
-
-void fl_register_plugins(FlPluginRegistry* registry) {
- g_autoptr(FlPluginRegistrar) aj_captcha_flutter_registrar =
- fl_plugin_registry_get_registrar_for_plugin(registry, "AjCaptchaFlutterPlugin");
- aj_captcha_flutter_plugin_register_with_registrar(aj_captcha_flutter_registrar);
- g_autoptr(FlPluginRegistrar) audioplayers_linux_registrar =
- fl_plugin_registry_get_registrar_for_plugin(registry, "AudioplayersLinuxPlugin");
- audioplayers_linux_plugin_register_with_registrar(audioplayers_linux_registrar);
- g_autoptr(FlPluginRegistrar) file_selector_linux_registrar =
- fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin");
- file_selector_plugin_register_with_registrar(file_selector_linux_registrar);
- g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =
- fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
- url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);
-}
diff --git a/star_lock/linux/flutter/generated_plugin_registrant.h b/star_lock/linux/flutter/generated_plugin_registrant.h
deleted file mode 100644
index e0f0a47b..00000000
--- a/star_lock/linux/flutter/generated_plugin_registrant.h
+++ /dev/null
@@ -1,15 +0,0 @@
-//
-// Generated file. Do not edit.
-//
-
-// clang-format off
-
-#ifndef GENERATED_PLUGIN_REGISTRANT_
-#define GENERATED_PLUGIN_REGISTRANT_
-
-#include
-
-// Registers Flutter plugins.
-void fl_register_plugins(FlPluginRegistry* registry);
-
-#endif // GENERATED_PLUGIN_REGISTRANT_
diff --git a/star_lock/linux/flutter/generated_plugins.cmake b/star_lock/linux/flutter/generated_plugins.cmake
deleted file mode 100644
index b6e600e9..00000000
--- a/star_lock/linux/flutter/generated_plugins.cmake
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-# Generated file, do not edit.
-#
-
-list(APPEND FLUTTER_PLUGIN_LIST
- aj_captcha_flutter
- audioplayers_linux
- file_selector_linux
- url_launcher_linux
-)
-
-list(APPEND FLUTTER_FFI_PLUGIN_LIST
-)
-
-set(PLUGIN_BUNDLED_LIBRARIES)
-
-foreach(plugin ${FLUTTER_PLUGIN_LIST})
- add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin})
- target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin)
- list(APPEND PLUGIN_BUNDLED_LIBRARIES $)
- list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries})
-endforeach(plugin)
-
-foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST})
- add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin})
- list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries})
-endforeach(ffi_plugin)
diff --git a/star_lock/linux/main.cc b/star_lock/linux/main.cc
deleted file mode 100644
index e7c5c543..00000000
--- a/star_lock/linux/main.cc
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "my_application.h"
-
-int main(int argc, char** argv) {
- g_autoptr(MyApplication) app = my_application_new();
- return g_application_run(G_APPLICATION(app), argc, argv);
-}
diff --git a/star_lock/linux/my_application.cc b/star_lock/linux/my_application.cc
deleted file mode 100644
index 4e599fb3..00000000
--- a/star_lock/linux/my_application.cc
+++ /dev/null
@@ -1,104 +0,0 @@
-#include "my_application.h"
-
-#include
-#ifdef GDK_WINDOWING_X11
-#include
-#endif
-
-#include "flutter/generated_plugin_registrant.h"
-
-struct _MyApplication {
- GtkApplication parent_instance;
- char** dart_entrypoint_arguments;
-};
-
-G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION)
-
-// Implements GApplication::activate.
-static void my_application_activate(GApplication* application) {
- MyApplication* self = MY_APPLICATION(application);
- GtkWindow* window =
- GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application)));
-
- // Use a header bar when running in GNOME as this is the common style used
- // by applications and is the setup most users will be using (e.g. Ubuntu
- // desktop).
- // If running on X and not using GNOME then just use a traditional title bar
- // in case the window manager does more exotic layout, e.g. tiling.
- // If running on Wayland assume the header bar will work (may need changing
- // if future cases occur).
- gboolean use_header_bar = TRUE;
-#ifdef GDK_WINDOWING_X11
- GdkScreen* screen = gtk_window_get_screen(window);
- if (GDK_IS_X11_SCREEN(screen)) {
- const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen);
- if (g_strcmp0(wm_name, "GNOME Shell") != 0) {
- use_header_bar = FALSE;
- }
- }
-#endif
- if (use_header_bar) {
- GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new());
- gtk_widget_show(GTK_WIDGET(header_bar));
- gtk_header_bar_set_title(header_bar, "star_lock");
- gtk_header_bar_set_show_close_button(header_bar, TRUE);
- gtk_window_set_titlebar(window, GTK_WIDGET(header_bar));
- } else {
- gtk_window_set_title(window, "star_lock");
- }
-
- gtk_window_set_default_size(window, 1280, 720);
- gtk_widget_show(GTK_WIDGET(window));
-
- g_autoptr(FlDartProject) project = fl_dart_project_new();
- fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments);
-
- FlView* view = fl_view_new(project);
- gtk_widget_show(GTK_WIDGET(view));
- gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view));
-
- fl_register_plugins(FL_PLUGIN_REGISTRY(view));
-
- gtk_widget_grab_focus(GTK_WIDGET(view));
-}
-
-// Implements GApplication::local_command_line.
-static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) {
- MyApplication* self = MY_APPLICATION(application);
- // Strip out the first argument as it is the binary name.
- self->dart_entrypoint_arguments = g_strdupv(*arguments + 1);
-
- g_autoptr(GError) error = nullptr;
- if (!g_application_register(application, nullptr, &error)) {
- g_warning("Failed to register: %s", error->message);
- *exit_status = 1;
- return TRUE;
- }
-
- g_application_activate(application);
- *exit_status = 0;
-
- return TRUE;
-}
-
-// Implements GObject::dispose.
-static void my_application_dispose(GObject* object) {
- MyApplication* self = MY_APPLICATION(object);
- g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev);
- G_OBJECT_CLASS(my_application_parent_class)->dispose(object);
-}
-
-static void my_application_class_init(MyApplicationClass* klass) {
- G_APPLICATION_CLASS(klass)->activate = my_application_activate;
- G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line;
- G_OBJECT_CLASS(klass)->dispose = my_application_dispose;
-}
-
-static void my_application_init(MyApplication* self) {}
-
-MyApplication* my_application_new() {
- return MY_APPLICATION(g_object_new(my_application_get_type(),
- "application-id", APPLICATION_ID,
- "flags", G_APPLICATION_NON_UNIQUE,
- nullptr));
-}
diff --git a/star_lock/linux/my_application.h b/star_lock/linux/my_application.h
deleted file mode 100644
index 72271d5e..00000000
--- a/star_lock/linux/my_application.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef FLUTTER_MY_APPLICATION_H_
-#define FLUTTER_MY_APPLICATION_H_
-
-#include
-
-G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION,
- GtkApplication)
-
-/**
- * my_application_new:
- *
- * Creates a new Flutter-based application.
- *
- * Returns: a new #MyApplication.
- */
-MyApplication* my_application_new();
-
-#endif // FLUTTER_MY_APPLICATION_H_
diff --git a/star_lock/macos/.gitignore b/star_lock/macos/.gitignore
deleted file mode 100644
index 746adbb6..00000000
--- a/star_lock/macos/.gitignore
+++ /dev/null
@@ -1,7 +0,0 @@
-# Flutter-related
-**/Flutter/ephemeral/
-**/Pods/
-
-# Xcode-related
-**/dgph
-**/xcuserdata/
diff --git a/star_lock/macos/Flutter/Flutter-Debug.xcconfig b/star_lock/macos/Flutter/Flutter-Debug.xcconfig
deleted file mode 100644
index 4b81f9b2..00000000
--- a/star_lock/macos/Flutter/Flutter-Debug.xcconfig
+++ /dev/null
@@ -1,2 +0,0 @@
-#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
-#include "ephemeral/Flutter-Generated.xcconfig"
diff --git a/star_lock/macos/Flutter/Flutter-Release.xcconfig b/star_lock/macos/Flutter/Flutter-Release.xcconfig
deleted file mode 100644
index 5caa9d15..00000000
--- a/star_lock/macos/Flutter/Flutter-Release.xcconfig
+++ /dev/null
@@ -1,2 +0,0 @@
-#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
-#include "ephemeral/Flutter-Generated.xcconfig"
diff --git a/star_lock/macos/Flutter/GeneratedPluginRegistrant.swift b/star_lock/macos/Flutter/GeneratedPluginRegistrant.swift
deleted file mode 100644
index 84d8c391..00000000
--- a/star_lock/macos/Flutter/GeneratedPluginRegistrant.swift
+++ /dev/null
@@ -1,38 +0,0 @@
-//
-// Generated file. Do not edit.
-//
-
-import FlutterMacOS
-import Foundation
-
-import aj_captcha_flutter
-import audio_session
-import audioplayers_darwin
-import connectivity_plus
-import device_info_plus
-import file_selector_macos
-import flutter_pcm_sound
-import just_audio
-import network_info_plus
-import package_info_plus
-import path_provider_foundation
-import shared_preferences_foundation
-import sqflite
-import url_launcher_macos
-
-func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
- AjCaptchaFlutterPlugin.register(with: registry.registrar(forPlugin: "AjCaptchaFlutterPlugin"))
- AudioSessionPlugin.register(with: registry.registrar(forPlugin: "AudioSessionPlugin"))
- AudioplayersDarwinPlugin.register(with: registry.registrar(forPlugin: "AudioplayersDarwinPlugin"))
- ConnectivityPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlugin"))
- DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
- FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
- FlutterPcmSoundPlugin.register(with: registry.registrar(forPlugin: "FlutterPcmSoundPlugin"))
- JustAudioPlugin.register(with: registry.registrar(forPlugin: "JustAudioPlugin"))
- NetworkInfoPlusPlugin.register(with: registry.registrar(forPlugin: "NetworkInfoPlusPlugin"))
- FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin"))
- PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
- SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
- SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
- UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
-}
diff --git a/star_lock/macos/Podfile b/star_lock/macos/Podfile
deleted file mode 100644
index dade8dfa..00000000
--- a/star_lock/macos/Podfile
+++ /dev/null
@@ -1,40 +0,0 @@
-platform :osx, '10.11'
-
-# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
-ENV['COCOAPODS_DISABLE_STATS'] = 'true'
-
-project 'Runner', {
- 'Debug' => :debug,
- 'Profile' => :release,
- 'Release' => :release,
-}
-
-def flutter_root
- generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__)
- unless File.exist?(generated_xcode_build_settings_path)
- raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first"
- end
-
- File.foreach(generated_xcode_build_settings_path) do |line|
- matches = line.match(/FLUTTER_ROOT\=(.*)/)
- return matches[1].strip if matches
- end
- raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\""
-end
-
-require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
-
-flutter_macos_podfile_setup
-
-target 'Runner' do
- use_frameworks!
- use_modular_headers!
-
- flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__))
-end
-
-post_install do |installer|
- installer.pods_project.targets.each do |target|
- flutter_additional_macos_build_settings(target)
- end
-end
diff --git a/star_lock/macos/Runner.xcodeproj/project.pbxproj b/star_lock/macos/Runner.xcodeproj/project.pbxproj
deleted file mode 100644
index 00fe8982..00000000
--- a/star_lock/macos/Runner.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,572 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 51;
- objects = {
-
-/* Begin PBXAggregateTarget section */
- 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = {
- isa = PBXAggregateTarget;
- buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */;
- buildPhases = (
- 33CC111E2044C6BF0003C045 /* ShellScript */,
- );
- dependencies = (
- );
- name = "Flutter Assemble";
- productName = FLX;
- };
-/* End PBXAggregateTarget section */
-
-/* Begin PBXBuildFile section */
- 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; };
- 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; };
- 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
- 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
- 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
- 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 33CC10E52044A3C60003C045 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 33CC111A2044C6BA0003C045;
- remoteInfo = FLX;
- };
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXCopyFilesBuildPhase section */
- 33CC110E2044A8840003C045 /* Bundle Framework */ = {
- isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
- dstPath = "";
- dstSubfolderSpec = 10;
- files = (
- );
- name = "Bundle Framework";
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXCopyFilesBuildPhase section */
-
-/* Begin PBXFileReference section */
- 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; };
- 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; };
- 33CC10ED2044A3C60003C045 /* star_lock.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "star_lock.app"; sourceTree = BUILT_PRODUCTS_DIR; };
- 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
- 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; };
- 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; };
- 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; };
- 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; };
- 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; };
- 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; };
- 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; };
- 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; };
- 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; };
- 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; };
- 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; };
- 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- 33CC10EA2044A3C60003C045 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- 33BA886A226E78AF003329D5 /* Configs */ = {
- isa = PBXGroup;
- children = (
- 33E5194F232828860026EE4D /* AppInfo.xcconfig */,
- 9740EEB21CF90195004384FC /* Debug.xcconfig */,
- 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
- 333000ED22D3DE5D00554162 /* Warnings.xcconfig */,
- );
- path = Configs;
- sourceTree = "";
- };
- 33CC10E42044A3C60003C045 = {
- isa = PBXGroup;
- children = (
- 33FAB671232836740065AC1E /* Runner */,
- 33CEB47122A05771004F2AC0 /* Flutter */,
- 33CC10EE2044A3C60003C045 /* Products */,
- D73912EC22F37F3D000D13A0 /* Frameworks */,
- );
- sourceTree = "";
- };
- 33CC10EE2044A3C60003C045 /* Products */ = {
- isa = PBXGroup;
- children = (
- 33CC10ED2044A3C60003C045 /* star_lock.app */,
- );
- name = Products;
- sourceTree = "";
- };
- 33CC11242044D66E0003C045 /* Resources */ = {
- isa = PBXGroup;
- children = (
- 33CC10F22044A3C60003C045 /* Assets.xcassets */,
- 33CC10F42044A3C60003C045 /* MainMenu.xib */,
- 33CC10F72044A3C60003C045 /* Info.plist */,
- );
- name = Resources;
- path = ..;
- sourceTree = "";
- };
- 33CEB47122A05771004F2AC0 /* Flutter */ = {
- isa = PBXGroup;
- children = (
- 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */,
- 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */,
- 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */,
- 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */,
- );
- path = Flutter;
- sourceTree = "";
- };
- 33FAB671232836740065AC1E /* Runner */ = {
- isa = PBXGroup;
- children = (
- 33CC10F02044A3C60003C045 /* AppDelegate.swift */,
- 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */,
- 33E51913231747F40026EE4D /* DebugProfile.entitlements */,
- 33E51914231749380026EE4D /* Release.entitlements */,
- 33CC11242044D66E0003C045 /* Resources */,
- 33BA886A226E78AF003329D5 /* Configs */,
- );
- path = Runner;
- sourceTree = "";
- };
- D73912EC22F37F3D000D13A0 /* Frameworks */ = {
- isa = PBXGroup;
- children = (
- );
- name = Frameworks;
- sourceTree = "";
- };
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
- 33CC10EC2044A3C60003C045 /* Runner */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */;
- buildPhases = (
- 33CC10E92044A3C60003C045 /* Sources */,
- 33CC10EA2044A3C60003C045 /* Frameworks */,
- 33CC10EB2044A3C60003C045 /* Resources */,
- 33CC110E2044A8840003C045 /* Bundle Framework */,
- 3399D490228B24CF009A79C7 /* ShellScript */,
- );
- buildRules = (
- );
- dependencies = (
- 33CC11202044C79F0003C045 /* PBXTargetDependency */,
- );
- name = Runner;
- productName = Runner;
- productReference = 33CC10ED2044A3C60003C045 /* star_lock.app */;
- productType = "com.apple.product-type.application";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- 33CC10E52044A3C60003C045 /* Project object */ = {
- isa = PBXProject;
- attributes = {
- LastSwiftUpdateCheck = 0920;
- LastUpgradeCheck = 1300;
- ORGANIZATIONNAME = "";
- TargetAttributes = {
- 33CC10EC2044A3C60003C045 = {
- CreatedOnToolsVersion = 9.2;
- LastSwiftMigration = 1100;
- ProvisioningStyle = Automatic;
- SystemCapabilities = {
- com.apple.Sandbox = {
- enabled = 1;
- };
- };
- };
- 33CC111A2044C6BA0003C045 = {
- CreatedOnToolsVersion = 9.2;
- ProvisioningStyle = Manual;
- };
- };
- };
- buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */;
- compatibilityVersion = "Xcode 9.3";
- developmentRegion = en;
- hasScannedForEncodings = 0;
- knownRegions = (
- en,
- Base,
- );
- mainGroup = 33CC10E42044A3C60003C045;
- productRefGroup = 33CC10EE2044A3C60003C045 /* Products */;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- 33CC10EC2044A3C60003C045 /* Runner */,
- 33CC111A2044C6BA0003C045 /* Flutter Assemble */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
- 33CC10EB2044A3C60003C045 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */,
- 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXShellScriptBuildPhase section */
- 3399D490228B24CF009A79C7 /* ShellScript */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- );
- inputPaths = (
- );
- outputFileListPaths = (
- );
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n";
- };
- 33CC111E2044C6BF0003C045 /* ShellScript */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- Flutter/ephemeral/FlutterInputs.xcfilelist,
- );
- inputPaths = (
- Flutter/ephemeral/tripwire,
- );
- outputFileListPaths = (
- Flutter/ephemeral/FlutterOutputs.xcfilelist,
- );
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire";
- };
-/* End PBXShellScriptBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
- 33CC10E92044A3C60003C045 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */,
- 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */,
- 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
- 33CC11202044C79F0003C045 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */;
- targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */;
- };
-/* End PBXTargetDependency section */
-
-/* Begin PBXVariantGroup section */
- 33CC10F42044A3C60003C045 /* MainMenu.xib */ = {
- isa = PBXVariantGroup;
- children = (
- 33CC10F52044A3C60003C045 /* Base */,
- );
- name = MainMenu.xib;
- path = Runner;
- sourceTree = "";
- };
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
- 338D0CE9231458BD00FA5F75 /* Profile */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CODE_SIGN_IDENTITY = "-";
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- MACOSX_DEPLOYMENT_TARGET = 10.11;
- MTL_ENABLE_DEBUG_INFO = NO;
- SDKROOT = macosx;
- SWIFT_COMPILATION_MODE = wholemodule;
- SWIFT_OPTIMIZATION_LEVEL = "-O";
- };
- name = Profile;
- };
- 338D0CEA231458BD00FA5F75 /* Profile */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CLANG_ENABLE_MODULES = YES;
- CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
- CODE_SIGN_STYLE = Automatic;
- COMBINE_HIDPI_IMAGES = YES;
- INFOPLIST_FILE = Runner/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/../Frameworks",
- );
- PROVISIONING_PROFILE_SPECIFIER = "";
- SWIFT_VERSION = 5.0;
- };
- name = Profile;
- };
- 338D0CEB231458BD00FA5F75 /* Profile */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CODE_SIGN_STYLE = Manual;
- PRODUCT_NAME = "$(TARGET_NAME)";
- };
- name = Profile;
- };
- 33CC10F92044A3C60003C045 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CODE_SIGN_IDENTITY = "-";
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = dwarf;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- ENABLE_TESTABILITY = YES;
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- MACOSX_DEPLOYMENT_TARGET = 10.11;
- MTL_ENABLE_DEBUG_INFO = YES;
- ONLY_ACTIVE_ARCH = YES;
- SDKROOT = macosx;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- };
- name = Debug;
- };
- 33CC10FA2044A3C60003C045 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CODE_SIGN_IDENTITY = "-";
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- MACOSX_DEPLOYMENT_TARGET = 10.11;
- MTL_ENABLE_DEBUG_INFO = NO;
- SDKROOT = macosx;
- SWIFT_COMPILATION_MODE = wholemodule;
- SWIFT_OPTIMIZATION_LEVEL = "-O";
- };
- name = Release;
- };
- 33CC10FC2044A3C60003C045 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CLANG_ENABLE_MODULES = YES;
- CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
- CODE_SIGN_STYLE = Automatic;
- COMBINE_HIDPI_IMAGES = YES;
- INFOPLIST_FILE = Runner/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/../Frameworks",
- );
- PROVISIONING_PROFILE_SPECIFIER = "";
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- SWIFT_VERSION = 5.0;
- };
- name = Debug;
- };
- 33CC10FD2044A3C60003C045 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CLANG_ENABLE_MODULES = YES;
- CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements;
- CODE_SIGN_STYLE = Automatic;
- COMBINE_HIDPI_IMAGES = YES;
- INFOPLIST_FILE = Runner/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/../Frameworks",
- );
- PROVISIONING_PROFILE_SPECIFIER = "";
- SWIFT_VERSION = 5.0;
- };
- name = Release;
- };
- 33CC111C2044C6BA0003C045 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CODE_SIGN_STYLE = Manual;
- PRODUCT_NAME = "$(TARGET_NAME)";
- };
- name = Debug;
- };
- 33CC111D2044C6BA0003C045 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CODE_SIGN_STYLE = Automatic;
- PRODUCT_NAME = "$(TARGET_NAME)";
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 33CC10F92044A3C60003C045 /* Debug */,
- 33CC10FA2044A3C60003C045 /* Release */,
- 338D0CE9231458BD00FA5F75 /* Profile */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 33CC10FC2044A3C60003C045 /* Debug */,
- 33CC10FD2044A3C60003C045 /* Release */,
- 338D0CEA231458BD00FA5F75 /* Profile */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 33CC111C2044C6BA0003C045 /* Debug */,
- 33CC111D2044C6BA0003C045 /* Release */,
- 338D0CEB231458BD00FA5F75 /* Profile */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
-/* End XCConfigurationList section */
- };
- rootObject = 33CC10E52044A3C60003C045 /* Project object */;
-}
diff --git a/star_lock/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/star_lock/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d98100..00000000
--- a/star_lock/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- IDEDidComputeMac32BitWarning
-
-
-
diff --git a/star_lock/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/star_lock/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
deleted file mode 100644
index c1a85f2d..00000000
--- a/star_lock/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/star_lock/macos/Runner.xcworkspace/contents.xcworkspacedata b/star_lock/macos/Runner.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index 1d526a16..00000000
--- a/star_lock/macos/Runner.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
diff --git a/star_lock/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/star_lock/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d98100..00000000
--- a/star_lock/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- IDEDidComputeMac32BitWarning
-
-
-
diff --git a/star_lock/macos/Runner/AppDelegate.swift b/star_lock/macos/Runner/AppDelegate.swift
deleted file mode 100644
index d53ef643..00000000
--- a/star_lock/macos/Runner/AppDelegate.swift
+++ /dev/null
@@ -1,9 +0,0 @@
-import Cocoa
-import FlutterMacOS
-
-@NSApplicationMain
-class AppDelegate: FlutterAppDelegate {
- override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
- return true
- }
-}
diff --git a/star_lock/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/star_lock/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
deleted file mode 100644
index a2ec33f1..00000000
--- a/star_lock/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ /dev/null
@@ -1,68 +0,0 @@
-{
- "images" : [
- {
- "size" : "16x16",
- "idiom" : "mac",
- "filename" : "app_icon_16.png",
- "scale" : "1x"
- },
- {
- "size" : "16x16",
- "idiom" : "mac",
- "filename" : "app_icon_32.png",
- "scale" : "2x"
- },
- {
- "size" : "32x32",
- "idiom" : "mac",
- "filename" : "app_icon_32.png",
- "scale" : "1x"
- },
- {
- "size" : "32x32",
- "idiom" : "mac",
- "filename" : "app_icon_64.png",
- "scale" : "2x"
- },
- {
- "size" : "128x128",
- "idiom" : "mac",
- "filename" : "app_icon_128.png",
- "scale" : "1x"
- },
- {
- "size" : "128x128",
- "idiom" : "mac",
- "filename" : "app_icon_256.png",
- "scale" : "2x"
- },
- {
- "size" : "256x256",
- "idiom" : "mac",
- "filename" : "app_icon_256.png",
- "scale" : "1x"
- },
- {
- "size" : "256x256",
- "idiom" : "mac",
- "filename" : "app_icon_512.png",
- "scale" : "2x"
- },
- {
- "size" : "512x512",
- "idiom" : "mac",
- "filename" : "app_icon_512.png",
- "scale" : "1x"
- },
- {
- "size" : "512x512",
- "idiom" : "mac",
- "filename" : "app_icon_1024.png",
- "scale" : "2x"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
diff --git a/star_lock/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/star_lock/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png
deleted file mode 100644
index 82b6f9d9..00000000
Binary files a/star_lock/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png and /dev/null differ
diff --git a/star_lock/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/star_lock/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png
deleted file mode 100644
index 13b35eba..00000000
Binary files a/star_lock/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png and /dev/null differ
diff --git a/star_lock/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/star_lock/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png
deleted file mode 100644
index 0a3f5fa4..00000000
Binary files a/star_lock/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png and /dev/null differ
diff --git a/star_lock/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/star_lock/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png
deleted file mode 100644
index bdb57226..00000000
Binary files a/star_lock/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png and /dev/null differ
diff --git a/star_lock/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/star_lock/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png
deleted file mode 100644
index f083318e..00000000
Binary files a/star_lock/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png and /dev/null differ
diff --git a/star_lock/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/star_lock/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png
deleted file mode 100644
index 326c0e72..00000000
Binary files a/star_lock/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png and /dev/null differ
diff --git a/star_lock/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/star_lock/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png
deleted file mode 100644
index 2f1632cf..00000000
Binary files a/star_lock/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png and /dev/null differ
diff --git a/star_lock/macos/Runner/Base.lproj/MainMenu.xib b/star_lock/macos/Runner/Base.lproj/MainMenu.xib
deleted file mode 100644
index 80e867a4..00000000
--- a/star_lock/macos/Runner/Base.lproj/MainMenu.xib
+++ /dev/null
@@ -1,343 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/star_lock/macos/Runner/Configs/AppInfo.xcconfig b/star_lock/macos/Runner/Configs/AppInfo.xcconfig
deleted file mode 100644
index 9e0b6d30..00000000
--- a/star_lock/macos/Runner/Configs/AppInfo.xcconfig
+++ /dev/null
@@ -1,14 +0,0 @@
-// Application-level settings for the Runner target.
-//
-// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the
-// future. If not, the values below would default to using the project name when this becomes a
-// 'flutter create' template.
-
-// The application's name. By default this is also the title of the Flutter window.
-PRODUCT_NAME = star_lock
-
-// The application's bundle identifier
-PRODUCT_BUNDLE_IDENTIFIER = com.example.starLock
-
-// The copyright displayed in application information
-PRODUCT_COPYRIGHT = Copyright © 2023 com.example. All rights reserved.
diff --git a/star_lock/macos/Runner/Configs/Debug.xcconfig b/star_lock/macos/Runner/Configs/Debug.xcconfig
deleted file mode 100644
index 36b0fd94..00000000
--- a/star_lock/macos/Runner/Configs/Debug.xcconfig
+++ /dev/null
@@ -1,2 +0,0 @@
-#include "../../Flutter/Flutter-Debug.xcconfig"
-#include "Warnings.xcconfig"
diff --git a/star_lock/macos/Runner/Configs/Release.xcconfig b/star_lock/macos/Runner/Configs/Release.xcconfig
deleted file mode 100644
index dff4f495..00000000
--- a/star_lock/macos/Runner/Configs/Release.xcconfig
+++ /dev/null
@@ -1,2 +0,0 @@
-#include "../../Flutter/Flutter-Release.xcconfig"
-#include "Warnings.xcconfig"
diff --git a/star_lock/macos/Runner/Configs/Warnings.xcconfig b/star_lock/macos/Runner/Configs/Warnings.xcconfig
deleted file mode 100644
index 42bcbf47..00000000
--- a/star_lock/macos/Runner/Configs/Warnings.xcconfig
+++ /dev/null
@@ -1,13 +0,0 @@
-WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings
-GCC_WARN_UNDECLARED_SELECTOR = YES
-CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES
-CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE
-CLANG_WARN__DUPLICATE_METHOD_MATCH = YES
-CLANG_WARN_PRAGMA_PACK = YES
-CLANG_WARN_STRICT_PROTOTYPES = YES
-CLANG_WARN_COMMA = YES
-GCC_WARN_STRICT_SELECTOR_MATCH = YES
-CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES
-CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES
-GCC_WARN_SHADOW = YES
-CLANG_WARN_UNREACHABLE_CODE = YES
diff --git a/star_lock/macos/Runner/DebugProfile.entitlements b/star_lock/macos/Runner/DebugProfile.entitlements
deleted file mode 100644
index dddb8a30..00000000
--- a/star_lock/macos/Runner/DebugProfile.entitlements
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
- com.apple.security.app-sandbox
-
- com.apple.security.cs.allow-jit
-
- com.apple.security.network.server
-
-
-
diff --git a/star_lock/macos/Runner/Info.plist b/star_lock/macos/Runner/Info.plist
deleted file mode 100644
index 4789daa6..00000000
--- a/star_lock/macos/Runner/Info.plist
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- $(DEVELOPMENT_LANGUAGE)
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIconFile
-
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- APPL
- CFBundleShortVersionString
- $(FLUTTER_BUILD_NAME)
- CFBundleVersion
- $(FLUTTER_BUILD_NUMBER)
- LSMinimumSystemVersion
- $(MACOSX_DEPLOYMENT_TARGET)
- NSHumanReadableCopyright
- $(PRODUCT_COPYRIGHT)
- NSMainNibFile
- MainMenu
- NSPrincipalClass
- NSApplication
-
-
diff --git a/star_lock/macos/Runner/MainFlutterWindow.swift b/star_lock/macos/Runner/MainFlutterWindow.swift
deleted file mode 100644
index 2722837e..00000000
--- a/star_lock/macos/Runner/MainFlutterWindow.swift
+++ /dev/null
@@ -1,15 +0,0 @@
-import Cocoa
-import FlutterMacOS
-
-class MainFlutterWindow: NSWindow {
- override func awakeFromNib() {
- let flutterViewController = FlutterViewController.init()
- let windowFrame = self.frame
- self.contentViewController = flutterViewController
- self.setFrame(windowFrame, display: true)
-
- RegisterGeneratedPlugins(registry: flutterViewController)
-
- super.awakeFromNib()
- }
-}
diff --git a/star_lock/macos/Runner/Release.entitlements b/star_lock/macos/Runner/Release.entitlements
deleted file mode 100644
index 852fa1a4..00000000
--- a/star_lock/macos/Runner/Release.entitlements
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- com.apple.security.app-sandbox
-
-
-
diff --git a/star_lock/pubspec.yaml b/star_lock/pubspec.yaml
index c42eeee6..6e4ad906 100644
--- a/star_lock/pubspec.yaml
+++ b/star_lock/pubspec.yaml
@@ -134,7 +134,7 @@ dependencies:
flutter_voice_processor: ^1.1.0
#监听网络连接状态
connectivity_plus: ^5.0.2
- flutter_advanced_calendar: ^1.4.1
+ #flutter_advanced_calendar: ^1.4.1
timelines: ^0.1.0
#侧滑删除
flutter_slidable: ^3.0.1
@@ -150,6 +150,9 @@ dev_dependencies:
# rules and activating additional ones.
flutter_lints: ^2.0.0
+ # 说明文件在:flavorizr.yaml
+ flutter_flavorizr: ^2.2.1
+
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
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 {
diff --git a/star_lock/web/favicon.png b/star_lock/web/favicon.png
deleted file mode 100644
index 8aaa46ac..00000000
Binary files a/star_lock/web/favicon.png and /dev/null differ
diff --git a/star_lock/web/icons/Icon-192.png b/star_lock/web/icons/Icon-192.png
deleted file mode 100644
index b749bfef..00000000
Binary files a/star_lock/web/icons/Icon-192.png and /dev/null differ
diff --git a/star_lock/web/icons/Icon-512.png b/star_lock/web/icons/Icon-512.png
deleted file mode 100644
index 88cfd48d..00000000
Binary files a/star_lock/web/icons/Icon-512.png and /dev/null differ
diff --git a/star_lock/web/icons/Icon-maskable-192.png b/star_lock/web/icons/Icon-maskable-192.png
deleted file mode 100644
index eb9b4d76..00000000
Binary files a/star_lock/web/icons/Icon-maskable-192.png and /dev/null differ
diff --git a/star_lock/web/icons/Icon-maskable-512.png b/star_lock/web/icons/Icon-maskable-512.png
deleted file mode 100644
index d69c5669..00000000
Binary files a/star_lock/web/icons/Icon-maskable-512.png and /dev/null differ
diff --git a/star_lock/web/index.html b/star_lock/web/index.html
deleted file mode 100644
index 13f45b66..00000000
--- a/star_lock/web/index.html
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- star_lock
-
-
-
-
-
-
-
-
-
-
diff --git a/star_lock/web/manifest.json b/star_lock/web/manifest.json
deleted file mode 100644
index f3343ffb..00000000
--- a/star_lock/web/manifest.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "name": "star_lock",
- "short_name": "star_lock",
- "start_url": ".",
- "display": "standalone",
- "background_color": "#0175C2",
- "theme_color": "#0175C2",
- "description": "A new Flutter project.",
- "orientation": "portrait-primary",
- "prefer_related_applications": false,
- "icons": [
- {
- "src": "icons/Icon-192.png",
- "sizes": "192x192",
- "type": "image/png"
- },
- {
- "src": "icons/Icon-512.png",
- "sizes": "512x512",
- "type": "image/png"
- },
- {
- "src": "icons/Icon-maskable-192.png",
- "sizes": "192x192",
- "type": "image/png",
- "purpose": "maskable"
- },
- {
- "src": "icons/Icon-maskable-512.png",
- "sizes": "512x512",
- "type": "image/png",
- "purpose": "maskable"
- }
- ]
-}
diff --git a/star_lock/windows/.gitignore b/star_lock/windows/.gitignore
deleted file mode 100644
index d492d0d9..00000000
--- a/star_lock/windows/.gitignore
+++ /dev/null
@@ -1,17 +0,0 @@
-flutter/ephemeral/
-
-# Visual Studio user-specific files.
-*.suo
-*.user
-*.userosscache
-*.sln.docstates
-
-# Visual Studio build-related files.
-x64/
-x86/
-
-# Visual Studio cache files
-# files ending in .cache can be ignored
-*.[Cc]ache
-# but keep track of directories ending in .cache
-!*.[Cc]ache/
diff --git a/star_lock/windows/CMakeLists.txt b/star_lock/windows/CMakeLists.txt
deleted file mode 100644
index c9472223..00000000
--- a/star_lock/windows/CMakeLists.txt
+++ /dev/null
@@ -1,101 +0,0 @@
-# Project-level configuration.
-cmake_minimum_required(VERSION 3.14)
-project(star_lock LANGUAGES CXX)
-
-# The name of the executable created for the application. Change this to change
-# the on-disk name of your application.
-set(BINARY_NAME "star_lock")
-
-# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
-# versions of CMake.
-cmake_policy(SET CMP0063 NEW)
-
-# Define build configuration option.
-get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
-if(IS_MULTICONFIG)
- set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release"
- CACHE STRING "" FORCE)
-else()
- if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
- set(CMAKE_BUILD_TYPE "Debug" CACHE
- STRING "Flutter build mode" FORCE)
- set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
- "Debug" "Profile" "Release")
- endif()
-endif()
-# Define settings for the Profile build mode.
-set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
-set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}")
-set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}")
-set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}")
-
-# Use Unicode for all projects.
-add_definitions(-DUNICODE -D_UNICODE)
-
-# Compilation settings that should be applied to most targets.
-#
-# Be cautious about adding new options here, as plugins use this function by
-# default. In most cases, you should add new options to specific targets instead
-# of modifying this function.
-function(APPLY_STANDARD_SETTINGS TARGET)
- target_compile_features(${TARGET} PUBLIC cxx_std_17)
- target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100")
- target_compile_options(${TARGET} PRIVATE /EHsc)
- target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0")
- target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>")
-endfunction()
-
-# Flutter library and tool build rules.
-set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
-add_subdirectory(${FLUTTER_MANAGED_DIR})
-
-# Application build; see runner/CMakeLists.txt.
-add_subdirectory("runner")
-
-# Generated plugin build rules, which manage building the plugins and adding
-# them to the application.
-include(flutter/generated_plugins.cmake)
-
-
-# === Installation ===
-# Support files are copied into place next to the executable, so that it can
-# run in place. This is done instead of making a separate bundle (as on Linux)
-# so that building and running from within Visual Studio will work.
-set(BUILD_BUNDLE_DIR "$")
-# Make the "install" step default, as it's required to run.
-set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1)
-if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
- set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE)
-endif()
-
-set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data")
-set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}")
-
-install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}"
- COMPONENT Runtime)
-
-install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
- COMPONENT Runtime)
-
-install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
- COMPONENT Runtime)
-
-if(PLUGIN_BUNDLED_LIBRARIES)
- install(FILES "${PLUGIN_BUNDLED_LIBRARIES}"
- DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
- COMPONENT Runtime)
-endif()
-
-# Fully re-copy the assets directory on each build to avoid having stale files
-# from a previous install.
-set(FLUTTER_ASSET_DIR_NAME "flutter_assets")
-install(CODE "
- file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\")
- " COMPONENT Runtime)
-install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}"
- DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime)
-
-# Install the AOT library on non-Debug builds only.
-install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
- CONFIGURATIONS Profile;Release
- COMPONENT Runtime)
diff --git a/star_lock/windows/flutter/CMakeLists.txt b/star_lock/windows/flutter/CMakeLists.txt
deleted file mode 100644
index 930d2071..00000000
--- a/star_lock/windows/flutter/CMakeLists.txt
+++ /dev/null
@@ -1,104 +0,0 @@
-# This file controls Flutter-level build steps. It should not be edited.
-cmake_minimum_required(VERSION 3.14)
-
-set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral")
-
-# Configuration provided via flutter tool.
-include(${EPHEMERAL_DIR}/generated_config.cmake)
-
-# TODO: Move the rest of this into files in ephemeral. See
-# https://github.com/flutter/flutter/issues/57146.
-set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper")
-
-# === Flutter Library ===
-set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll")
-
-# Published to parent scope for install step.
-set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE)
-set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE)
-set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE)
-set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE)
-
-list(APPEND FLUTTER_LIBRARY_HEADERS
- "flutter_export.h"
- "flutter_windows.h"
- "flutter_messenger.h"
- "flutter_plugin_registrar.h"
- "flutter_texture_registrar.h"
-)
-list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/")
-add_library(flutter INTERFACE)
-target_include_directories(flutter INTERFACE
- "${EPHEMERAL_DIR}"
-)
-target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib")
-add_dependencies(flutter flutter_assemble)
-
-# === Wrapper ===
-list(APPEND CPP_WRAPPER_SOURCES_CORE
- "core_implementations.cc"
- "standard_codec.cc"
-)
-list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/")
-list(APPEND CPP_WRAPPER_SOURCES_PLUGIN
- "plugin_registrar.cc"
-)
-list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/")
-list(APPEND CPP_WRAPPER_SOURCES_APP
- "flutter_engine.cc"
- "flutter_view_controller.cc"
-)
-list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/")
-
-# Wrapper sources needed for a plugin.
-add_library(flutter_wrapper_plugin STATIC
- ${CPP_WRAPPER_SOURCES_CORE}
- ${CPP_WRAPPER_SOURCES_PLUGIN}
-)
-apply_standard_settings(flutter_wrapper_plugin)
-set_target_properties(flutter_wrapper_plugin PROPERTIES
- POSITION_INDEPENDENT_CODE ON)
-set_target_properties(flutter_wrapper_plugin PROPERTIES
- CXX_VISIBILITY_PRESET hidden)
-target_link_libraries(flutter_wrapper_plugin PUBLIC flutter)
-target_include_directories(flutter_wrapper_plugin PUBLIC
- "${WRAPPER_ROOT}/include"
-)
-add_dependencies(flutter_wrapper_plugin flutter_assemble)
-
-# Wrapper sources needed for the runner.
-add_library(flutter_wrapper_app STATIC
- ${CPP_WRAPPER_SOURCES_CORE}
- ${CPP_WRAPPER_SOURCES_APP}
-)
-apply_standard_settings(flutter_wrapper_app)
-target_link_libraries(flutter_wrapper_app PUBLIC flutter)
-target_include_directories(flutter_wrapper_app PUBLIC
- "${WRAPPER_ROOT}/include"
-)
-add_dependencies(flutter_wrapper_app flutter_assemble)
-
-# === Flutter tool backend ===
-# _phony_ is a non-existent file to force this command to run every time,
-# since currently there's no way to get a full input/output list from the
-# flutter tool.
-set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_")
-set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE)
-add_custom_command(
- OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS}
- ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN}
- ${CPP_WRAPPER_SOURCES_APP}
- ${PHONY_OUTPUT}
- COMMAND ${CMAKE_COMMAND} -E env
- ${FLUTTER_TOOL_ENVIRONMENT}
- "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat"
- windows-x64 $
- VERBATIM
-)
-add_custom_target(flutter_assemble DEPENDS
- "${FLUTTER_LIBRARY}"
- ${FLUTTER_LIBRARY_HEADERS}
- ${CPP_WRAPPER_SOURCES_CORE}
- ${CPP_WRAPPER_SOURCES_PLUGIN}
- ${CPP_WRAPPER_SOURCES_APP}
-)
diff --git a/star_lock/windows/flutter/generated_plugin_registrant.cc b/star_lock/windows/flutter/generated_plugin_registrant.cc
deleted file mode 100644
index 6d6e78c3..00000000
--- a/star_lock/windows/flutter/generated_plugin_registrant.cc
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// Generated file. Do not edit.
-//
-
-// clang-format off
-
-#include "generated_plugin_registrant.h"
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-void RegisterPlugins(flutter::PluginRegistry* registry) {
- AjCaptchaFlutterPluginCApiRegisterWithRegistrar(
- registry->GetRegistrarForPlugin("AjCaptchaFlutterPluginCApi"));
- AudioplayersWindowsPluginRegisterWithRegistrar(
- registry->GetRegistrarForPlugin("AudioplayersWindowsPlugin"));
- ConnectivityPlusWindowsPluginRegisterWithRegistrar(
- registry->GetRegistrarForPlugin("ConnectivityPlusWindowsPlugin"));
- FileSelectorWindowsRegisterWithRegistrar(
- registry->GetRegistrarForPlugin("FileSelectorWindows"));
- PermissionHandlerWindowsPluginRegisterWithRegistrar(
- registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin"));
- UrlLauncherWindowsRegisterWithRegistrar(
- registry->GetRegistrarForPlugin("UrlLauncherWindows"));
-}
diff --git a/star_lock/windows/flutter/generated_plugin_registrant.h b/star_lock/windows/flutter/generated_plugin_registrant.h
deleted file mode 100644
index dc139d85..00000000
--- a/star_lock/windows/flutter/generated_plugin_registrant.h
+++ /dev/null
@@ -1,15 +0,0 @@
-//
-// Generated file. Do not edit.
-//
-
-// clang-format off
-
-#ifndef GENERATED_PLUGIN_REGISTRANT_
-#define GENERATED_PLUGIN_REGISTRANT_
-
-#include
-
-// Registers Flutter plugins.
-void RegisterPlugins(flutter::PluginRegistry* registry);
-
-#endif // GENERATED_PLUGIN_REGISTRANT_
diff --git a/star_lock/windows/flutter/generated_plugins.cmake b/star_lock/windows/flutter/generated_plugins.cmake
deleted file mode 100644
index 9dd314b5..00000000
--- a/star_lock/windows/flutter/generated_plugins.cmake
+++ /dev/null
@@ -1,29 +0,0 @@
-#
-# Generated file, do not edit.
-#
-
-list(APPEND FLUTTER_PLUGIN_LIST
- aj_captcha_flutter
- audioplayers_windows
- connectivity_plus
- file_selector_windows
- permission_handler_windows
- url_launcher_windows
-)
-
-list(APPEND FLUTTER_FFI_PLUGIN_LIST
-)
-
-set(PLUGIN_BUNDLED_LIBRARIES)
-
-foreach(plugin ${FLUTTER_PLUGIN_LIST})
- add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin})
- target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin)
- list(APPEND PLUGIN_BUNDLED_LIBRARIES $)
- list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries})
-endforeach(plugin)
-
-foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST})
- add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin})
- list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries})
-endforeach(ffi_plugin)
diff --git a/star_lock/windows/runner/CMakeLists.txt b/star_lock/windows/runner/CMakeLists.txt
deleted file mode 100644
index 17411a8a..00000000
--- a/star_lock/windows/runner/CMakeLists.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-cmake_minimum_required(VERSION 3.14)
-project(runner LANGUAGES CXX)
-
-# Define the application target. To change its name, change BINARY_NAME in the
-# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer
-# work.
-#
-# Any new source files that you add to the application should be added here.
-add_executable(${BINARY_NAME} WIN32
- "flutter_window.cpp"
- "main.cpp"
- "utils.cpp"
- "win32_window.cpp"
- "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
- "Runner.rc"
- "runner.exe.manifest"
-)
-
-# Apply the standard set of build settings. This can be removed for applications
-# that need different build settings.
-apply_standard_settings(${BINARY_NAME})
-
-# Add preprocessor definitions for the build version.
-target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"")
-target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}")
-target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}")
-target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}")
-target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}")
-
-# Disable Windows macros that collide with C++ standard library functions.
-target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX")
-
-# Add dependency libraries and include directories. Add any application-specific
-# dependencies here.
-target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app)
-target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}")
-
-# Run the Flutter tool portions of the build. This must not be removed.
-add_dependencies(${BINARY_NAME} flutter_assemble)
diff --git a/star_lock/windows/runner/Runner.rc b/star_lock/windows/runner/Runner.rc
deleted file mode 100644
index 1e1a0eea..00000000
--- a/star_lock/windows/runner/Runner.rc
+++ /dev/null
@@ -1,121 +0,0 @@
-// Microsoft Visual C++ generated resource script.
-//
-#pragma code_page(65001)
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "winres.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// English (United States) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE
-BEGIN
- "resource.h\0"
-END
-
-2 TEXTINCLUDE
-BEGIN
- "#include ""winres.h""\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Icon
-//
-
-// Icon with lowest ID value placed first to ensure application icon
-// remains consistent on all systems.
-IDI_APP_ICON ICON "resources\\app_icon.ico"
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-
-#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD)
-#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD
-#else
-#define VERSION_AS_NUMBER 1,0,0,0
-#endif
-
-#if defined(FLUTTER_VERSION)
-#define VERSION_AS_STRING FLUTTER_VERSION
-#else
-#define VERSION_AS_STRING "1.0.0"
-#endif
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION VERSION_AS_NUMBER
- PRODUCTVERSION VERSION_AS_NUMBER
- FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
-#ifdef _DEBUG
- FILEFLAGS VS_FF_DEBUG
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS VOS__WINDOWS32
- FILETYPE VFT_APP
- FILESUBTYPE 0x0L
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904e4"
- BEGIN
- VALUE "CompanyName", "com.example" "\0"
- VALUE "FileDescription", "star_lock" "\0"
- VALUE "FileVersion", VERSION_AS_STRING "\0"
- VALUE "InternalName", "star_lock" "\0"
- VALUE "LegalCopyright", "Copyright (C) 2023 com.example. All rights reserved." "\0"
- VALUE "OriginalFilename", "star_lock.exe" "\0"
- VALUE "ProductName", "star_lock" "\0"
- VALUE "ProductVersion", VERSION_AS_STRING "\0"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1252
- END
-END
-
-#endif // English (United States) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
diff --git a/star_lock/windows/runner/flutter_window.cpp b/star_lock/windows/runner/flutter_window.cpp
deleted file mode 100644
index b43b9095..00000000
--- a/star_lock/windows/runner/flutter_window.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-#include "flutter_window.h"
-
-#include
-
-#include "flutter/generated_plugin_registrant.h"
-
-FlutterWindow::FlutterWindow(const flutter::DartProject& project)
- : project_(project) {}
-
-FlutterWindow::~FlutterWindow() {}
-
-bool FlutterWindow::OnCreate() {
- if (!Win32Window::OnCreate()) {
- return false;
- }
-
- RECT frame = GetClientArea();
-
- // The size here must match the window dimensions to avoid unnecessary surface
- // creation / destruction in the startup path.
- flutter_controller_ = std::make_unique(
- frame.right - frame.left, frame.bottom - frame.top, project_);
- // Ensure that basic setup of the controller was successful.
- if (!flutter_controller_->engine() || !flutter_controller_->view()) {
- return false;
- }
- RegisterPlugins(flutter_controller_->engine());
- SetChildContent(flutter_controller_->view()->GetNativeWindow());
- return true;
-}
-
-void FlutterWindow::OnDestroy() {
- if (flutter_controller_) {
- flutter_controller_ = nullptr;
- }
-
- Win32Window::OnDestroy();
-}
-
-LRESULT
-FlutterWindow::MessageHandler(HWND hwnd, UINT const message,
- WPARAM const wparam,
- LPARAM const lparam) noexcept {
- // Give Flutter, including plugins, an opportunity to handle window messages.
- if (flutter_controller_) {
- std::optional result =
- flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam,
- lparam);
- if (result) {
- return *result;
- }
- }
-
- switch (message) {
- case WM_FONTCHANGE:
- flutter_controller_->engine()->ReloadSystemFonts();
- break;
- }
-
- return Win32Window::MessageHandler(hwnd, message, wparam, lparam);
-}
diff --git a/star_lock/windows/runner/flutter_window.h b/star_lock/windows/runner/flutter_window.h
deleted file mode 100644
index 6da0652f..00000000
--- a/star_lock/windows/runner/flutter_window.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef RUNNER_FLUTTER_WINDOW_H_
-#define RUNNER_FLUTTER_WINDOW_H_
-
-#include
-#include
-
-#include
-
-#include "win32_window.h"
-
-// A window that does nothing but host a Flutter view.
-class FlutterWindow : public Win32Window {
- public:
- // Creates a new FlutterWindow hosting a Flutter view running |project|.
- explicit FlutterWindow(const flutter::DartProject& project);
- virtual ~FlutterWindow();
-
- protected:
- // Win32Window:
- bool OnCreate() override;
- void OnDestroy() override;
- LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam,
- LPARAM const lparam) noexcept override;
-
- private:
- // The project to run.
- flutter::DartProject project_;
-
- // The Flutter instance hosted by this window.
- std::unique_ptr flutter_controller_;
-};
-
-#endif // RUNNER_FLUTTER_WINDOW_H_
diff --git a/star_lock/windows/runner/main.cpp b/star_lock/windows/runner/main.cpp
deleted file mode 100644
index 98ed3594..00000000
--- a/star_lock/windows/runner/main.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-#include
-#include
-#include
-
-#include "flutter_window.h"
-#include "utils.h"
-
-int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
- _In_ wchar_t *command_line, _In_ int show_command) {
- // Attach to console when present (e.g., 'flutter run') or create a
- // new console when running with a debugger.
- if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) {
- CreateAndAttachConsole();
- }
-
- // Initialize COM, so that it is available for use in the library and/or
- // plugins.
- ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);
-
- flutter::DartProject project(L"data");
-
- std::vector command_line_arguments =
- GetCommandLineArguments();
-
- project.set_dart_entrypoint_arguments(std::move(command_line_arguments));
-
- FlutterWindow window(project);
- Win32Window::Point origin(10, 10);
- Win32Window::Size size(1280, 720);
- if (!window.CreateAndShow(L"star_lock", origin, size)) {
- return EXIT_FAILURE;
- }
- window.SetQuitOnClose(true);
-
- ::MSG msg;
- while (::GetMessage(&msg, nullptr, 0, 0)) {
- ::TranslateMessage(&msg);
- ::DispatchMessage(&msg);
- }
-
- ::CoUninitialize();
- return EXIT_SUCCESS;
-}
diff --git a/star_lock/windows/runner/resource.h b/star_lock/windows/runner/resource.h
deleted file mode 100644
index 66a65d1e..00000000
--- a/star_lock/windows/runner/resource.h
+++ /dev/null
@@ -1,16 +0,0 @@
-//{{NO_DEPENDENCIES}}
-// Microsoft Visual C++ generated include file.
-// Used by Runner.rc
-//
-#define IDI_APP_ICON 101
-
-// Next default values for new objects
-//
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 102
-#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1001
-#define _APS_NEXT_SYMED_VALUE 101
-#endif
-#endif
diff --git a/star_lock/windows/runner/resources/app_icon.ico b/star_lock/windows/runner/resources/app_icon.ico
deleted file mode 100644
index c04e20ca..00000000
Binary files a/star_lock/windows/runner/resources/app_icon.ico and /dev/null differ
diff --git a/star_lock/windows/runner/runner.exe.manifest b/star_lock/windows/runner/runner.exe.manifest
deleted file mode 100644
index a42ea768..00000000
--- a/star_lock/windows/runner/runner.exe.manifest
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
- PerMonitorV2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/star_lock/windows/runner/utils.cpp b/star_lock/windows/runner/utils.cpp
deleted file mode 100644
index f5bf9fa0..00000000
--- a/star_lock/windows/runner/utils.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-#include "utils.h"
-
-#include
-#include
-#include
-#include
-
-#include
-
-void CreateAndAttachConsole() {
- if (::AllocConsole()) {
- FILE *unused;
- if (freopen_s(&unused, "CONOUT$", "w", stdout)) {
- _dup2(_fileno(stdout), 1);
- }
- if (freopen_s(&unused, "CONOUT$", "w", stderr)) {
- _dup2(_fileno(stdout), 2);
- }
- std::ios::sync_with_stdio();
- FlutterDesktopResyncOutputStreams();
- }
-}
-
-std::vector GetCommandLineArguments() {
- // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use.
- int argc;
- wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc);
- if (argv == nullptr) {
- return std::vector();
- }
-
- std::vector command_line_arguments;
-
- // Skip the first argument as it's the binary name.
- for (int i = 1; i < argc; i++) {
- command_line_arguments.push_back(Utf8FromUtf16(argv[i]));
- }
-
- ::LocalFree(argv);
-
- return command_line_arguments;
-}
-
-std::string Utf8FromUtf16(const wchar_t* utf16_string) {
- if (utf16_string == nullptr) {
- return std::string();
- }
- int target_length = ::WideCharToMultiByte(
- CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string,
- -1, nullptr, 0, nullptr, nullptr);
- std::string utf8_string;
- if (target_length == 0 || target_length > utf8_string.max_size()) {
- return utf8_string;
- }
- utf8_string.resize(target_length);
- int converted_length = ::WideCharToMultiByte(
- CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string,
- -1, utf8_string.data(),
- target_length, nullptr, nullptr);
- if (converted_length == 0) {
- return std::string();
- }
- return utf8_string;
-}
diff --git a/star_lock/windows/runner/utils.h b/star_lock/windows/runner/utils.h
deleted file mode 100644
index 3879d547..00000000
--- a/star_lock/windows/runner/utils.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef RUNNER_UTILS_H_
-#define RUNNER_UTILS_H_
-
-#include
-#include
-
-// Creates a console for the process, and redirects stdout and stderr to
-// it for both the runner and the Flutter library.
-void CreateAndAttachConsole();
-
-// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string
-// encoded in UTF-8. Returns an empty std::string on failure.
-std::string Utf8FromUtf16(const wchar_t* utf16_string);
-
-// Gets the command line arguments passed in as a std::vector,
-// encoded in UTF-8. Returns an empty std::vector on failure.
-std::vector GetCommandLineArguments();
-
-#endif // RUNNER_UTILS_H_
diff --git a/star_lock/windows/runner/win32_window.cpp b/star_lock/windows/runner/win32_window.cpp
deleted file mode 100644
index c10f08dc..00000000
--- a/star_lock/windows/runner/win32_window.cpp
+++ /dev/null
@@ -1,245 +0,0 @@
-#include "win32_window.h"
-
-#include
-
-#include "resource.h"
-
-namespace {
-
-constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW";
-
-// The number of Win32Window objects that currently exist.
-static int g_active_window_count = 0;
-
-using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd);
-
-// Scale helper to convert logical scaler values to physical using passed in
-// scale factor
-int Scale(int source, double scale_factor) {
- return static_cast(source * scale_factor);
-}
-
-// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module.
-// This API is only needed for PerMonitor V1 awareness mode.
-void EnableFullDpiSupportIfAvailable(HWND hwnd) {
- HMODULE user32_module = LoadLibraryA("User32.dll");
- if (!user32_module) {
- return;
- }
- auto enable_non_client_dpi_scaling =
- reinterpret_cast(
- GetProcAddress(user32_module, "EnableNonClientDpiScaling"));
- if (enable_non_client_dpi_scaling != nullptr) {
- enable_non_client_dpi_scaling(hwnd);
- FreeLibrary(user32_module);
- }
-}
-
-} // namespace
-
-// Manages the Win32Window's window class registration.
-class WindowClassRegistrar {
- public:
- ~WindowClassRegistrar() = default;
-
- // Returns the singleton registar instance.
- static WindowClassRegistrar* GetInstance() {
- if (!instance_) {
- instance_ = new WindowClassRegistrar();
- }
- return instance_;
- }
-
- // Returns the name of the window class, registering the class if it hasn't
- // previously been registered.
- const wchar_t* GetWindowClass();
-
- // Unregisters the window class. Should only be called if there are no
- // instances of the window.
- void UnregisterWindowClass();
-
- private:
- WindowClassRegistrar() = default;
-
- static WindowClassRegistrar* instance_;
-
- bool class_registered_ = false;
-};
-
-WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr;
-
-const wchar_t* WindowClassRegistrar::GetWindowClass() {
- if (!class_registered_) {
- WNDCLASS window_class{};
- window_class.hCursor = LoadCursor(nullptr, IDC_ARROW);
- window_class.lpszClassName = kWindowClassName;
- window_class.style = CS_HREDRAW | CS_VREDRAW;
- window_class.cbClsExtra = 0;
- window_class.cbWndExtra = 0;
- window_class.hInstance = GetModuleHandle(nullptr);
- window_class.hIcon =
- LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON));
- window_class.hbrBackground = 0;
- window_class.lpszMenuName = nullptr;
- window_class.lpfnWndProc = Win32Window::WndProc;
- RegisterClass(&window_class);
- class_registered_ = true;
- }
- return kWindowClassName;
-}
-
-void WindowClassRegistrar::UnregisterWindowClass() {
- UnregisterClass(kWindowClassName, nullptr);
- class_registered_ = false;
-}
-
-Win32Window::Win32Window() {
- ++g_active_window_count;
-}
-
-Win32Window::~Win32Window() {
- --g_active_window_count;
- Destroy();
-}
-
-bool Win32Window::CreateAndShow(const std::wstring& title,
- const Point& origin,
- const Size& size) {
- Destroy();
-
- const wchar_t* window_class =
- WindowClassRegistrar::GetInstance()->GetWindowClass();
-
- const POINT target_point = {static_cast(origin.x),
- static_cast(origin.y)};
- HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST);
- UINT dpi = FlutterDesktopGetDpiForMonitor(monitor);
- double scale_factor = dpi / 96.0;
-
- HWND window = CreateWindow(
- window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE,
- Scale(origin.x, scale_factor), Scale(origin.y, scale_factor),
- Scale(size.width, scale_factor), Scale(size.height, scale_factor),
- nullptr, nullptr, GetModuleHandle(nullptr), this);
-
- if (!window) {
- return false;
- }
-
- return OnCreate();
-}
-
-// static
-LRESULT CALLBACK Win32Window::WndProc(HWND const window,
- UINT const message,
- WPARAM const wparam,
- LPARAM const lparam) noexcept {
- if (message == WM_NCCREATE) {
- auto window_struct = reinterpret_cast(lparam);
- SetWindowLongPtr(window, GWLP_USERDATA,
- reinterpret_cast(window_struct->lpCreateParams));
-
- auto that = static_cast(window_struct->lpCreateParams);
- EnableFullDpiSupportIfAvailable(window);
- that->window_handle_ = window;
- } else if (Win32Window* that = GetThisFromHandle(window)) {
- return that->MessageHandler(window, message, wparam, lparam);
- }
-
- return DefWindowProc(window, message, wparam, lparam);
-}
-
-LRESULT
-Win32Window::MessageHandler(HWND hwnd,
- UINT const message,
- WPARAM const wparam,
- LPARAM const lparam) noexcept {
- switch (message) {
- case WM_DESTROY:
- window_handle_ = nullptr;
- Destroy();
- if (quit_on_close_) {
- PostQuitMessage(0);
- }
- return 0;
-
- case WM_DPICHANGED: {
- auto newRectSize = reinterpret_cast(lparam);
- LONG newWidth = newRectSize->right - newRectSize->left;
- LONG newHeight = newRectSize->bottom - newRectSize->top;
-
- SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth,
- newHeight, SWP_NOZORDER | SWP_NOACTIVATE);
-
- return 0;
- }
- case WM_SIZE: {
- RECT rect = GetClientArea();
- if (child_content_ != nullptr) {
- // Size and position the child window.
- MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left,
- rect.bottom - rect.top, TRUE);
- }
- return 0;
- }
-
- case WM_ACTIVATE:
- if (child_content_ != nullptr) {
- SetFocus(child_content_);
- }
- return 0;
- }
-
- return DefWindowProc(window_handle_, message, wparam, lparam);
-}
-
-void Win32Window::Destroy() {
- OnDestroy();
-
- if (window_handle_) {
- DestroyWindow(window_handle_);
- window_handle_ = nullptr;
- }
- if (g_active_window_count == 0) {
- WindowClassRegistrar::GetInstance()->UnregisterWindowClass();
- }
-}
-
-Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept {
- return reinterpret_cast(
- GetWindowLongPtr(window, GWLP_USERDATA));
-}
-
-void Win32Window::SetChildContent(HWND content) {
- child_content_ = content;
- SetParent(content, window_handle_);
- RECT frame = GetClientArea();
-
- MoveWindow(content, frame.left, frame.top, frame.right - frame.left,
- frame.bottom - frame.top, true);
-
- SetFocus(child_content_);
-}
-
-RECT Win32Window::GetClientArea() {
- RECT frame;
- GetClientRect(window_handle_, &frame);
- return frame;
-}
-
-HWND Win32Window::GetHandle() {
- return window_handle_;
-}
-
-void Win32Window::SetQuitOnClose(bool quit_on_close) {
- quit_on_close_ = quit_on_close;
-}
-
-bool Win32Window::OnCreate() {
- // No-op; provided for subclasses.
- return true;
-}
-
-void Win32Window::OnDestroy() {
- // No-op; provided for subclasses.
-}
diff --git a/star_lock/windows/runner/win32_window.h b/star_lock/windows/runner/win32_window.h
deleted file mode 100644
index 17ba4311..00000000
--- a/star_lock/windows/runner/win32_window.h
+++ /dev/null
@@ -1,98 +0,0 @@
-#ifndef RUNNER_WIN32_WINDOW_H_
-#define RUNNER_WIN32_WINDOW_H_
-
-#include
-
-#include
-#include
-#include
-
-// A class abstraction for a high DPI-aware Win32 Window. Intended to be
-// inherited from by classes that wish to specialize with custom
-// rendering and input handling
-class Win32Window {
- public:
- struct Point {
- unsigned int x;
- unsigned int y;
- Point(unsigned int x, unsigned int y) : x(x), y(y) {}
- };
-
- struct Size {
- unsigned int width;
- unsigned int height;
- Size(unsigned int width, unsigned int height)
- : width(width), height(height) {}
- };
-
- Win32Window();
- virtual ~Win32Window();
-
- // Creates and shows a win32 window with |title| and position and size using
- // |origin| and |size|. New windows are created on the default monitor. Window
- // sizes are specified to the OS in physical pixels, hence to ensure a
- // consistent size to will treat the width height passed in to this function
- // as logical pixels and scale to appropriate for the default monitor. Returns
- // true if the window was created successfully.
- bool CreateAndShow(const std::wstring& title,
- const Point& origin,
- const Size& size);
-
- // Release OS resources associated with window.
- void Destroy();
-
- // Inserts |content| into the window tree.
- void SetChildContent(HWND content);
-
- // Returns the backing Window handle to enable clients to set icon and other
- // window properties. Returns nullptr if the window has been destroyed.
- HWND GetHandle();
-
- // If true, closing this window will quit the application.
- void SetQuitOnClose(bool quit_on_close);
-
- // Return a RECT representing the bounds of the current client area.
- RECT GetClientArea();
-
- protected:
- // Processes and route salient window messages for mouse handling,
- // size change and DPI. Delegates handling of these to member overloads that
- // inheriting classes can handle.
- virtual LRESULT MessageHandler(HWND window,
- UINT const message,
- WPARAM const wparam,
- LPARAM const lparam) noexcept;
-
- // Called when CreateAndShow is called, allowing subclass window-related
- // setup. Subclasses should return false if setup fails.
- virtual bool OnCreate();
-
- // Called when Destroy is called.
- virtual void OnDestroy();
-
- private:
- friend class WindowClassRegistrar;
-
- // OS callback called by message pump. Handles the WM_NCCREATE message which
- // is passed when the non-client area is being created and enables automatic
- // non-client DPI scaling so that the non-client area automatically
- // responsponds to changes in DPI. All other messages are handled by
- // MessageHandler.
- static LRESULT CALLBACK WndProc(HWND const window,
- UINT const message,
- WPARAM const wparam,
- LPARAM const lparam) noexcept;
-
- // Retrieves a class instance pointer for |window|
- static Win32Window* GetThisFromHandle(HWND const window) noexcept;
-
- bool quit_on_close_ = false;
-
- // window handle for top level window.
- HWND window_handle_ = nullptr;
-
- // window handle for hosted content.
- HWND child_content_ = nullptr;
-};
-
-#endif // RUNNER_WIN32_WINDOW_H_