Flutter应用包信息获取插件package_info_plus的使用
Flutter应用包信息获取插件package_info_plus的使用
package_info_plus 插件简介
package_info_plus
是一个用于查询应用程序包信息的Flutter插件。它支持多种平台,包括Android、iOS、MacOS、Web、Linux和Windows。
平台支持
平台 | 支持情况 |
---|---|
Android | ✅ |
iOS | ✅ |
MacOS | ✅ |
Web | ✅ |
Linux | ✅ |
Windows | ✅ |
需求
- Flutter >=3.19.0
- Dart >=3.3.0 <4.0.0
- iOS >=12.0
- MacOS >=10.14
- Android
compileSDK
34 - Java 17
- Android Gradle Plugin >=8.3.0
- Gradle wrapper >=8.4
使用方法
你可以使用PackageInfo
来查询有关应用程序包的信息。这在iOS和Android上都有效。
import 'package:package_info_plus/package_info_plus.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'PackageInfoPlus Demo',
theme: ThemeData(
useMaterial3: true,
colorSchemeSeed: const Color(0x9f4376f8),
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
PackageInfo _packageInfo = PackageInfo(
appName: 'Unknown',
packageName: 'Unknown',
version: 'Unknown',
buildNumber: 'Unknown',
buildSignature: 'Unknown',
installerStore: 'Unknown',
);
@override
void initState() {
super.initState();
_initPackageInfo();
}
Future<void> _initPackageInfo() async {
final info = await PackageInfo.fromPlatform();
setState(() {
_packageInfo = info;
});
}
Widget _infoTile(String title, String subtitle) {
return ListTile(
title: Text(title),
subtitle: Text(subtitle.isEmpty ? 'Not set' : subtitle),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('PackageInfoPlus example'),
elevation: 4,
),
body: ListView(
children: [
_infoTile('App name', _packageInfo.appName),
_infoTile('Package name', _packageInfo.packageName),
_infoTile('App version', _packageInfo.version),
_infoTile('Build number', _packageInfo.buildNumber),
_infoTile('Build signature', _packageInfo.buildSignature),
_infoTile(
'Installer store',
_packageInfo.installerStore ?? 'not available',
),
],
),
);
}
}
已知问题
iOS
- 插件返回错误的应用版本:Flutter构建工具允许在
version
中只使用数字和.
(点)符号,以符合Apple官方版本格式。 - 修改
pubspec.yaml
中的版本后插件返回错误信息:需要清理Xcode构建文件夹。
Android 和其他平台
- 在
runApp()
之前调用PackageInfo.fromPlatform()
会导致异常。
Windows
- Windows平台上显示错误版本:如果项目是在Flutter 3.3之前创建的,则需要根据指南迁移项目。
Web
- 插件通过
version.json
文件获取版本信息。可能会遇到CORS问题,确保服务器配置允许访问version.json
文件。
学习更多
以上是关于package_info_plus
插件的详细介绍和使用示例,希望对你有所帮助!
更多关于Flutter应用包信息获取插件package_info_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter应用包信息获取插件package_info_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用package_info_plus
插件来获取应用包信息的代码示例。
首先,确保你的Flutter环境已经配置好,并且在你的pubspec.yaml
文件中添加package_info_plus
依赖:
dependencies:
flutter:
sdk: flutter
package_info_plus: ^1.4.0 # 请检查最新版本号
然后,运行以下命令来安装依赖:
flutter pub get
接下来,在你的Flutter项目中,你可以使用以下代码来获取应用包信息。这里是一个简单的示例,展示如何在主页面获取并显示应用名称、包名和版本号:
import 'package:flutter/material.dart';
import 'package:package_info_plus/package_info_plus.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Package Info Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: PackageInfoScreen(),
);
}
}
class PackageInfoScreen extends StatefulWidget {
@override
_PackageInfoScreenState createState() => _PackageInfoScreenState();
}
class _PackageInfoScreenState extends State<PackageInfoScreen> {
late PackageInfo packageInfo;
@override
void initState() {
super.initState();
_getPackageInfo();
}
Future<void> _getPackageInfo() async {
final PackageInfo info = await PackageInfo.fromPlatform();
setState(() {
packageInfo = info;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Package Info'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('App Name: ${packageInfo.appName}'),
SizedBox(height: 16),
Text('Package Name: ${packageInfo.packageName}'),
SizedBox(height: 16),
Text('Version: ${packageInfo.version}'),
SizedBox(height: 16),
Text('Build Number: ${packageInfo.buildNumber}'),
],
),
),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,该应用在启动时从平台获取包信息,并在UI中显示应用的名称、包名、版本号和构建号。
PackageInfo.fromPlatform()
方法用于异步获取应用的包信息。- 使用
setState
方法来更新UI,当包信息被成功获取后。
确保你已经正确配置了Android和iOS的项目文件,以便插件能够正常工作。在大多数情况下,只需添加依赖并运行flutter pub get
就可以了,但某些情况下你可能需要配置一些额外的权限或设置。
希望这个示例对你有帮助!