如何获取Flutter/Dart应用构建日期时间?Gradle配置后Flutter端如何取值
在Flutter应用中获取Android构建时间的方法
你的方案完全可行,以下是在Flutter端获取BUILD_TIME值的具体步骤:
1. 确认Android端配置
先确保你已经在android/app/build.gradle的defaultConfig块中添加了这段配置:
buildConfigField "long", "BUILD_TIME", System.currentTimeMillis() + "L"
同步项目后,Android会自动生成包含该字段的BuildConfig类。
2. 通过MethodChannel获取原生值
Flutter需要借助平台通道调用Android原生代码来读取这个字段:
步骤一:Dart端初始化通道
import 'package:flutter/services.dart'; class BuildInfo { static const MethodChannel _channel = MethodChannel('build_info_channel'); static Future<int?> get buildTime async { try { final int? time = await _channel.invokeMethod('getBuildTime'); return time; } on PlatformException catch (e) { print('获取构建时间失败: ${e.message}'); return null; } } }
步骤二:Android原生端实现方法
打开android/app/src/main/kotlin/[你的包名]/MainActivity.kt(或Java文件),添加通道处理逻辑:
Kotlin版本
import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine import io.flutter.plugin.common.MethodChannel class MainActivity : FlutterActivity() { private val CHANNEL = "build_info_channel" override fun configureFlutterEngine(flutterEngine: FlutterEngine) { super.configureFlutterEngine(flutterEngine) MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result -> if (call.method == "getBuildTime") { val buildTime = BuildConfig.BUILD_TIME result.success(buildTime) } else { result.notImplemented() } } } }
Java版本
import io.flutter.embedding.android.FlutterActivity; import io.flutter.embedding.engine.FlutterEngine; import io.flutter.plugin.common.MethodChannel; public class MainActivity extends FlutterActivity { private static final String CHANNEL = "build_info_channel"; @Override public void configureFlutterEngine(FlutterEngine flutterEngine) { super.configureFlutterEngine(flutterEngine); new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL).setMethodCallHandler( (call, result) -> { if (call.method.equals("getBuildTime")) { long buildTime = BuildConfig.BUILD_TIME; result.success(buildTime); } else { result.notImplemented(); } } ); } }
3. 在Flutter界面中显示构建日期
获取到时间戳后,将其转换为可读的日期格式展示:
import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; class BuildDateScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('构建信息')), body: Center( child: FutureBuilder<int?>( future: BuildInfo.buildTime, builder: (context, snapshot) { if (snapshot.hasData) { DateTime buildDate = DateTime.fromMillisecondsSinceEpoch(snapshot.data!); String formattedDate = DateFormat('yyyy-MM-dd HH:mm:ss').format(buildDate); return Text('应用构建时间:$formattedDate'); } else if (snapshot.hasError) { return Text('获取构建时间失败'); } return CircularProgressIndicator(); }, ), ), ); } }
额外说明
- 若需支持iOS平台,可在Xcode的Build Phases中添加脚本将构建时间写入
Info.plist,再通过package_info_plus插件读取,或同样用MethodChannel获取。 BUILD_TIME是long类型时间戳,在Dart中对应int类型,转换日期时需使用DateTime.fromMillisecondsSinceEpoch方法。
内容的提问来源于stack exchange,提问作者Dev Loots
相关产品推荐
相关产品推荐

