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

Flutter执行timezone时区数据库下载命令报错找不到指定路径

问题修复方案

报错原因

你直接在Flutter的全局pub缓存目录C:\flutter\.pub-cache\hosted\pub.dartlang.org\timezone-0.8.0下执行工具脚本是错误操作。缓存目录下的依赖包仅保留运行时必要的代码,不会安装工具脚本所需的dev依赖(如args、glob、logging等),也不存在运行脚本需要的package_config.json依赖配置文件,因此触发大量依赖找不到的报错。
注意不要直接修改pub缓存目录下的任何文件,修改会全局影响所有依赖该版本包的项目,且清理缓存后改动会丢失。

修复方案

推荐两个方案,优先选方案一:

方案一:直接使用官方预构建的时区数据库

无需手动编译数据库,99%的场景都适用:

  • 在你的项目pubspec.yaml中同时引入两个依赖:
dependencies:
  timezone: ^0.8.0
  tzdata: ^0.1.0
  • 执行flutter pub get安装依赖
  • 项目中初始化时区直接调用官方封装好的方法即可:
import 'package:timezone/timezone.dart' as tz;
import 'package:tzdata/tzdata.dart';

void main() async {
  await tz.initializeTimeZones();
  // 后续正常使用时区功能即可
}

方案二:手动编译指定2021d版本的时区数据库

如果你确实需要使用特定版本的时区数据,按以下步骤操作:

  • 不要在pub缓存目录操作,将timezone 0.8.0版本的源码单独克隆/下载到本地任意非缓存目录,比如D:\temp\timezone
  • 进入该目录,执行dart pub get安装所有依赖(包括脚本需要的dev依赖)
  • 执行dart run tool/get -s 2021d,即可正常编译得到对应版本的时区数据库文件
  • 编译生成的数据库文件存放在源码的lib/data目录下,将这些.tzf文件复制到你自己项目的资源目录(如assets/tzdata/),并在pubspec.yaml中声明资源路径
  • 项目中初始化时区时,加载你自己的数据库文件即可:
import 'package:flutter/services.dart';
import 'package:timezone/timezone.dart' as tz;

void main() async {
  final byteData = await rootBundle.load('assets/tzdata/2021d.tzf');
  tz.initializeDatabase(byteData.buffer.asUint8List());
}

内容的提问来源于stack exchange,提问作者Mohammed Bekele

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:54:03