Flutterのバージョンを切り替える方法  ( git checkout ) 

# はじめに
株式会社ピー・アール・オー [Advent Calendar 2023](https://qiita.com/advent-calendar/2023/pro-japan)の 8日目です。

# Flutterのバージョンを切り替えたい
基本的には最新にバージョンアップしていきたい！

...けど、バージョンアップすると、今まで動いてたのに動かないかも問題。
...でも先延ばしにしすぎると、修正範囲多くなっちゃうかも問題。

というわけで、先延ばしにしてきましたが、いざやります！

調べるとFVMとか出てきますが、本記事ではgit checkoutで試しましたの記事となります。
自分の備忘録として、載せたいと思います。

# 前提条件
・Mac
・Flutterの実行環境があること
・動作確認できるFlutterプロジェクトがあること

# やりたいこと
・現状v3.3.9で動いてるプロジェクトを、v3.16.2でも動くか確認したい

# 確認結果
・v3.3.9：もちろん動くOK
・v3.3.10：あんまり変更ないので、そのままのコードで動いたOK
・v3.16.2：結構なバージョンアップなので、動かなかったNG
・v3.3.9に戻す：動いたOK
・"最新"にするとどうなるか：記載時点ではv3.16.2になる（3.17.0.x.x.preではなく）

# 1.現在のバージョンを確認する
```:Flutter情報
$ flutter --version
Flutter 3.3.9-0.0.pre.1 • channel stable •
https://github.com/flutter/flutter.git
Framework • revision bcff2f86cc (8 months ago) • 2023-03-31 10:29:54 +0900
Engine • revision 857bd6b74c
Tools • Dart 2.18.4 • DevTools 2.15.0
```

# 2.Flutterのフォルダを探して移動
```:Flutterフォルダを探す
$ which flutter
/Users/xxxx/develop/flutter/bin/flutter
```
```:移動（binの上のフォルダ）
$ cd /Users/xxxxx/develop/flutter
```

# 3.選べるバージョンを確認
```:選べるバージョンを探す
$ git tag -l '3.3*'
3.3.0
3.3.0-0.0.pre
3.3.0-0.1.pre
3.3.0-0.2.pre
3.3.0-0.3.pre
3.3.0-0.4.pre
3.3.0-0.5.pre
3.3.1
3.3.10
3.3.2
3.3.3
3.3.4
3.3.5
3.3.6
3.3.7
3.3.8
3.3.9
```
（3.3.9が一番下に出てくるけど、実は3.3.10もあるっていう見逃しがちに注意。。）
```:現在のブランチ確認
$ git branch
* stable
```


# 4. v3.3.9  から v3.3.10 に変更する
あんまり変更ないので、そのままのコードで動くことを確認できたのでOK！
```:変更
$ git fetch
$ git checkout 3.3.10
```
```:現在のブランチ確認
$ git branch
* (HEAD detached at 3.3.10)
  stable
```
```:Flutter情報
$ flutter --version
Flutter 3.3.10 • channel unknown • unknown source
Framework • revision 135454af32 (12 months ago) • 2022-12-15 07:36:55 -0800
Engine • revision 3316dd8728
Tools • Dart 2.18.6 • DevTools 2.15.0
```

# 5. v3.3.10 から v3.16.2 に変更する
結構なバージョンアップなので、そのままのコードで動かなくてNG。
```:変更
$ git fetch
$ git checkout 3.16.2
```
```:現在のブランチ確認
$ git branch
* (HEAD detached at 3.16.2)
  stable
```
```:Flutter情報
$ flutter --version
Flutter 3.16.2 • channel [user-branch] • unknown source
Framework • revision 9e1c857886 (3 days ago) • 2023-11-30 11:51:18 -0600
Engine • revision cf7a9d0800
Tools • Dart 3.2.2 • DevTools 2.28.3
```

ちなみに動かなかったエラーと原因はこちらでした。
```:動かないエラー
Downloading Web SDK...
Resolving dependencies...
Note: intl is pinned to version 0.18.1 by flutter_localizations from the flutter SDK.
See https://dart.dev/go/sdk-version-pinning for details.


Because xxxxxxx depends on flutter_localizations from sdk which depends on intl 0.18.1, intl 0.18.1 is required.
So, because xxxxxxx depends on intl ^0.17.0, version solving failed.


You can try the following suggestion to make the pubspec resolve:
* Try upgrading your constraint on intl: flutter pub add intl:^0.18.1
Exited (1)
```
pubspec.yamlのintlのバージョンを
エラーメッセージどおりにアップしたらOKに！
```:修正前：pubspec.yaml
  intl: ^0.17.0
```
```:修正後：pubspec.yaml
  intl: ^0.18.1
```


# 6. v3.16.2 から v3.3.9に戻す
動いてたバージョンに戻して、再度実行できることを確認できたのでOK！
```:変更
$ git fetch
$ git checkout 3.3.9
```

# 7. 最新バージョンにしたい場合
2023/12/06時点で、最新を取得するとv3.16.2になりました。
```:バージョンを確認
$ git tag -l '3.16.2*'
3.16.2
$ git tag -l '3.16.3*'
$ git tag -l '3.17.*'
3.17.0-0.0.pre
3.17.0-0.1.pre
3.17.0-1.0.pre
3.17.0-10.0.pre
3.17.0-11.0.pre
3.17.0-12.0.pre
3.17.0-13.0.pre
3.17.0-14.0.pre
3.17.0-15.0.pre
3.17.0-16.0.pre
3.17.0-17.0.pre
3.17.0-18.0.pre
3.17.0-19.0.pre
3.17.0-2.0.pre
3.17.0-3.0.pre
3.17.0-4.0.pre
3.17.0-8.0.pre
3.17.0-9.0.pre
```
```:変更
$ flutter channel stable
$ flutter upgrade
```
```:現在のブランチ確認
$ git branch
* stable
```
```:Flutter情報
$ flutter --version
Flutter 3.16.2 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 9e1c857886 (5 days ago) • 2023-11-30 11:51:18 -0600
Engine • revision cf7a9d0800
Tools • Dart 3.2.2 • DevTools 2.28.3
```

# 最後に
先延ばしにしないで、ちょいちょい更新して確認していくのが一番です (๑و•̀ω•́)و✧