Compare commits

..

6 Commits

Author SHA1 Message Date
machuanyu 9518308e80 Merge branch 'new_main' into mcy_new
# Conflicts:
#	making_school_asignment_app/pubspec.yaml
2024-07-26 09:36:57 +08:00
1147192855@qq.com 22d3065892 Windows自动跟新 2024-07-24 17:45:09 +08:00
豌杂 b1c95c0cbd 1111 2024-07-18 15:20:48 +08:00
1147192855@qq.com 71efe59164 no message 2024-07-18 13:49:11 +08:00
1147192855@qq.com 1e59440872 no message 2024-07-18 11:05:07 +08:00
1147192855@qq.com d27da83658 no message 2024-07-18 10:11:31 +08:00
19 changed files with 224 additions and 11 deletions

View File

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle">
<channel>
<title>auto_updater_example</title>
<description>Most recent updates to auto_updater_example</description>
<language>en</language>
<!-- <item>
<title>Version 1.1.0</title>
#发行说明-读取html方式(2选1)
<sparkle:releaseNotesLink>
https://your_domain/your_path/release_notes.html
</sparkle:releaseNotesLink>
#发行说明-写死方式(2选1)
<description>
<![CDATA[
<ul>
<li>1、新增XX功能</li>
<li>2、新增XX功能</li>
</ul>
]]>
</description>
<pubDate>Sun, 16 Feb 2022 12:00:00 +0800</pubDate>
#你更新程序的地址
<enclosure url="http://wwww.xxx.com/1.1.0+2/auto_updater_example-1.1.0+2-macos.zip"
sparkle:edSignature="pbdyPt92pnPkzLfQ7BhS9hbjcV9/ndkzSIlWjFQIUMcaCNbAFO2fzl0tISMNJApG2POTkZY0/kJQ2yZYOSVgAA=="
sparkle:version="1.1.0"
sparkle:os="macos"
length="13400992"
type="application/octet-stream" />
</item> -->
<item>
<title>Version 1.0.0</title>
#发行说明-读取html方式(2选1)
<!-- <sparkle:releaseNotesLink>
https://your_domain/your_path/release_notes.html
</sparkle:releaseNotesLink> -->
#发行说明-写死方式(2选1)
<description>
<![CDATA[
<ul>
<li>1、新增XX功能</li>
<li>2、新增XX功能</li>
</ul>
]]>
</description>
<pubDate>Sun, 16 Feb 2022 12:00:00 +0800</pubDate>
#你更新程序的地址
<enclosure url="https://dpc-job-oss.23544.com/infra-app/making_school_asignment_app/1.0.0/3/making_school_asignment_app-1.0.0+1-windows-setup.exe"
sparkle:dsaSignature="MEUCICOob1N5PNhjRDWh2gHHOuJayep41hP+BMyF26BoYjQLAiEA2dG22KMc2HCQTUyWe1pxWmCJqVmdNQU+Mmfvojg0K2M="
sparkle:version="1.0.0+1"
sparkle:os="windows"
length="0"
type="application/octet-stream" />
</item>
</channel>
</rss>

View File

@ -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

View File

@ -0,0 +1,36 @@
-----BEGIN DSA PRIVATE KEY-----
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
-----END DSA PRIVATE KEY-----

View File

@ -0,0 +1,36 @@
-----BEGIN PUBLIC KEY-----
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
xqzNyz8my0P48jVXui+9PFlCdm21gcugzJQL
-----END PUBLIC KEY-----

View File

@ -141,5 +141,5 @@ abstract class RetrofitClient {
// APP
@GET("/api/infra/AppVersion/Get")
Future<AppVersion?> getLastAppVersion(@Query('appName') String appName, @Query('ftuType') int ftuType); // ftuType 1 2IOS
Future<AppVersion?> getLastAppVersion(@Query('appName') String appName, @Query('ftuType') int ftuType); // ftuType 1 2IOS 3windows
}

View File

@ -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<String, dynamic> srcJson) => _$AppVersionFromJson(srcJson);

