zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

Flutter获取包名、APP名称、版本号、build构建版本号

Appflutter 获取 构建 名称 build 版本号 包名
2023-09-27 14:28:53 时间

在进行APP版本迭代的过程中, 有时我们需要通过获取当前APP的版本号, 与后端服务器获取的当前最新版本进行比对, 如果出现了最新版本, 我们提醒用户进行应用更新. 本篇文章就来记录一下Flutter获取包名、应用APP名称、版本号、build构建版本号.

最终效果

有图有真相, 先来看下最终效果吧!

应用场景

  1. 通过检查当前APP版本号来判断是否需要更新.
  2. APP出现错误日志需要传回服务器时, 获取APP基本信息(也就是看看bug出现在哪个版本!).

实战开始

引入PackageInfo

老样子, 上官方的存储库中寻找我们今天需要的PackageInfo:

Flutter获取包名、应用APP名称、版本号、build构建版本号-01

一般我们选用第三方库会看三个指标: 评分、兼容性以及活跃度.

这个库将会成为我们获取APP信息的主力.

进入./pubspec.yaml, 导入:

dependencies:
  package_info: ^0.4.0+18

YAML

Copy

Flutter获取包名、应用APP名称、版本号、build构建版本号-02

一定要注意缩进哦!

初始化项目

为了让大家更直观的看到, 这里提供./lib/main.dart的代码, 你可以直接进行复制并运行:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '获取设备信息Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: '获取设备信息'),
    );
  }
}

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

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(
              'App信息',
              style: TextStyle(fontSize: 30),
            ),
          ],
        ),
      ),
    );
  }
}

Dart

Copy

💡 代码解析: 只是一个空的项目. 我们将基于这个空项目继续我们的实例.

运行, 如图:

Flutter获取包名、应用APP名称、版本号、build构建版本号-03

使用PackageInfo

./lib/main.dart中进行导入:

import 'package:package_info/package_info.dart';

Dart

Copy

_MyHomePageState中创建四个实例变量, 用来保存信息:

// APP名称
String _appName;
// 包名
String _packageName;
// 版本号
String _version;
// 构建号
String _buildNumber;

Dart

Copy

💡 代码解析: 注释已标注各个属性所代表的含义!

_MyHomePageState内的build()下方创建函数getAppInfo():

/// 获取APP信息
void getAppInfo(){
    PackageInfo.fromPlatform().then((PackageInfo packageInfo) {
        _appName = packageInfo.appName;
        _packageName = packageInfo.packageName;
        _version = packageInfo.version;
        _buildNumber = packageInfo.buildNumber;
    });
    setState(() {});
}

Dart

Copy

💡 代码解析: 这里调用了PackageInfofromPlatform函数. 返回的对象包含了我们需要的四个信息. 最后, 进行setState刷新数据状态.

我们要做的就是在这里获取数据, 并将其展示出来. 替换:

Text(
    'App信息',
    style: TextStyle(fontSize: 30),
),

Dart

Copy

为:

Text(
    'App信息',
    style: TextStyle(fontSize: 30),
),
Text(
    'APP名称: $_appName',
    style: TextStyle(fontSize: 20),
),
Text(
    '包名: $_packageName',
    style: TextStyle(fontSize: 20),
),
Text(
    '版本号: $_version',
    style: TextStyle(fontSize: 20),
),
Text(
    '构建号: $_buildNumber',
    style: TextStyle(fontSize: 20),
),
RaisedButton(
    child: Text(
        '一键获取',
        style: TextStyle(fontSize: 30),
    ),
    onPressed: ()=>getAppInfo(),
)

Dart

Copy

💡 代码解析: 前几个Text并没有什么难点, 只是简单的数据展示. 最后一个RaisedButton通过onPressed来调用上方定义的getAppInfo().

运行项目, 查看效果:

Flutter获取包名、应用APP名称、版本号、build构建版本号-04

搞定!

重点回顾

这里的核心代码:

先导入:

import 'package:package_info/package_info.dart';

Dart

Copy

再使用:

PackageInfo.fromPlatform().then((PackageInfo packageInfo) {
  String appName = packageInfo.appName;
  String packageName = packageInfo.packageName;
  String version = packageInfo.version;
  String buildNumber = packageInfo.buildNumber;
});

Dart

Copy

另一种写法(所在的函数必须由async修饰):

PackageInfo packageInfo = await PackageInfo.fromPlatform();

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

Dart

Copy

感谢

结语

至此, 我们成功获取了 Flutter 的包名、应用APP名称、版本号、build构建版本号. 如果你有任何疑问, 欢迎评论.