diff --git a/making_school_asignment_app/appcast.xml b/making_school_asignment_app/appcast.xml
new file mode 100644
index 0000000..b088a3c
--- /dev/null
+++ b/making_school_asignment_app/appcast.xml
@@ -0,0 +1,56 @@
+
+
+
+ auto_updater_example
+ Most recent updates to auto_updater_example
+ en
+
+ -
+ Version 1.0.0
+ #发行说明-读取html方式(2选1)
+
+ #发行说明-写死方式(2选1)
+
+
+ 1、新增XX功能
+ 2、新增XX功能
+
+ ]]>
+
+ Sun, 16 Feb 2022 12:00:00 +0800
+ #你更新程序的地址
+
+
+
+
\ No newline at end of file
diff --git a/making_school_asignment_app/distribute_options.yaml b/making_school_asignment_app/distribute_options.yaml
new file mode 100644
index 0000000..c154351
--- /dev/null
+++ b/making_school_asignment_app/distribute_options.yaml
@@ -0,0 +1,19 @@
+output: dist/
+releases:
+ - name: prod
+ jobs:
+ - name: macos-zip
+ package:
+ platform: macos
+ target: zip
+ build_args:
+ dart-define:
+ APP_ENV: dev
+ # 查看完整文档:https://distributor.leanflutter.org/configuration/makers/exe
+ - name: windows-exe
+ package:
+ platform: windows
+ target: exe
+ build_args:
+ dart-define:
+ APP_ENV: dev
\ No newline at end of file
diff --git a/making_school_asignment_app/dsa_priv.pem b/making_school_asignment_app/dsa_priv.pem
new file mode 100644
index 0000000..8fc331f
--- /dev/null
+++ b/making_school_asignment_app/dsa_priv.pem
@@ -0,0 +1,36 @@
+-----BEGIN DSA PRIVATE KEY-----
+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
+-----END DSA PRIVATE KEY-----
diff --git a/making_school_asignment_app/dsa_pub.pem b/making_school_asignment_app/dsa_pub.pem
new file mode 100644
index 0000000..ffabf45
--- /dev/null
+++ b/making_school_asignment_app/dsa_pub.pem
@@ -0,0 +1,36 @@
+-----BEGIN PUBLIC KEY-----
+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
+xqzNyz8my0P48jVXui+9PFlCdm21gcugzJQL
+-----END PUBLIC KEY-----
diff --git a/making_school_asignment_app/lib/common/api/retrofit_client.dart b/making_school_asignment_app/lib/common/api/retrofit_client.dart
index e803f76..3597235 100644
--- a/making_school_asignment_app/lib/common/api/retrofit_client.dart
+++ b/making_school_asignment_app/lib/common/api/retrofit_client.dart
@@ -141,5 +141,5 @@ abstract class RetrofitClient {
// 获取APP 版本
@GET("/api/infra/AppVersion/Get")
- Future getLastAppVersion(@Query('appName') String appName, @Query('ftuType') int ftuType); // ftuType 1安卓 2IOS
+ Future getLastAppVersion(@Query('appName') String appName, @Query('ftuType') int ftuType); // ftuType 1安卓 2IOS 3windows
}
diff --git a/making_school_asignment_app/lib/common/job/app_version.dart b/making_school_asignment_app/lib/common/job/app_version.dart
index aa8de30..ff2354a 100644
--- a/making_school_asignment_app/lib/common/job/app_version.dart
+++ b/making_school_asignment_app/lib/common/job/app_version.dart
@@ -28,7 +28,7 @@ class AppVersion extends Object {
int ftuType;
@JsonKey(name: 'downloadUrl')
- String downloadUrl;
+ String? downloadUrl;
@JsonKey(name: 'description')
String? description;
@@ -44,7 +44,7 @@ class AppVersion extends Object {
this.downloadUrl,
this.description,
) {
- downloadUrl = RequestConfig.imgUrl + downloadUrl;
+ if (downloadUrl != null) downloadUrl = RequestConfig.imgUrl + downloadUrl!;
}
factory AppVersion.fromJson(Map srcJson) => _$AppVersionFromJson(srcJson);
diff --git a/making_school_asignment_app/lib/common/mixins/event_bus_mixin.dart b/making_school_asignment_app/lib/common/mixins/event_bus_mixin.dart
index 9c01517..3052c81 100644
--- a/making_school_asignment_app/lib/common/mixins/event_bus_mixin.dart
+++ b/making_school_asignment_app/lib/common/mixins/event_bus_mixin.dart
@@ -5,7 +5,7 @@ import 'package:event_bus/event_bus.dart';
import 'package:making_school_asignment_app/common/utils/event_bus_utils.dart';
mixin EventBusMixin {
- StreamSubscription? _subscription;
+ late final StreamSubscription? _subscription;
static final EventBusUtils _exampleUtil = EventBusUtils();
static final EventBus _eBus = _exampleUtil.getEventBus();
diff --git a/making_school_asignment_app/lib/common/utils/app_upgrade/UpdateDialog.dart b/making_school_asignment_app/lib/common/utils/app_upgrade/UpdateDialog.dart
index 4d41354..00e4f86 100644
--- a/making_school_asignment_app/lib/common/utils/app_upgrade/UpdateDialog.dart
+++ b/making_school_asignment_app/lib/common/utils/app_upgrade/UpdateDialog.dart
@@ -14,6 +14,7 @@
* @LastEditors: Please set LastEditors
* @LastEditTime: 2021-01-12 15:08:43
*/
+import 'package:auto_updater/auto_updater.dart';
import 'package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart';
import 'package:get/get.dart';
import 'package:making_school_asignment_app/common/utils/app_upgrade/DownloadApk.dart';
@@ -168,15 +169,19 @@ class DownloadButton extends StatelessWidget {
final count = logic.downloadRatio.value;
if (count > 0) return Container();
var primaryColor = Theme.of(context).primaryColor;
+
+ if (updateAppEvent.equipment == Equipment.windows) {
+ return SizedBox(
+ child: quickText('若没有弹出更新弹框,可关闭APP重新打开执行更新...', size: 16.sp),
+ );
+ }
+
return Container(
height: 38.h,
width: 245.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(42.h)),
- gradient: LinearGradient(colors: [
- primaryColor,
- primaryColor.withOpacity(0.7),
- ]),
+ gradient: LinearGradient(colors: [primaryColor, primaryColor.withOpacity(0.7)]),
),
child: MaterialButton(
onPressed: () => easyThrottle('DownloadButton_App_Upgrade', duration: const Duration(milliseconds: 1000), () async {
@@ -203,6 +208,11 @@ class DownloadButton extends StatelessWidget {
print('进来更新报错$e');
}
}
+ // else if (deviceInfo == 'windows' && updateAppEvent.equipment == Equipment.windows) {
+ // await autoUpdater.setFeedURL(updateAppEvent.link);
+ // await autoUpdater.checkForUpdates();
+ // await autoUpdater.setScheduledCheckInterval(0);
+ // }
}),
child: quickText(!logic.loadingApk.value ? '立即体验' : '正在下载...', size: 16.sp, color: Colors.white, fontWeight: FontWeight.w500),
),
diff --git a/making_school_asignment_app/lib/common/utils/app_upgrade/model/UpdateAppEvent.dart b/making_school_asignment_app/lib/common/utils/app_upgrade/model/UpdateAppEvent.dart
index 581721f..6db38c7 100644
--- a/making_school_asignment_app/lib/common/utils/app_upgrade/model/UpdateAppEvent.dart
+++ b/making_school_asignment_app/lib/common/utils/app_upgrade/model/UpdateAppEvent.dart
@@ -80,4 +80,4 @@ class UpdateAppEvent {
}
// 设备枚举
-enum Equipment { other, android, ios }
+enum Equipment { other, android, ios, windows }
diff --git a/making_school_asignment_app/lib/common/utils/app_upgrade/upgradeLogic.dart b/making_school_asignment_app/lib/common/utils/app_upgrade/upgradeLogic.dart
index 8bd7ee6..6f23c6e 100644
--- a/making_school_asignment_app/lib/common/utils/app_upgrade/upgradeLogic.dart
+++ b/making_school_asignment_app/lib/common/utils/app_upgrade/upgradeLogic.dart
@@ -33,6 +33,9 @@ class UpgradeLogic extends GetxController with RequestToolMixin {
} else if (Platform.isIOS) {
deviceInfo = "ios";
deviceType = 2;
+ } else if (Platform.isWindows) {
+ deviceInfo = "windows";
+ deviceType = 3;
} else {
return;
}
@@ -48,7 +51,7 @@ class UpgradeLogic extends GetxController with RequestToolMixin {
// String buildNumber = packageInfo.buildNumber; //小版本号
Map json = {
- 'downloadPath': result.downloadUrl,
+ 'downloadPath': Platform.isWindows ? '' : result.downloadUrl,
'version': result.version,
'systemType': deviceType,
'description': result.description ?? 'APP新版本更新'
diff --git a/making_school_asignment_app/lib/main.dart b/making_school_asignment_app/lib/main.dart
index 01b99b6..47edd22 100644
--- a/making_school_asignment_app/lib/main.dart
+++ b/making_school_asignment_app/lib/main.dart
@@ -1,3 +1,5 @@
+import 'dart:io';
+import 'package:auto_updater/auto_updater.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
@@ -12,6 +14,7 @@ import 'package:making_school_asignment_app/routes/app_pages.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:permission_handler/permission_handler.dart';
+import 'common/config/request_config.dart';
import 'common/utils/app_upgrade/upgradeLogic.dart';
import 'package:flutter_native_splash/flutter_native_splash.dart';
@@ -27,6 +30,15 @@ void main() async {
Get.put(UserStore().init());
Get.put(UpgradeLogic());
WidgetsFlutterBinding.ensureInitialized();
+
+ // Windows
+ if (Platform.isWindows) {
+ String feedURL = '${RequestConfig.imgUrl}infra-app/making_school_asignment_app/3/appcast.xml';
+ await autoUpdater.setFeedURL(feedURL);
+ await autoUpdater.checkForUpdates();
+ await autoUpdater.setScheduledCheckInterval(3600);
+ }
+
SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
statusBarColor: Colors.transparent, //状态栏背景颜色
statusBarIconBrightness: Brightness.dark // dark:一般显示黑色 light:一般显示白色
diff --git a/making_school_asignment_app/lib/page/global_widget/start_page.dart b/making_school_asignment_app/lib/page/global_widget/start_page.dart
index 76e2607..e0ba1b0 100644
--- a/making_school_asignment_app/lib/page/global_widget/start_page.dart
+++ b/making_school_asignment_app/lib/page/global_widget/start_page.dart
@@ -19,7 +19,7 @@ import 'package:making_school_asignment_app/page/work_page/work_view.dart';
import 'package:making_school_asignment_app/routes/app_pages.dart';
class StartPage extends StatefulWidget {
- const StartPage({Key? key}) : super(key: key);
+ const StartPage({super.key});
@override
State createState() => _StartPageState();
diff --git a/making_school_asignment_app/lib/page/home_page/children/homework_review/components/question_paper_view.dart b/making_school_asignment_app/lib/page/home_page/children/homework_review/components/question_paper_view.dart
index 9ccc15c..09527aa 100644
--- a/making_school_asignment_app/lib/page/home_page/children/homework_review/components/question_paper_view.dart
+++ b/making_school_asignment_app/lib/page/home_page/children/homework_review/components/question_paper_view.dart
@@ -439,6 +439,8 @@ class QuestionImageView extends HookWidget with EventBusMixin
#include
#include
#include
void RegisterPlugins(flutter::PluginRegistry* registry) {
+ AutoUpdaterWindowsPluginCApiRegisterWithRegistrar(
+ registry->GetRegistrarForPlugin("AutoUpdaterWindowsPluginCApi"));
ConnectivityPlusWindowsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("ConnectivityPlusWindowsPlugin"));
PermissionHandlerWindowsPluginRegisterWithRegistrar(
diff --git a/making_school_asignment_app/windows/flutter/generated_plugins.cmake b/making_school_asignment_app/windows/flutter/generated_plugins.cmake
index 9678546..1a3c9b6 100644
--- a/making_school_asignment_app/windows/flutter/generated_plugins.cmake
+++ b/making_school_asignment_app/windows/flutter/generated_plugins.cmake
@@ -3,6 +3,7 @@
#
list(APPEND FLUTTER_PLUGIN_LIST
+ auto_updater_windows
connectivity_plus
permission_handler_windows
url_launcher_windows
diff --git a/making_school_asignment_app/windows/packaging/exe/make_config.yaml b/making_school_asignment_app/windows/packaging/exe/make_config.yaml
new file mode 100644
index 0000000..049374b
--- /dev/null
+++ b/making_school_asignment_app/windows/packaging/exe/make_config.yaml
@@ -0,0 +1,12 @@
+# The value of AppId uniquely identifies this application.
+# Do not use the same AppId value in installers for other applications.
+app_id: 9EBCC58D-39D5-4A4A-92B6-966DFFD6CA22
+publisher: LeanFlutter
+publisher_url: https://github.com/leanflutter/flutter_distributor
+display_name: 点智学
+create_desktop_icon: true
+# See: https://jrsoftware.org/ishelp/index.php?topic=setup_defaultdirname
+# install_dir_name: "D:\\HELLO-WORLD"
+locales:
+ - en
+ - zh
\ No newline at end of file
diff --git a/making_school_asignment_app/windows/runner/Runner.rc b/making_school_asignment_app/windows/runner/Runner.rc
index 841566a..6af7114 100644
--- a/making_school_asignment_app/windows/runner/Runner.rc
+++ b/making_school_asignment_app/windows/runner/Runner.rc
@@ -119,3 +119,11 @@ END
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// WinSparkle
+//
+
+// And verify signature using DSA public key:
+DSAPub DSAPEM "./../../dsa_pub.pem"