刚开始学 Flutter 的时候,大家肯定都遇到过:flutter pub get
转半天没反应,或者下载 Flutter SDK 慢得像蜗牛,有时候干脆直接超时报错。这感觉,谁用谁知道。
关键是有以下错误
Could not resolve all files for configuration ':app:debugRuntimeClasspath'.
Could not resolve androidx.lifecycle:lifecycle-livedata:2.8.7.
Required by:
project :app > project :file_picker > androidx.lifecycle:lifecycle-runtime:2.8.7 > androidx.lifecycle:lifecycle-runtime-android:2.8.7
project :app > project :file_picker > io.flutter:flutter_embedding_debug:1.0.0-dd93de6fb1776398bf586cbd477deade1391c7e4 > androidx.lifecycle:lifecycle-common-java8:2.8.7
project :app > project :file_picker > io.flutter:flutter_embedding_debug:1.0.0-dd93de6fb1776398bf586cbd477deade1391c7e4 > androidx.fragment:fragment:1.7.1 > androidx.lifecycle:lifecycle-livedata-core:2.8.7
project :app > project :file_picker > io.flutter:flutter_embedding_debug:1.0.0-dd93de6fb1776398bf586cbd477deade1391c7e4 > androidx.fragment:fragment:1.7.1 > androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.7
project :app > project :file_picker > io.flutter:flutter_embedding_debug:1.0.0-dd93de6fb1776398bf586cbd477deade1391c7e4 > androidx.lifecycle:lifecycle-process:2.8.7
> Could not resolve androidx.lifecycle:lifecycle-livedata:2.8.7.
> Could not get resource 'https://storage.googleapis.com/download.flutter.io/androidx/lifecycle/lifecycle-livedata/2.8.7/lifecycle-livedata-2.8.7.pom'.
> Could not GET 'https://storage.googleapis.com/download.flutter.io/androidx/lifecycle/lifecycle-livedata/2.8.7/lifecycle-livedata-2.8.7.pom'. Received status code 403 from server: Forbidden
Could not resolve androidx.lifecycle:lifecycle-common-jvm:2.8.7.
Required by:
project :app > project :file_picker > io.flutter:flutter_embedding_debug:1.0.0-dd93de6fb1776398bf586cbd477deade1391c7e4 > androidx.lifecycle:lifecycle-common:2.8.7
> Could not resolve androidx.lifecycle:lifecycle-common-jvm:2.8.7.
> Could not get resource 'https://storage.googleapis.com/download.flutter.io/androidx/lifecycle/lifecycle-common-jvm/2.8.7/lifecycle-common-jvm-2.8.7.pom'.
> Could not GET 'https://storage.googleapis.com/download.flutter.io/androidx/lifecycle/lifecycle-common-jvm/2.8.7/lifecycle-common-jvm-2.8.7.pom'. Received status code 403 from server: Forbidden
Could not resolve androidx.lifecycle:lifecycle-viewmodel-android:2.8.7.
Required by:
project :app > project :file_picker > io.flutter:flutter_embedding_debug:1.0.0-dd93de6fb1776398bf586cbd477deade1391c7e4 > androidx.fragment:fragment:1.7.1 > androidx.lifecycle:lifecycle-viewmodel:2.8.7
> Could not resolve androidx.lifecycle:lifecycle-viewmodel-android:2.8.7.
> Could not get resource 'https://storage.googleapis.com/download.flutter.io/androidx/lifecycle/lifecycle-viewmodel-android/2.8.7/lifecycle-viewmodel-android-2.8.7.pom'.
> Could not GET 'https://storage.googleapis.com/download.flutter.io/androidx/lifecycle/lifecycle-viewmodel-android/2.8.7/lifecycle-viewmodel-android-2.8.7.pom'. Received status code 403 from server: Forbidden
There is 1 more failure with an identical cause.
今天,咱们就来把这个问题彻底搞明白,让你一次性解决 Flutter 在国内的网络“老大难”。
两个“罪魁祸首”的环境变量
其实,所有问题的根源都指向两个环境变量:
PUB_HOSTED_URL
: 这个变量决定了你从哪里下载 Dart 和 Flutter 的第三方依赖包(就是你在pubspec.yaml
文件里加的那些,比如dio
,provider
等)。它的默认地址是https://pub.dev
。FLUTTER_STORAGE_BASE_URL
: 这个变量决定了你从哪里下载 Flutter SDK 本体、Dart SDK,以及一些平台相关的编译工具。它的默认地址是https://storage.googleapis.com
。
你看,这俩地址都是国外的,在国内的网络环境下,访问起来自然是“步履维艰”。
搞清楚了问题根源,解决方案也就清晰了:要么“科学上网”,要么换成国内的镜像源。
方案一:硬核派——坚持用官方源 + 代理
如果你就是想用原汁原味的官方源,不想用任何镜像,那也完全没问题,前提是你得有个好用的“梯子”。
首先,确保你的环境变量指向的是官方地址(这也是默认值,不设置就是它):
# 在 PowerShell 中设置环境变量
$env:PUB_HOSTED_URL="https://pub.dev"
$env:FLUTTER_STORAGE_BASE_URL="https://storage.googleapis.com"
接下来是关键中的关键:
不要用普通的系统全局代理! 最好的方式是开启代理工具的 TUN 模式(比如 Clash、V2RayN 等都支持)。TUN 模式可以接管整个系统的网络流量,让命令行工具也能“科学上网”。
【敲黑板,划重点!】
开了 TUN 模式后,一定要记得清除系统代理!
很多代理工具在开启 TUN 模式的同时,可能还开着一个 HTTP 系统代理(比如 127.0.0.1:7890
)。这两者一起开,你的命令行工具可能会“精神错乱”,不知道该走哪条路,最后还是一样报错。
所以,正确姿势是:开 TUN,清除系统代理。
方案二:省心派——使用官方国内镜像
如果你不想折腾代理,就想安安稳稳、快速地开发,那 Flutter 官方早就为我们准备好了国内镜像源。
同样是设置那两个环境变量,只是把地址换成国内的镜像地址:
# 在 PowerShell 中设置环境变量
$env:PUB_HOSTED_URL="https://pub.flutter-io.cn"
$env:FLUTTER_STORAGE_BASE_URL="https://storage.flutter-io.cn"
这是 Flutter 官方社区专门为中国开发者维护的镜像,服务器就在国内,速度飞快,稳定可靠。用了它,基本上就可以和 pub get
卡顿说拜拜了。
到底该怎么选?
懒人/高效之选: 啥也别想,直接用国内镜像 (
flutter-io.cn
)。这能解决 99% 的网络问题,也是官方最推荐的方案。硬核/原教旨之选: 坚持用官方源 (
pub.dev
,googleapis.com
)。但必须配合 TUN 模式的代理,并且务必清除系统代理,避免冲突。
希望这篇总结能帮到还在为 Flutter 网络问题头疼的你。赶紧去试试吧,让你的 flutter pub get
飞起来!