123 lines
3.5 KiB
Dart
123 lines
3.5 KiB
Dart
import 'package:app_upgrade_plugin/models/app_market.dart';
|
||
|
||
/// App升级信息模型
|
||
class UpgradeInfo {
|
||
/// 是否有新版本
|
||
final bool hasUpdate;
|
||
|
||
/// 是否强制更新
|
||
final bool isForceUpdate;
|
||
|
||
/// 版本号
|
||
final int versionBuildNumber;
|
||
|
||
/// 版本名称
|
||
final String versionName;
|
||
|
||
/// 当前版本号
|
||
final int currentBuildNumber;
|
||
|
||
/// 当前版本名称
|
||
final String currentVersionName;
|
||
|
||
/// 更新说明
|
||
final String updateContent;
|
||
|
||
/// 下载地址(Android APK地址)
|
||
final String? downloadUrl;
|
||
|
||
/// App Store地址(iOS)
|
||
final String? appStoreUrl;
|
||
|
||
/// APK文件大小(字节)
|
||
final int? apkSize;
|
||
|
||
/// APK MD5值(用于校验)
|
||
final String? apkMd5;
|
||
|
||
/// 应用商店列表(用于Android多渠道更新)
|
||
final List<AppMarketInfo>? appMarkets;
|
||
|
||
UpgradeInfo({
|
||
this.hasUpdate = false,
|
||
required this.isForceUpdate,
|
||
required this.versionBuildNumber,
|
||
required this.versionName,
|
||
required this.updateContent,
|
||
required this.currentBuildNumber,
|
||
required this.currentVersionName,
|
||
this.downloadUrl,
|
||
this.appStoreUrl,
|
||
this.apkSize,
|
||
this.apkMd5,
|
||
this.appMarkets,
|
||
});
|
||
|
||
/// 从JSON创建
|
||
/// [currentBuildNumber] 当前版本号
|
||
/// [currentVersion] 当前版本名称
|
||
factory UpgradeInfo.fromJson(
|
||
Map<String, dynamic> json, {
|
||
required int currentBuildNumber,
|
||
required String currentVersionName,
|
||
}) {
|
||
final versionBuildNumber = json['versionBuildNumber'];
|
||
final versionName = json['versionName'];
|
||
return UpgradeInfo(
|
||
hasUpdate: versionBuildNumber != currentBuildNumber || versionName != currentVersionName,
|
||
isForceUpdate: json['isForceUpdate'] ?? false,
|
||
versionBuildNumber: versionBuildNumber,
|
||
versionName: versionName,
|
||
currentBuildNumber: currentBuildNumber,
|
||
currentVersionName: currentVersionName,
|
||
updateContent: json['updateContent'] ?? '',
|
||
downloadUrl: json['downloadUrl'] as String?,
|
||
appStoreUrl: json['appStoreUrl'] as String?,
|
||
apkSize: json['apkSize'] as int?,
|
||
apkMd5: json['apkMd5'] as String?,
|
||
appMarkets: (json['appMarkets'] as List<dynamic>?)
|
||
?.map((e) => AppMarketInfo.fromJson(e as Map<String, dynamic>))
|
||
.toList(),
|
||
);
|
||
}
|
||
|
||
Map<String, dynamic> toJson() {
|
||
return {
|
||
'hasUpdate': hasUpdate,
|
||
'isForceUpdate': isForceUpdate,
|
||
'versionBuildNumber': versionBuildNumber,
|
||
'versionName': versionName,
|
||
'updateContent': updateContent,
|
||
'currentBuildNumber': currentBuildNumber,
|
||
'currentVersionName': currentVersionName,
|
||
'downloadUrl': downloadUrl,
|
||
'appStoreUrl': appStoreUrl,
|
||
'apkSize': apkSize,
|
||
'apkMd5': apkMd5,
|
||
'appMarkets': appMarkets?.map((e) => e.toJson()).toList(),
|
||
};
|
||
}
|
||
|
||
@override
|
||
String toString() {
|
||
return 'UpgradeInfo(hasUpdate: $hasUpdate, isForceUpdate: $isForceUpdate, versionBuildNumber: $versionBuildNumber, versionName: $versionName, currentBuildNumber: $currentBuildNumber, currentVersionName: $currentVersionName, updateContent: $downloadUrl, appStoreUrl: $appStoreUrl, apkSize: $apkSize, apkMd5: $apkMd5, appMarkets: $appMarkets)';
|
||
}
|
||
}
|
||
|
||
/// 下载进度信息
|
||
class DownloadProgress {
|
||
/// 已下载字节数
|
||
final int received;
|
||
|
||
/// 总字节数
|
||
final int total;
|
||
|
||
/// 下载进度(0.0 - 1.0)
|
||
double get progress => total > 0 ? received / total : 0.0;
|
||
|
||
/// 进度百分比(0 - 100)
|
||
int get percentage => (progress * 100).toInt();
|
||
|
||
DownloadProgress({required this.received, required this.total});
|
||
}
|