如何获取Flutter应用程序的内部版本号和版本号

k2arahey  于 2022-11-26  发布在  Flutter
关注(0)|答案(7)|浏览(480)

我目前正在开发一个应用程序,目前处于测试模式。因此,我想向他们展示他们的版本。例如,“v1.0b10 - iOS”。到目前为止,我得到了以下代码:Text("Build: V1.0b10 - " + (Platform.isIOS ? "iOS" : "Android"))。我如何能够在flutter中获得构建版本和编号?

wljmcqd8

wljmcqd81#

您可以使用package_info_plus
版本提取自:
安卓系统:

build.gradle, versionCode and versionName

iOS系统:

Info.plist, CFBundleVersion

用法

新增相依性

1.将以下代码添加到包的pubspec.yaml文件中:

dependencies:
  package_info_plus: ^1.0.6

1.将文件导入dart文件:

import 'package:package_info_plus/package_info_plus.dart';

1.如果您的方法标记为async

PackageInfo packageInfo = await PackageInfo.fromPlatform();

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

如果不想使用await/async

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

htzpubme2#

:此答案已更新,以反映package_info插件已弃用并重定向到package_info_plus

版本名称和内部版本号

在开发时,通过检查pubspec.yaml,可以很容易地找到Flutter或Dart项目的版本名和内部版本号。

version: 1.1.0+2

这是版本名称为1.1.0且内部版本号为2的情况。
但是,如果您希望在运行时获得这些值,则应该使用插件。

新增相依性

pubspec.yaml中添加package_info_plus包。

dependencies:
  package_info_plus: ^1.0.2

将版本号更新为current

汇入套件

在您需要的文件中,添加以下导入。

import 'package:package_info_plus/package_info_plus.dart';

获取版本名称和代码

在您的代码中,您可以获取应用版本名称和代码,如下所示:

PackageInfo packageInfo = await PackageInfo.fromPlatform();
String version = packageInfo.version;
String code = packageInfo.buildNumber;

另请参阅

nfeuvbwi

nfeuvbwi3#

安装package_info_plus,然后您可以直接将它与小部件树中未来构建器一起使用:

FutureBuilder<PackageInfo>(
              future: PackageInfo.fromPlatform(),
              builder: (context, snapshot) {
                switch (snapshot.connectionState) {
                  case ConnectionState.done:
                    return Align(
                      alignment: Alignment.bottomCenter,
                      child: Text(
                        'Version: ${snapshot.data!.version}',),
                      );
                  default:
                    return const SizedBox();
                }
              },
            ),
pdkcd3nj

pdkcd3nj4#

关于对package_info的多个引用,请注意,此软件包已被弃用,建议使用Flutter Community Plus Plugins版本package_info_plus

jaxagkaj

jaxagkaj5#

您可以尝试new_version插件。使用此插件,您可以获得安装的应用程序版本,Playstore应用程序版本和应用程序URL,可以重定向到Playstore。
New Version Plugin

void versionCheck() async {
    final NewVersion newVersion = NewVersion(context: context);
    VersionStatus versionStatus = await newVersion.getVersionStatus();
    if (versionStatus != null && versionStatus.canUpdate) {
      await ConfirmDialog(
          context: context,
          title: 'Update Available',
          body: Text('A new version, ${versionStatus.storeVersion}, is available.'),
          acceptButton: 'Update Now',
          cancelButton: 'Update Later'
      ).then((ConfirmAction res) async {
        if (res == ConfirmAction.CONFIRM && await canLaunch(versionStatus.appStoreLink)) {
          await launch(versionStatus.appStoreLink, forceWebView: false);
        }
      });
    }
  }

“自定义警报”对话框

enum ConfirmAction{ CONFIRM, CANCEL }
Future<ConfirmAction> ConfirmDialog({
  BuildContext context,
  String title,
  Widget body,
  String acceptButton,
  String cancelButton
})
=> showDialog(
    context: context,
    barrierDismissible: false,
    builder: (BuildContext context) => AlertDialog(
      title: Wrap(
        crossAxisAlignment: WrapCrossAlignment.center,
        spacing: 4,
        children: <Widget>[
          Text(title)
        ],
      ),
      content: Wrap(
        runSpacing: 10,
        children: <Widget>[
          body,
        ],
      ),
      actions: <Widget>[
        FlatButton(
            padding: EdgeInsets.all(6),
            child: Text(acceptButton ?? 'Confirm'),
            onPressed: (){
              Navigator.of(context, rootNavigator: true).pop(ConfirmAction.CONFIRM);
            }
        ),
        FlatButton(
            padding: EdgeInsets.all(6),
            child: Text(cancelButton ?? 'Cancel'),
            onPressed: (){
              Navigator.of(context, rootNavigator: true).pop(ConfirmAction.CANCEL);
            }
        ),
      ],
    )
);
s71maibg

s71maibg6#

要从命令行或CLI使用它,您需要一个纯Dart代码。
我使用了以下脚本:

// ignore_for_file: avoid_print
import 'dart:io';

import 'package:path/path.dart';
import 'package:yaml/yaml.dart';

String pathToYaml = join(dirname(Platform.script.toFilePath()), '../pubspec.yaml');

Future<YamlMap> loadPubspec() async => loadYaml(await File(pathToYaml).readAsString());

void main() async {
  var pubspec = await loadPubspec();
  print(pubspec['version'].toString().split('+')[0]);
}

您可以从项目根文件夹执行它:

dart run scripts/get_version_name.dart
ygya80vv

ygya80vv7#

在Flutter移动的应用程序中,版本号位于pubspec.yaml文件中,如下所示:

version: 1.0.0+1

要获取版本名称和代码,请将package_info依赖项添加到pubspec.yaml文件中,如下所示:

dependencies:
  package_info: ^0.4.0+16

还有

import 'package:package_info/package_info.dart'; // import the package_info

Future<void> _initPackageInfo() async {
    final _packageInfo = await PackageInfo.fromPlatform();
    setState(() {
          String AppName = _packageInfo.appName;
          String PackageName = _packageInfo.packageName;
          String AppVersion = _packageInfo.version;
          String BuildNumber = _packageInfo.buildNumber;
          String BuildSignature = _packageInfo.buildSignature;
    });
  }

相关问题