You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从pubspec.yaml获取应用当前版本并在Text Widget中展示

问题1:从pubspec.yaml文件检索应用当前版本

推荐使用官方适配全平台的package_info_plus插件实现,无需手动解析配置文件,操作步骤如下:

  1. 在项目pubspec.yaml的dependencies节点下添加依赖
dependencies:
  flutter:
    sdk: flutter
  package_info_plus: ^4.2.0 # 可替换为当前最新稳定版
  1. 执行flutter pub get安装依赖后,调用插件API获取版本信息:
import 'package:package_info_plus/package_info_plus.dart';

Future<String> getAppVersion() async {
  final PackageInfo info = await PackageInfo.fromPackageInfo();
  // info.version对应pubspec中version字段+号前的版本号,info.buildNumber对应+号后的构建号
  return "${info.version}+${info.buildNumber}";
}
  • 补充非推荐方案:如果要手动解析pubspec.yaml文件,需要先将该文件配置为assets资源,再通过yaml解析库读取对应字段,该方案兼容性差,生产环境不建议使用。
问题2:将版本信息展示在Text组件中

由于版本获取是异步操作,可通过FutureBuilder组件实现异步渲染,示例代码如下:

class VersionDisplayPage extends StatefulWidget {
  const VersionDisplayPage({super.key});

  @override
  State<VersionDisplayPage> createState() => _VersionDisplayPageState();
}

class _VersionDisplayPageState extends State<VersionDisplayPage> {
  late Future<String> _appVersionFuture;

  @override
  void initState() {
    super.initState();
    // 初始化时触发版本获取
    _appVersionFuture = getAppVersion();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: FutureBuilder<String>(
          future: _appVersionFuture,
          builder: (context, snapshot) {
            if (snapshot.connectionState == ConnectionState.done) {
              if (snapshot.hasData) {
                // 拿到版本后直接渲染到Text组件
                return Text("应用版本:${snapshot.data!}");
              }
              return const Text("版本获取失败");
            }
            // 加载过程中显示占位
            return const CircularProgressIndicator();
          },
        ),
      ),
    );
  }
}
  • 优化方案:可在应用启动时提前获取版本信息存入全局变量,后续使用时无需重复异步请求,直接在Text组件中引用即可:
// 全局存储类
class AppConfig {
  static late String appVersion;
}

// main函数中预加载
void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final PackageInfo info = await PackageInfo.fromPackageInfo();
  AppConfig.appVersion = "${info.version}+${info.buildNumber}";
  runApp(const MyApp());
}

// 任意页面使用时直接调用
Text("应用版本:${AppConfig.appVersion}")

内容的提问来源于stack exchange,提问作者inter cretasyo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:39:02