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

如何获取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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:01:34