Flutter应用运行时能否获取构建所用的Flutter SDK版本?
实现方案
这里提供两种可靠的实现方式,都适配Xcode手动编译、fvm命令行构建等所有场景:
方式1:直接调用Flutter内置API(推荐,无需额外配置)
Flutter 3.10及以上版本已内置构建时SDK版本的暴露能力,直接调用原生API即可获取:
import 'dart:ui'; void getBuildFlutterVersion() { // 获取完整的版本信息,包含版本号、构建渠道、提交哈希等 String fullVersionInfo = PlatformDispatcher.instance.flutterVersion.string; // 仅获取语义化版本号,例如 3.22.2 String sdkVersion = PlatformDispatcher.instance.flutterVersion.version; // 获取引擎提交哈希 String engineRevision = PlatformDispatcher.instance.flutterVersion.engineRevision; }
该方法返回的是编译时所用的Flutter SDK的固定版本信息,和运行环境无关,完全可以用来验证构建版本的正确性。
方式2:通过编译参数注入(适配3.10以下的低版本Flutter)
如果你的项目使用的Flutter版本低于3.10,可以通过编译时注入常量的方式实现:
- 首先在Dart代码中定义接收常量:
const flutterSdkVersion = String.fromEnvironment('FLUTTER_BUILD_VERSION', defaultValue: '未知版本');
- 命令行构建时直接通过fvm命令注入版本:
fvm flutter build ios --dart-define=FLUTTER_BUILD_VERSION=$(fvm flutter --version | head -n1 | awk '{print $2}')
- Xcode手动编译场景配置:
打开iOS项目的Runner.xcconfig文件,添加如下配置,即可在Xcode编译时自动获取当前目录绑定的fvm版本注入:
FLUTTER_BUILD_VERSION = $(cd ${SRCROOT}/.. && fvm flutter --version | head -n1 | awk '{print $2}') // 在已有的DART_DEFINES配置后追加 DART_DEFINES = $(DART_DEFINES) FLUTTER_BUILD_VERSION=$(FLUTTER_BUILD_VERSION)
验证方法:构建前执行
fvm flutter --version查看当前目录绑定的SDK版本,和运行时获取到的版本对比一致即代表构建版本正确。
内容的提问来源于stack exchange,提问作者Mr D。
相关产品推荐
相关产品推荐

