flutter:安装和使用fvn

安装fvm

fvmFlutter Version Management 的缩写,是一个用于 管理多个 Flutter SDK 版本 的工具。

当你有多个 Flutter 项目、每个项目可能使用不同版本的 Flutter SDK 时,fvm 可以帮你:

功能 说明
📌 项目锁定版本 为每个项目锁定独立的 Flutter 版本(项目本地 .fvm/flutter_sdk
🔄 多版本共存 不同项目可使用不同的 SDK 版本,而不会互相干扰
⏬ 快速切换版本 快速安装、切换 Flutter SDK 版本
🧼 避免污染全局 不影响你的全局 flutter 安装
brew tap leoafarias/fvm

brew install leoafarias/fvm/fvm

# 验证fvm 下载成功
fvm --version

使用fvm下载SDK

下载 stable 版本

fvm install stable

下载指定版本:

fvm install 3.0.1

所有可用版本见:https://docs.flutter.dev/release/release-notes

查看自己下载了哪些版本:

fvm list

下载的SDK放在:~/fvm/versions下面:

全局设置

# 设置 stable 版本为全局的 SDK
fvm global stable

设置后之后,会多一个default文件夹

(base) xieshaolin@xieshaolindeMacBook-Pro fvm % ls -l
total 0
drwxr-xr-x  33 xieshaolin  staff  1056 Aug  8 17:07 cache.git
lrwxr-xr-x   1 xieshaolin  staff    37 Aug  8 17:23 default -> /Users/xieshaolin/fvm/versions/stable
drwxr-xr-x   5 xieshaolin  staff   160 Aug  8 17:24 versions

实际上default是一个软连接,指向了stable版本

设置环境变量

(base) xieshaolin@xieshaolindeMacBook-Pro fvm % which flutter
/Users/xieshaolin/dev/SDK/flutter/bin/flutter

目前使用的flutter是自己手动下载的flutter,而不是fvm管理的,因此需要去设置环境变量

# 使用vscode 打开 .zshrc
code ~/.zshrc

# 以下是 环境配置 : 要注释掉之前的配置
# flutter sdk
# export PATH=~/dev/SDK/flutter/bin:$PATH
export PATH=~/fvm/default/bin:$PATH

# dart sdk
# export PATH=~/dev/SDK/flutter/bin/cache/dart-sdk/bin:$PATH
export PATH=~/fvm/default/bin/cache/dart-sdk/bin:$PATH
export PATH=~/.pub-cache/bin:$PATH

测试是否配置成功:

(base) xieshaolin@xieshaolindeMacBook-Pro fvm % which flutter                          
/Users/xieshaolin/fvm/default/bin/flutter

全局切换

(base) xieshaolin@xieshaolindeMacBook-Pro fvm % flutter --version # 这个时候是stable版本
Flutter 3.32.8 • channel stable • https://github.com/flutter/flutter.git
Framework • revision edada7c56e (2 weeks ago) • 2025-07-25 14:08:03 +0000
Engine • revision ef0cd00091 (2 weeks ago) • 2025-07-24 12:23:50 -0700
Tools • Dart 3.8.1 • DevTools 2.45.1
(base) xieshaolin@xieshaolindeMacBook-Pro fvm % fvm global 3.0.1 # 使用3.0.1的版本
Flutter SDK: SDK Version : 3.0.1 is now global
(base) xieshaolin@xieshaolindeMacBook-Pro fvm % flutter --version # 这个时候 全局的版本就是 3.0.1
Flutter 3.0.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision fb57da5f94 (3 years, 3 months ago) • 2022-05-19 15:50:29 -0700
Engine • revision caaafc5604
Tools • Dart 2.17.1 • DevTools 2.12.2

FVM 下载的是一个“轻量”Flutter SDK

使用 FVM 安装的 Flutter SDK,在第一次运行 flutter 命令时会触发构建 flutter tool 并下载 Dart SDK

这是因为FVM 为了节省空间,它默认下载的是 Flutter 的 最小核心版本,这个版本:

  • 不包含完整的 Dart SDK(只是一个引用结构)

  • 不包含 flutter tool 的构建产物

  • 所以第一次运行 flutter 命令时,会自动下载 Dart SDK、构建 Flutter 工具,过程就类似你看到的:

    Downloading Dart SDK from Flutter engine...
    Building flutter tool...
    Resolving dependencies...
    

这一步只会 发生一次,以后就不会再下载除非你:

  • 升级了 Flutter 版本
  • 清除了 .pub-cache.dart_tool
  • 删除了 FVM 下的 SDK 缓存

使用FVM下载的SDK创建项目(全局情况)

VSCode

配置SDK的路径

打开命令面板 Cmd + Shift + PPreferences: Open Settings (JSON)

添加(或修改):

{
  "dart.flutterSdkPath": "/Users/xieshaolin/fvm/default"
}

让她指向default,这样我们执行fvm global命令的时候就可以自动修改VSCode所使用的SDK了。

如果想查看是不是真的换成了,可以选择Change SDK

然后就可以知道目前SDK的版本了

然后就可以测试测试了:

问题1:版本java版本过高

BUG! exception in phase 'semantic analysis' in source unit '_BuildScript_' Unsupported class file major version 65

这个错误表示:你当前使用的 Java 版本过高,不兼容当前的 Gradle 版本。

  • major version 65 代表 Java 21
  • Gradle 7.4不支持 Java 21

检查java版本java -version

(base) xieshaolin@xieshaolindeMacBook-Pro fvm % java -version
java version "21.0.2" 2024-01-16 LTS

找到Java的路径/usr/libexec/java_home -V

(base) xieshaolin@xieshaolindeMacBook-Pro fvm % /usr/libexec/java_home -V
Matching Java Virtual Machines (6):
    21.0.2 (x86_64) "Oracle Corporation" - "Java SE 21.0.2" /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home
    17.0.10 (x86_64) "Oracle Corporation" - "Java SE 17.0.10" /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
    11.0.21 (x86_64) "Oracle Corporation" - "Java SE 11.0.21" /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
    1.8.391.13 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
    1.8.0_391 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home
    1.8.0_281 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home

配置Java17的环境

code ~/.zshrc

# Java17的配置
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH


source ~/.zshrc

手动指定 Gradle 使用 Java 17

在Flutter 项目的 android/gradle.properties 中,修改或添加如下环境变量到项目的 gradle 启动配置中。

org.gradle.java.home=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home

Android Studio

修改SDK配置

配置完成之后,接着上面的样子测试一下,没法发生报错就可以。

如何给单个项目指定SDK

切换版本

现在我们把想把3.0.1的版本换成stable(3.32.8)的版本。

进入项目目录执行命令fvm use stable

(base) xieshaolin@xieshaolindeMacBook-Pro fvm % cd /Users/xieshaolin/workpalce/flutterTest/flutter_demo2
(base) xieshaolin@xieshaolindeMacBook-Pro flutter_demo2 % fvm use stable
┌─────────────────────────────────────────────────┐
│ ⚠ Flutter SDK does not meet project constraints │
└─────────────────────────────────────────────────┘
Channel: Stable has Dart SDK 3.8.1 does not meet the project constraints of >=2.17.1 <3.0.0.
This could cause unexpected behavior or issues.

✔ Would you like to proceed? · yes                                                                                                            
You should add the fvm version directory ".fvm/" to .gitignore.
✔ Would you like to do that now? · yes                                                                                                        
✓ Added .fvm/ to .gitignore

✓ Dependencies resolved. (16.0s)
✓ Project now uses Flutter SDK : Channel: Stable

Channel: Stable has Dart SDK 3.8.1 does not meet the project constraints of >=2.17.1 <3.0.0.
This could cause unexpected behavior or issues.

这段话的意思是:

你当前的 Flutter Stable 版本中包含的 Dart SDK 是 3.8.1
但你的项目的 pubspec.yaml 文件中定义的 Dart SDK 范围是:

environment:
  sdk: ">=2.17.1 <3.0.0"

也就是说你的项目只支持 Dart 2.17.1 到 3.0.0 之间的版本,而 Dart 3.8.1 超出了这个范围。

会导致什么问题?

  • 可能会出现依赖不兼容、语法错误或构建失败等问题。
  • 因为你使用的 Flutter SDK 自带的 Dart 版本和你项目要求的不一致。

✔ Would you like to proceed? · yes
  • 选择了继续,即使 SDK 版本不匹配。

  • 所以 FVM 把当前项目设置为使用 stable 通道的 Flutter SDK。


You should add the fvm version directory ".fvm/" to .gitignore.
✔ Would you like to do that now? · yes
✓ Added .fvm/ to .gitignore
  • .fvm/ 是运行 fvm use stable 后才自动创建的目录。

  • .fvm/ 是 FVM 本地管理 Flutter SDK 的目录。

  • 在项目中生成 .fvm/fvm_config.json 配置文件,里面记录了你当前项目使用的是哪个 Flutter SDK 版本,比如:

    {
      "flutterSdkVersion": "stable"
    }
    
  • 它不应该被加入 Git 仓库,否则项目体积会变大,而且每个人的 SDK 版本可能不一样。

  • 所以 FVM 建议你自动把 .fvm/ 添加进 .gitignore


✓ Dependencies resolved. (16.0s)
✓ Project now uses Flutter SDK : Channel: Stable
  • FVM 下载或切换到了你指定的 stable Flutter SDK。

  • 项目现在默认使用这个版本来运行构建 Flutter。

VSCode配置

手动创建.vscode/settings.json文件,然后填入以下配置:

{
  "dart.flutterSdkPath": ".fvm/flutter_sdk",
  // Remove .fvm files from search
  "search.exclude": {
    "**/.fvm": true
  },
  // Remove from file watching
  "files.watcherExclude": {
    "**/.fvm": true
  }
}

"dart.flutterSdkPath": ".fvm/flutter_sdk":这是最关键的一行,告诉 VSCode 使用 FVM 管理的 Flutter SDK

  • VSCode 默认使用全局的 Flutter SDK。
  • 这里显式指定为项目本地的 .fvm/flutter_sdk,这样你就可以在不同项目中使用不同版本的 Flutter,而不会互相影响。

"search.exclude": {"**/.fvm": true },

  • 这一行的作用是:排除 .fvm 目录中的内容被 VSCode 的全局搜索功能(⌘+Shift+F)搜到

  • 避免你在项目中搜索关键词时,出现 .fvm 中的一大堆 Flutter 源码干扰结果。

  • 只是搜索层面隐藏,不会影响编译、执行等功能。

"files.watcherExclude": {"**/.fvm": true }

  • 这个配置是:不监听 .fvm 目录的文件变化,对性能优化有好处。
  • VSCode 默认会“监听”项目中所有文件变动,触发一些插件、编译、提示等功能。
  • .fvm 里的 SDK 文件非常多(上万个),不监听这些可以减少资源占用、避免卡顿。

reload Windows:让它重新加载一下东西

Android Studio

切换SDK配置:


修改 .idea/workspace.xml

<component name="VcsManagerConfiguration">
  <ignored-roots>
    <path value="$PROJECT_DIR$/.fvm/flutter_sdk" />
  </ignored-roots>
</component>

为什么需要这个配置:

  • 这是因为 Android Studio(基于 IntelliJ 平台)有自己的版本控制(VCS)集成系统,默认会 监听整个项目目录的所有文件变动,包括 .fvm/flutter_sdk 这样的 SDK 目录。

component name="VcsManagerConfiguration"

  • 表示这是 版本控制系统配置模块(VCS Manager) 的设置。

ignored-roots

  • 是一个列表,告诉 Android Studio 忽略版本控制监视的根目录

<path value="$PROJECT_DIR$/.fvm/flutter_sdk" />

  • 指定要忽略的路径,即项目下的 .fvm/flutter_sdk 文件夹。

作用:

  1. 不对 .fvm/flutter_sdk 执行 Git 等版本控制操作
    • 避免 Git 状态提示你 .fvm/flutter_sdk 下有改动。
    • 避免你误提交 Flutter SDK 到 Git 仓库。
  2. 提高性能
    • .fvm/flutter_sdk 文件非常多,监听它们会严重拖慢 IDE 性能。
    • 忽略后能加快 Android Studio 的启动、索引、版本控制响应速度。

Git忽略.fvm/flutter_sdk

当我们执行fvm use命令的时候,会自动添加如下配置到.gitignore里面

# FVM Version Cache
.fvm/

Sidekick桌面应用

Sidekick 是一个用于简化 Flutter 多版本管理和项目配置的 桌面 GUI 工具,它是 FVM(Flutter Version Management) 的图形化界面客户端。

安装网站:https://github.com/fluttertools/sidekick

×

喜欢就点赞,疼爱就打赏