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

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

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

平台支持

平台 支持
Android ✔️
iOS ✔️
macOS ✔️
Web ✔️
Linux ✔️
Windows ✔️

使用方法

你可以使用 fepe_package_info_plus 来查询应用包的信息。这在 iOS 和 Android 上都是可用的。

import 'package:fepe_package_info_plus/package_info_plus.dart';

...

// 确保在调用 PackageInfo.fromPlatform() 之前初始化 WidgetsFlutterBinding
WidgetsFlutterBinding.ensureInitialized();

...

PackageInfo packageInfo = await PackageInfo.fromPlatform();

String appName = packageInfo.appName;
String packageName = packageInfo.packageName;
String version = packageInfo.version;
String buildNumber = packageInfo.buildNumber;

已知问题

iOS

如在 issue 20761 中所述,package_info 在 iOS 上需要重建 Xcode 构建文件夹后才能更新版本字符串。可以通过以下步骤清理 Xcode 构建文件夹:

  • 打开 Xcode 菜单 -> 产品 -> 清理构建文件夹(按住 Option 键)
Android 和其他平台

如果在调用 PackageInfo.fromPlatform() 之前调用了 runApp(),则会抛出异常。可以参考 issue 309 获取更多信息。

完整示例代码

import 'package:fepe_package_info_plus/package_info_plus.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  [@override](/user/override)
  void initState() {
    super.initState();
  }

  void _incrementCounter() async {
    PackageInfo packageInfo = await PackageInfo.fromPlatform();

    setState(() {
      _counter++;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              '你已经点击了按钮次数:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: '增加',
        child: const Icon(Icons.add),
      ),
    );
  }
}

更多关于Flutter应用包信息获取插件fepe_package_info_plus的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter应用包信息获取插件fepe_package_info_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


fepe_package_info_plus 是一个用于获取 Flutter 应用程序包信息的插件。它提供了应用程序的名称、版本号、构建号、包名等信息。这个插件是基于 package_info_plus 的一个封装,提供了一些额外的功能或简化了某些操作。

安装插件

首先,你需要在 pubspec.yaml 文件中添加 fepe_package_info_plus 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  fepe_package_info_plus: ^1.0.0  # 请确保使用最新版本

然后,运行 flutter pub get 来安装插件。

使用插件

在你的 Dart 代码中,你可以通过以下步骤来获取应用程序的包信息:

  1. 导入插件

    import 'package:fepe_package_info_plus/fepe_package_info_plus.dart';
    
  2. 获取包信息

    使用 FepePackageInfoPlus 类的 fromPlatform 方法来获取包信息。

    void getPackageInfo() async {
      FepePackageInfo packageInfo = await FepePackageInfoPlus.fromPlatform();
    
      String appName = packageInfo.appName;
      String packageName = packageInfo.packageName;
      String version = packageInfo.version;
      String buildNumber = packageInfo.buildNumber;
    
      print('App Name: $appName');
      print('Package Name: $packageName');
      print('Version: $version');
      print('Build Number: $buildNumber');
    }
    
  3. 调用方法

    你可以在 initState 或其他适当的地方调用 getPackageInfo 方法来获取并打印包信息。

    [@override](/user/override)
    void initState() {
      super.initState();
      getPackageInfo();
    }
    

示例代码

以下是一个完整的示例代码:

import 'package:flutter/material.dart';
import 'package:fepe_package_info_plus/fepe_package_info_plus.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: PackageInfoScreen(),
    );
  }
}

class PackageInfoScreen extends StatefulWidget {
  [@override](/user/override)
  _PackageInfoScreenState createState() => _PackageInfoScreenState();
}

class _PackageInfoScreenState extends State<PackageInfoScreen> {
  String appName = '';
  String packageName = '';
  String version = '';
  String buildNumber = '';

  [@override](/user/override)
  void initState() {
    super.initState();
    getPackageInfo();
  }

  void getPackageInfo() async {
    FepePackageInfo packageInfo = await FepePackageInfoPlus.fromPlatform();

    setState(() {
      appName = packageInfo.appName;
      packageName = packageInfo.packageName;
      version = packageInfo.version;
      buildNumber = packageInfo.buildNumber;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Package Info Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('App Name: $appName'),
            Text('Package Name: $packageName'),
            Text('Version: $version'),
            Text('Build Number: $buildNumber'),
          ],
        ),
      ),
    );
  }
}

输出示例

运行上述代码后,你可能会看到类似以下的输出:

App Name: MyApp
Package Name: com.example.myapp
Version: 1.0.0
Build Number: 1
回到顶部