View File

@ -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<T> {
StreamSubscription? _subscription;
late final StreamSubscription? _subscription;
static final EventBusUtils _exampleUtil = EventBusUtils();
static final EventBus _eBus = _exampleUtil.getEventBus();

View File

@ -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),
),

View File

@ -80,4 +80,4 @@ class UpdateAppEvent {
}
//
enum Equipment { other, android, ios }
enum Equipment { other, android, ios, windows }

View File

@ -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新版本更新'

View File

@ -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>(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

View File

@ -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<StartPage> createState() => _StartPageState();

View File

@ -439,6 +439,8 @@ class QuestionImageView extends HookWidget with EventBusMixin<BottomOperationBar
return -1;
}
int activePointers = 0;
@override
Widget build(BuildContext context) {
final scrollControllerQuestion = useScrollController(); //
@ -551,6 +553,7 @@ class QuestionImageView extends HookWidget with EventBusMixin<BottomOperationBar
//
return () {
activePointers = 0;
listenVal.cancel();
imageStream?.removeListener(imageStreamListener.value);
};
@ -577,16 +580,26 @@ class QuestionImageView extends HookWidget with EventBusMixin<BottomOperationBar
boxShadow: [BoxShadow(color: Colors.grey.withOpacity(0.2), offset: Offset(-6.r, 1.r), blurRadius: 10.r, spreadRadius: 8.r)]),
child: Listener(
behavior: HitTestBehavior.opaque,
onPointerDown: (PointerDownEvent event) {
//
//
activePointers++;
},
onPointerUp: (PointerUpEvent details) {
//
// activePointers--;
// globalPosition = null;
activePointers--;
var imageScale = sateData.imageScale.value;
if (imageScale == null || !annotationState.pen.value) return;
vnHandWritings.value.add(null); // 线
sateData.handwritings = vnHandWritings.value; //
},
onPointerMove: (PointerMoveEvent event) {
if (activePointers != 1) return;
var imageScale = sateData.imageScale.value;
if (imageScale == null || !annotationState.pen.value) return;
Offset localPosition = event.localPosition;

View File

@ -5,6 +5,7 @@
import FlutterMacOS
import Foundation
import auto_updater_macos
import connectivity_plus
import package_info_plus
import path_provider_foundation
@ -12,6 +13,7 @@ import sqflite
import url_launcher_macos
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
AutoUpdaterMacosPlugin.register(with: registry.registrar(forPlugin: "AutoUpdaterMacosPlugin"))
ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin"))
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))

View File

@ -90,7 +90,9 @@ dependencies:
flutter_echart: ^2.0.0
url_launcher: ^6.1.11
app_installer: ^1.1.0
auto_updater: ^0.2.1
permission_handler: ^11.0.1
flutter_distributor: ^0.4.5
flutter_native_splash: 2.2.9
dev_dependencies:

View File

@ -6,11 +6,14 @@
#include "generated_plugin_registrant.h"
#include <auto_updater_windows/auto_updater_windows_plugin_c_api.h>
#include <connectivity_plus/connectivity_plus_windows_plugin.h>
#include <permission_handler_windows/permission_handler_windows_plugin.h>
#include <url_launcher_windows/url_launcher_windows.h>
void RegisterPlugins(flutter::PluginRegistry* registry) {
AutoUpdaterWindowsPluginCApiRegisterWithRegistrar(
registry->GetRegistrarForPlugin("AutoUpdaterWindowsPluginCApi"));
ConnectivityPlusWindowsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("ConnectivityPlusWindowsPlugin"));
PermissionHandlerWindowsPluginRegisterWithRegistrar(

View File

@ -3,6 +3,7 @@
#
list(APPEND FLUTTER_PLUGIN_LIST
auto_updater_windows
connectivity_plus
permission_handler_windows
url_launcher_windows

View File

@ -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

View File

@ -119,3 +119,11 @@ END
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// WinSparkle
//
// And verify signature using DSA public key:
DSAPub DSAPEM "./../../dsa_pub.pem"