Flutter 国内安装指南

适用于 macOS + FVM,目标是稳定安装指定 Flutter 版本,并尽量避开 Google 官方源访问慢的问题。

推荐镜像组合

实测后建议使用:

bash 复制代码
# Dart / Flutter 依赖包
export PUB_HOSTED_URL=https://pub.flutter-io.cn

# Flutter artifacts / Dart SDK / iOS tools 等二进制资源
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn

# FVM 拉取 Flutter SDK git 仓库
export FVM_FLUTTER_URL=https://mirrors.bfsu.edu.cn/git/flutter-sdk.git

# FVM 缓存目录
export FVM_CACHE_PATH="$HOME/fvm"

# 让全局 flutter 指向 FVM 默认版本
export PATH="$HOME/fvm/default/bin:$HOME/.pub-cache/bin:$PATH"

把上面内容写入 ~/.zshrc,然后执行:

bash 复制代码
source ~/.zshrc

安装 FVM

如果还没安装 FVM:

bash 复制代码
brew tap leoafarias/fvm
brew install fvm

确认版本:

css 复制代码
fvm --version

配置 FVM

perl 复制代码
fvm config \
  --cache-path "$HOME/fvm" \
  --flutter-url https://mirrors.bfsu.edu.cn/git/flutter-sdk.git \
  --no-use-git-cache

说明:

  • --flutter-url 指定 FVM 拉 Flutter SDK 的 git 镜像。
  • --no-use-git-cache 避免首次创建共享 git cache 卡住;只装少量版本时更直接。

安装 Flutter

例如安装 3.35.4:

复制代码
fvm install 3.35.4

安装成功后会看到类似:

arduino 复制代码
Flutter 3.35.4 • channel stable • https://mirrors.bfsu.edu.cn/git/flutter-sdk.git
Tools • Dart 3.9.2

设置项目版本

进入项目目录:

bash 复制代码
cd /path/to/your/flutter/project
fvm use 3.35.4

如果当前只有这一个版本,也可以设为全局默认:

csharp 复制代码
fvm global 3.35.4

确认:

css 复制代码
fvm list
flutter --version
fvm flutter --version

iOS 模拟器启动注意

如果 simctl 不可用,通常是 Xcode 没被选中:

csharp 复制代码
xcode-select -p

如果输出是:

复制代码
/Library/Developer/CommandLineTools

可以临时使用完整 Xcode:

javascript 复制代码
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer

然后启动模拟器并运行:

arduino 复制代码
fvm flutter devices
fvm flutter run -d <device-id>

清理建议

正常安装后,$HOME/fvm/versions/<version> 占用 2GB+ 是正常的,包含:

  • Flutter SDK git 仓库
  • Dart SDK
  • iOS/macOS artifacts
  • Flutter tools

不要随便清 bin/cache,否则下次运行会重新下载。

可以安全清理的通常是:

bash 复制代码
rm -f "$HOME/fvm/cache.git.lock"
rm -rf "$HOME/fvm/cache.git.tmp."*

如果确认没有正在运行的 fvm install,这些是中断安装留下的临时文件。

相关推荐
Amos_Web22 分钟前
Markdonw语法
开发语言·前端·javascript
小万74223 分钟前
刚发布就冲上GitHub热榜!Filee支持244种格式转换,完全免费还全本机运行
前端
星光不问赶路人25 分钟前
Vue 3 对象监听与快照:ref 和 reactive 的关键差异
前端·vue.js
世界一刘先生25 分钟前
不引入 JSZip,自己写一个 ZIP 打包器:CRC32、中央目录与 UTF-8 文件名
前端
全栈项目管理程序猿25 分钟前
ArcGIS JS 基础教程(34):体元系列 - 等值面 VoxelIsosurface
前端·javascript
代码搬运媛27 分钟前
如何使用 @codemirror/view 库创建一个简单的代码编辑器
前端
huali29 分钟前
草稿该存在哪:per-session 是怎么成为共识的
前端·产品经理·产品
IPIPD31 分钟前
Proxifier规则为什么没有生效?从连接日志定位规则命中与DNS路径
前端
baiyunfan32 分钟前
微信小程序做 PDA 扫码出入库:库存并发控制与 4 个坑
前端