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

iPr*_*ram 20 version flutter

我当前正在开发一个处于beta模式的应用程序。因此,我想向他们展示它们的版本。例如,“ v1.0b10-iOS”。到目前为止,我已经收到以下代码:Text("Build: V1.0b10 - " + (Platform.isIOS ? "iOS" : "Android"))。我如何才能在Flutter中获得内部版本和编号?

die*_*per 24

您可以使用package_info

这些版本摘自:

Android:

build.gradle  , versionCode and versionName
Run Code Online (Sandbox Code Playgroud)

iOS:

Info.plist  , CFBundleVersion
Run Code Online (Sandbox Code Playgroud)

用法

添加依赖项

  1. 将此添加到包的pubspec.yaml文件中:
dependencies:
  package_info: ^0.4.0+3
Run Code Online (Sandbox Code Playgroud)
  1. 将文件导入到dart文件中:
import 'package:package_info/package_info.dart';
Run Code Online (Sandbox Code Playgroud)
  1. 如果您的方法被标记为 async
PackageInfo packageInfo = await PackageInfo.fromPlatform();

String appName = packageInfo.appName;
String packageName = packageInfo.packageName;
String version = packageInfo.version;
String buildNumber = packageInfo.buildNumber;
Run Code Online (Sandbox Code Playgroud)

如果你不想使用 away/async

PackageInfo.fromPlatform().then((PackageInfo packageInfo) {
  String appName = packageInfo.appName;
  String packageName = packageInfo.packageName;
  String version = packageInfo.version;
  String buildNumber = packageInfo.buildNumber;
});
Run Code Online (Sandbox Code Playgroud)

  • 未处理的异常:MissingPluginException(在通道plugins.flutter.io/package_info上找不到方法getAll的实现)仅在发布apk上 (3认同)
  • 如果您收到“未处理的异常:MissingPluginException(在通道plugins.flutter.io/package_info上找不到方法 getAll 的实现)”错误,请尝试完全重新安装应用程序 (3认同)
  • 如果您希望您的应用程序在 Web、Android 和 IOS 上运行,请改用“package_info_plus”。https://pub.dev/packages/package_info_plus。 (2认同)

Sur*_*gch 23

对于将来的访问者,这是更详细的答案。

有一个插件可以帮助您获取版本名称和版本号。

添加依赖项

在pubspec.yaml中添加package_info包。

dependencies:
  package_info: ^0.4.0+3
Run Code Online (Sandbox Code Playgroud)

将版本号更新为当前版本号。

导入包裹

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

import 'package:package_info/package_info.dart';
Run Code Online (Sandbox Code Playgroud)

获取版本名称和代码

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

PackageInfo packageInfo = await PackageInfo.fromPlatform();
String versionName = packageInfo.version;
String versionCode = packageInfo.buildNumber;
Run Code Online (Sandbox Code Playgroud)

也可以看看

  • @Volleyball,在我回答问题时,接受的答案要短得多(检查编辑历史记录)。后来那个用户又加了很多内容,所以现在基本是一样的了。 (6认同)

小智 7

RE 多次引用package_info,请注意,此软件包已被弃用,建议的替代品是Flutter Community Plus 插件版本package_info_plus


Has*_*jmi 5

package_info安装,您可以直接与未来的建设者在你的widget树使用它:

 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();
                }
              },
            ),
Run Code Online (Sandbox Code Playgroud)


Asa*_*ssi 5

要从命令行或 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]);
}
Run Code Online (Sandbox Code Playgroud)

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

dart run scripts/get_version_name.dart
Run Code Online (Sandbox Code Playgroud)