Android 上的 Flutter 版本号总是毫无明显原因地增加 2000

问题描述 投票:0回答:1

我在 Flutter 中遇到了最奇怪的行为,我一生都无法弄清楚为什么会发生这种情况。无论如何,这都不是一个严重的错误,我只是很恼火,找不到原因!

我有一个 Flutter 应用程序,是为 iOS 和 Android 构建的。依赖项Package Info Plus用于使用这个简单的小部件检索应用程序版本和内部版本号:

class AppVersionWidget extends StatelessWidget {
  const AppVersionWidget({super.key});

  @override
  Widget build(BuildContext context) => FutureBuilder<String>(
        future: _getAppVersion(),
        builder: (context, snapshot) => snapshot.hasData
            ? Text(
                'v${snapshot.data}',
                style: context.textTheme.bodySmall!.apply(
                  color: context.customColorScheme?.whiteFixed,
                ),
                textAlign: TextAlign.center,
              )
            : const SizedBox.shrink(),
      );

  Future<String> _getAppVersion() async {
    final packageInfo = await PackageInfo.fromPlatform();

    final appVersion = packageInfo.version;
    final buildVersion = packageInfo.buildNumber;

    return '$appVersion ($buildVersion)';
  }
}

在 iOS 上,这是完美的,如果应用程序版本是

1.0.0
并且内部版本号是
123
,它将输出
1.0.0 (123)
。然而在 Android 上,它输出
1.0.0 (2123)
。我尝试过不同的内部版本号,并意识到在 Android 上,数字 2000 始终添加到内部版本号中。如果我将内部版本号更改为
12345
,它将输出
14345
。为什么???

我做了一些调试,在

build.gradle
我添加了以下内容:

println "Debug Output: Version Code = ${flutterVersionCode}"
println "Debug Output: Version Name = ${flutterVersionName}"

在 Android 构建过程中,它正确输出:

Debug Output: Version Code = 123
Debug Output: Version Name = 1.0.0

当我搜索它时,似乎没有其他人遇到这个问题,所以我真的不知道还能尝试什么或者原因可能是什么?!

android flutter flutter-dependencies
1个回答
0
投票

看起来像是软件包的一个错误。尝试在Android部分实现它。 创建方法通道:

val channel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger,CHANNEL)

并设置呼叫处理程序

 channel.setMethodCallHandler { call, result ->

            if (call.method == "appversion") {
                val versionString = "${BuildConfig.VERSION_NAME} - ${BuildConfig.VERSION_CODE}"
                result.success(versionString)
            }
        }

现在在你的 dart 部分创建一个类似的类

class AppInfo {

  final MethodChannel methodChannel = const MethodChannel("channel");

  Future<String> getAppVersion() async {
    final ver = await methodChannel.invokeMethod("appversion");
    return ver;
  }
}

现在您可以通过

获取版本
await AppInfo().getAppVersion();
© www.soinside.com 2019 - 2024. All rights reserved.