Flutter版本管理插件flutter_prince_of_versions的使用
Flutter版本管理插件flutter_prince_of_versions的使用
flutter_prince_of_versions
是一个用于检查应用更新的Flutter插件。它支持从远程资源获取更新信息,并且可以针对iOS和Android平台分别进行配置。
目录
使用
获取所有远程数据
你可以通过调用 checkForUpdates
方法来检查是否有新的应用版本可用。该方法允许你自定义更新流程,例如在有新次要版本时强制更新应用。
import 'package:flutter/material.dart';
import 'package:flutter_prince_of_versions/flutter_prince_of_versions.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
Future<void> checkForUpdates() async {
final url = "https://your-update-config-url.com"; // 替换为你的URL
try {
final data = await FlutterPrinceOfVersions.checkForUpdates(
url: url,
shouldPinCertificates: false,
requirementChecks: {
'region': (String region) {
return region == 'hr'; // 示例条件:仅当地区为'hr'时返回true
},
'bluetooth': (String bluetoothVersion) {
return bluetoothVersion == '5.0'; // 示例条件:仅当蓝牙版本为'5.0'时返回true
}
},
);
print('Update status: ${data.status}');
print('Installed version: ${data.updateInfo.installedVersion}');
print('Last version: ${data.updateInfo.lastVersionAvailable}');
} catch (e) {
print(e);
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("Flutter Prince of Versions Demo")),
body: Center(
child: ElevatedButton(
onPressed: checkForUpdates,
child: Text("Check for Updates"),
),
),
),
);
}
}
自动检查App Store更新
如果你不想手动管理JSON配置文件,可以使用 checkForUpdatesFromAppStore
方法。该方法会自动获取应用的Bundle ID并从App Store中获取版本信息。
Future<void> checkForUpdatesFromAppStore() async {
final updateData = await FlutterPrinceOfVersions.checkForUpdatesFromAppStore();
print('Update status: ${updateData.status}');
print('Current version: ${updateData.version}');
}
自动检查Google Play更新
对于Google Play上的应用,可以使用 checkForUpdatesFromGooglePlay
方法来检查更新。该方法会触发回调函数,以便在更新状态发生变化时通知用户。
import 'package:flutter/material.dart';
import 'package:flutter_prince_of_versions/flutter_prince_of_versions.dart';
class MyCallback extends Callback {
MyCallback(BuildContext context) {
_context = context;
}
BuildContext _context;
@override
void error(String localizedMessage) {
showDialog<bool>(
context: _context,
builder: (BuildContext context) {
return CupertinoAlertDialog(
title: Text('An error occurred'),
content: Text('$localizedMessage'),
actions: <Widget>[
CupertinoDialogAction(
child: Text('Ok'),
isDestructiveAction: false,
onPressed: () => Navigator.pop(context, true),
),
],
);
},
);
}
}
Future<void> checkForUpdatesFromGooglePlay() async {
final callback = MyCallback(context);
await FlutterPrinceOfVersions.checkForUpdatesFromGooglePlay(
"Google Play URL", callback);
}
JSON文件格式化
为了正确地配置更新检查,你需要提供一个符合特定格式的JSON文件。以下是iOS和Android的示例:
iOS示例
{
"ios": {
"minimum_version": "1.2.3",
"minimum_version_min_sdk": "8.0.0",
"latest_version": {
"version": "2.4.5",
"notification_type": "ALWAYS",
"min_sdk": "12.1.2"
}
},
"ios2": [
{
"required_version": "1.2.3",
"last_version_available": "1.9.0",
"notify_last_version_frequency": "ALWAYS",
"requirements": {
"required_os_version": "8.0.0",
"region": "hr",
"bluetooth": "5.0"
},
"meta": {
"key1": "value1",
"key2": 2
}
}
]
}
Android示例
{
"android": [{
"required_version": 10,
"last_version_available": 12,
"notify_last_version_frequency": "ONCE",
"requirements": {
"required_os_version": 18
},
"meta": {
"key1": "value3"
}
}]
}
R8/ProGuard
如果你正在使用R8或ProGuard,请确保添加以下选项以避免混淆相关类:
-keep class com.infinum.princeofversions.** { *; }
更多关于Flutter版本管理插件flutter_prince_of_versions的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter版本管理插件flutter_prince_of_versions的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用flutter_prince_of_versions
插件来进行版本管理的示例代码。flutter_prince_of_versions
插件允许你检查应用的当前版本,并与远程服务器上的最新版本进行比较,从而决定是否需要提示用户更新。
步骤 1: 添加依赖
首先,你需要在pubspec.yaml
文件中添加flutter_prince_of_versions
的依赖:
dependencies:
flutter:
sdk: flutter
flutter_prince_of_versions: ^x.y.z # 替换为最新版本号
然后运行flutter pub get
来安装依赖。
步骤 2: 配置PrinceOfVersions
你需要在应用的入口文件(通常是main.dart
)中配置PrinceOfVersions
。首先,你需要定义一个配置文件URL,这个URL应该指向一个包含应用版本信息的JSON文件。
示例配置文件(JSON格式)
假设你的配置文件URL是https://example.com/app/versions.json
,内容如下:
{
"latest_version": "2.1.0",
"mandatory_update_version": "2.0.0",
"android": {
"url": "https://example.com/app/releases/myapp-v2.1.0.apk"
},
"ios": {
"url": "https://example.com/app/releases/myapp-v2.1.0.ipa"
}
}
配置PrinceOfVersions
在你的main.dart
文件中:
import 'package:flutter/material.dart';
import 'package:flutter_prince_of_versions/flutter_prince_of_versions.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// 配置 PrinceOfVersions
final config = PrinceConfig(
updateConfigFileUrl: Uri.parse('https://example.com/app/versions.json'),
mandatoryUpdateConfiguration: MandatoryUpdateConfiguration(
currentVersion: '1.0.0', // 替换为你的当前版本号
mandatoryVersion: '2.0.0' // 替换为你的强制更新版本号
),
storeUpdateConfiguration: StoreUpdateConfiguration(
android: AndroidStoreUpdateConfiguration(
appId: 'com.example.myapp', // 替换为你的Android应用ID
),
ios: IosStoreUpdateConfiguration(
appId: '123456789', // 替换为你的iOS应用ID
),
),
);
// 使用 PrinceOfVersions
return PrinceOfVersions(
config: config,
builder: (context, prince) {
// 根据 PrinceOfVersions 的状态构建应用
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Demo Home Page'),
),
body: Center(
child: Text('Hello, Flutter!'),
),
),
// 在这里处理更新逻辑
onGenerateRoute: (settings) {
// 检查是否需要显示更新对话框
if (prince.state == PrinceState.mandatoryUpdateNeeded) {
// 显示强制更新对话框
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('强制更新'),
content: Text('请更新应用到最新版本以继续使用。'),
actions: <Widget>[
TextButton(
onPressed: () {
// 打开下载页面或应用商店页面
if (kIsAndroid) {
prince.openAndroidDownloadPage();
} else if (kIsIOS) {
prince.openIosAppStorePage();
}
},
child: Text('去更新'),
),
],
);
},
);
return null; // 阻止其他路由的生成
} else if (prince.state == PrinceState.optionalUpdateAvailable) {
// 显示可选更新提示
// 你可以在这里添加自定义的更新提示逻辑
}
// 处理其他路由
return null; // 或者返回你的路由处理器
},
);
},
);
}
}
注意事项
- 权限:确保你的应用有访问网络的权限,特别是Android需要在
AndroidManifest.xml
中添加INTERNET权限。 - 版本控制:确保你的
versions.json
文件中的版本号是正确的,并且与你的应用当前的版本号和强制更新版本号匹配。 - 测试:在发布前,确保在多个设备和平台上测试版本更新逻辑。
这个示例展示了如何使用flutter_prince_of_versions
插件来管理Flutter应用的版本更新。根据你的具体需求,你可能需要调整配置和更新逻辑。