Flutter应用包信息获取插件package_info_plus的使用

发布于 1周前 作者 zlyuanteng 来自 Flutter

Flutter应用包信息获取插件package_info_plus的使用

package_info_plus 插件简介

package_info_plus 是一个用于查询应用程序包信息的Flutter插件。它支持多种平台,包括Android、iOS、MacOS、Web、Linux和Windows。

pub points pub package

Flutter Favorite Badge

平台支持

平台 支持情况
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

1 回复

更多关于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就可以了,但某些情况下你可能需要配置一些额外的权限或设置。

希望这个示例对你有帮助!

回到顶部