如何获取 Flutter Web 应用程序的构建和版本号
How to get build and version number of Flutter Web app
这里的关键词是Web。我可以使用 package_info 插件获取 Flutter 应用程序的构建和版本号,但如果它在网络上是 运行 我就不能。如何获取 Flutter Web 应用程序的包信息?
我将在下面包含一个答案作为临时修复,但我正在寻找一个从 pubspec.yaml.
获取版本信息的解决方案
作为临时解决方法,您可以创建一个包含版本信息的单独文件:
web_version_info.dart
class WebVersionInfo {
static const String name = '1.0.0';
static const int build = 1;
}
您可以将其用于所有平台,或者在您的代码中使用 kIsWeb
仅将其用于网络:
Future<String> _getAppVersion() async {
if (kIsWeb) {
return WebVersionInfo.name;
} else {
PackageInfo packageInfo = await PackageInfo.fromPlatform();
return packageInfo.version;
}
}
当然,这不是一个很好的解决方案,因为现在您需要记住在每次更新应用程序时在 pubspec.yaml
和 WebVersionInfo
中更新版本和构建信息。
对于那些使用 Linux 的人,为了改进 Suragch 的回答,我建议使用 bash 脚本自动化构建过程。为此,我们需要两个脚本:一个用于增加版本构建号,另一个用于调用 flutter build 命令本身,转发参数。这样,如果您更喜欢手动增加版本构建号,您可以只调用更新脚本,然后 'flutter build' ,但如果您想一步完成所有操作,您可以调用构建器脚本。
您只需要在版本更改时编辑“.app_version”文件。
'.build_seq'、'.version_number'文件总是被重写,而'.app_version'文件只有在找不到时才创建。
脚本:
updversion.sh:
#!/bin/bash
if [ -f ".app_version" ]; then
VER=`cat .app_version`
else
VER="1.0.0"
echo $VER > .app_version
fi
if [ -f ".build_seq" ]; then
BLD=`cat .build_seq`
else
BLD='0'
fi
((BLD++))
echo $BLD > .build_seq
echo "Ver: $VER ($BLD)" > .current_version
echo "
// Auto-generated by updversion.sh. Do not edit.
class WebVersionInfo {
static const String name = '$VER';
static const int build = $BLD;
}
" > lib/version_info.dart
exit 0
buildweb.sh:
#!/bin/bash
./updversion.sh
flutter build web $*
exit $?
如果您使用 Beta 频道,您可以使用 package_info_plus 插件,它似乎是 package_info 的直接替代品。因此,您需要更改的只是 pubspec.yaml 和您的导入。 (我只使用版本,所以可能会有我没有注意到的差异)
更改 pubspec 和您的导入
pubspec.yaml: package_info_plus: '>=0.6.3 <2.0.0'
导入:import 'package:package_info_plus/package_info_plus.dart'
参考:
这里的关键词是Web。我可以使用 package_info 插件获取 Flutter 应用程序的构建和版本号,但如果它在网络上是 运行 我就不能。如何获取 Flutter Web 应用程序的包信息?
我将在下面包含一个答案作为临时修复,但我正在寻找一个从 pubspec.yaml.
获取版本信息的解决方案作为临时解决方法,您可以创建一个包含版本信息的单独文件:
web_version_info.dart
class WebVersionInfo {
static const String name = '1.0.0';
static const int build = 1;
}
您可以将其用于所有平台,或者在您的代码中使用 kIsWeb
仅将其用于网络:
Future<String> _getAppVersion() async {
if (kIsWeb) {
return WebVersionInfo.name;
} else {
PackageInfo packageInfo = await PackageInfo.fromPlatform();
return packageInfo.version;
}
}
当然,这不是一个很好的解决方案,因为现在您需要记住在每次更新应用程序时在 pubspec.yaml
和 WebVersionInfo
中更新版本和构建信息。
对于那些使用 Linux 的人,为了改进 Suragch 的回答,我建议使用 bash 脚本自动化构建过程。为此,我们需要两个脚本:一个用于增加版本构建号,另一个用于调用 flutter build 命令本身,转发参数。这样,如果您更喜欢手动增加版本构建号,您可以只调用更新脚本,然后 'flutter build' ,但如果您想一步完成所有操作,您可以调用构建器脚本。
您只需要在版本更改时编辑“.app_version”文件。
'.build_seq'、'.version_number'文件总是被重写,而'.app_version'文件只有在找不到时才创建。
脚本:
updversion.sh:
#!/bin/bash
if [ -f ".app_version" ]; then
VER=`cat .app_version`
else
VER="1.0.0"
echo $VER > .app_version
fi
if [ -f ".build_seq" ]; then
BLD=`cat .build_seq`
else
BLD='0'
fi
((BLD++))
echo $BLD > .build_seq
echo "Ver: $VER ($BLD)" > .current_version
echo "
// Auto-generated by updversion.sh. Do not edit.
class WebVersionInfo {
static const String name = '$VER';
static const int build = $BLD;
}
" > lib/version_info.dart
exit 0
buildweb.sh:
#!/bin/bash
./updversion.sh
flutter build web $*
exit $?
如果您使用 Beta 频道,您可以使用 package_info_plus 插件,它似乎是 package_info 的直接替代品。因此,您需要更改的只是 pubspec.yaml 和您的导入。 (我只使用版本,所以可能会有我没有注意到的差异)
更改 pubspec 和您的导入
pubspec.yaml: package_info_plus: '>=0.6.3 <2.0.0'
导入:import 'package:package_info_plus/package_info_plus.dart'