yx_app_upgrade_flutter/lib/models/upgrade_info.dart

123 lines
3.5 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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});
}