Flutter1へのバージョンダウン/ダウングレード

## Flutter 2.0 がリリースされたはいいけど ##
 3月にFlutterがメジャーアップデートされ、その後もバージョンアップされています。
4月17日時点のでもStableブランチでも、バージョン2.0.5で、１ヶ月半の間に5回もバージョンアップして、Googleの意気込みも感じられます。
 しかし、Flutter1からの互換性はどうなんでしょう。既存のプロジェクトは、単に pubspec.yaml ファイルを書き換えて対応できるのでしょうか。

　たまたま見つけた下記のページを見ると「コードの70%に問題が出るが問題無い」??と、怖いことが書かれています。
 [FLUTTER2 MIGRATION](https://ichi.pro/flutter-o-rikaisuru-flutter-2-no-iko-74198693405922)

## 実際にビルドするとどうなの ##
 Flutter1のプロジェクトをFlutter2でいくつかビルドしてみました。はい、、deprecated の警告の嵐です。
deprecated 自体は非推奨の表示なのでビルドは通ることもありますが、エラーも多数出ています。
　今後のためにエラーを１つずつ対応することも必要でしょうけど、まずはビルドの通る環境を復活させましょう。

## flutterコマンドでのバージョンダウン ##
 Flutterは色々便利なコマンドがあり、バージョンアップやバージョン指定でインストールなどが簡単(ちょっと語弊あり)に出来たはずです。以下Windowsのコマンドラインでの操作です。
　まずはバージョン確認から、

```
C:\flutter>flutter  --version
Flutter 2.0.5 • channel stable • https://github.com/flutter/flutter.git
Framework • revision adc687823a (9 days ago) • 2021-04-16 09:40:20 -0700
Engine • revision b09f014e96
Tools • Dart 2.12.3
C:\flutter>
```
それではバージョンダウンしましょう。flutter1.25.0を指定します。

```
C:\flutter>flutter downgrade 1.25.0
Checking Dart SDK version...
Downloading Dart SDK from Flutter engine b09f014e9658da6647361e7e416d1a159d34192d...
Building flutter tool...
Running pub upgrade...
Downloading Material fonts...                                    1,194ms
Downloading Gradle Wrapper...                                       43ms
Downloading package sky_engine...                                  462ms
Downloading flutter_patched_sdk tools...                            5.0s
Downloading flutter_patched_sdk_product tools...                    4.9s
Downloading windows-x64 tools...                                   11.0s
Downloading windows-x64/font-subset tools...                     1,106ms
There is no previously recorded version for channel "stable".
C:\flutter>
```
あれ？ダウンロードされるのに、stable には前バージョンの記録が無いと言われ終了してしまします。
stable に無いなら master なら全部あるでしょうから切り替えます。

```
C:\flutter>flutter channel master
Switching to flutter channel 'master'...
git: Switched to branch 'master'
Successfully switched to flutter channel 'master'.
To ensure that you're on the latest build from this channel, run 'flutter upgrade'
C:\flutter>
```
切り替え後も結果は同じ。

他にも flutter version という、バージョン指定でインストールできるコマンドオプションもあったようですが、現在は廃止されて使えないようです。

ヘルプを参照してわかったのは、 flutter downgrade コマンドは、現在のチャンネルの最新のアクティブバージョンに変更する機能だということです。それがダウングレード？意味がわかりません。

## 結局は git を 使え ##
flutterコマンドはあきらめ、git を使用します。
コマンドラインでflutterのインストールディレクトリに移動し、betaチャンネルを指定して、tagコマンドで利用できるバージョンを確認します。betaチャンネルを指定するのは、flutter WEB(Chrome)版を使うアプリのためです。

```
C:\flutter>git checkout beta
Updating files: 100% (2435/2435), done.
Switched to branch 'beta'
Your branch is up to date with 'origin/beta'.
C:\flutter>git tag
0.0.10
0.0.11
0.0.12
0.0.13
0.0.14
0.0.15
0.0.16
0.0.17
0.0.18
0.0.19
0.0.20
0.0.21
0.0.6
0.0.7
0.0.8
0.0.9
1.17.0
1.17.0-3.2.pre
1.17.0-3.3.pre
1.17.0-3.4.pre
1.17.0-dev.0.0
1.17.0-dev.1.0
1.17.0-dev.2.0
1.17.0-dev.3.0
1.17.0-dev.3.1
1.17.0-dev.4.0
1.17.0-dev.5.0
1.17.1
1.17.2
:
```
おお、古いバージョンも(多分)残っているようです。
チェックアウトしてローカルのflutterファイルを更新します。

```
C:\flutter>git checkout v1.15.0                                                                                         Updating files: 100% (4810/4810), done.                                                                                 Note: switching to 'v1.15.0'.                                                                                                                                                                                                                   You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 9b3e1639db Revert "Reland: Skia gold driver test (#49905)" (#50127)

C:\flutter>
```
flutter pre コマンドで、flutterのキャッシュを更新(ファイルのダウンロード？)をします。

```
C:\flutter>flutter precache
Checking Dart SDK version...
Downloading Dart SDK from Flutter engine 81dffd1241e67f7e514b5fcc9eab4902721ae575...
Unzipping Dart SDK...
Building flutter tool...
Running pub upgrade...
Downloading Material fonts...                                       3.4s
Downloading Gradle Wrapper...                                       0.4s
Failed to download the Android dependencies
Downloading Android Maven dependencies...                           0.1s
Downloading android-arm-profile/windows-x64 tools...                1.6s
Downloading android-arm-release/windows-x64 tools...                2.0s
Downloading android-arm64-profile/windows-x64 tools...              1.2s
Downloading android-arm64-release/windows-x64 tools...              1.1s
Downloading android-x64-profile/windows-x64 tools...                1.7s
Downloading android-x64-release/windows-x64 tools...                1.2s
Downloading android-x86 tools...                                    6.1s
Downloading android-x64 tools...                                    4.0s
Downloading android-arm tools...                                    1.9s
Downloading android-arm-profile tools...                            2.0s
Downloading android-arm-release tools...                            1.0s
Downloading android-arm64 tools...                                  3.4s
Downloading android-arm64-profile tools...                          1.4s
Downloading android-arm64-release tools...                          1.5s
Downloading android-x64-profile tools...                            1.3s
Downloading android-x64-release tools...                            1.2s
Downloading android-x86-jit-release tools...                        1.8s
Downloading package sky_engine...                                   1.1s
Downloading flutter_patched_sdk tools...                            1.9s
Downloading flutter_patched_sdk_product tools...                    1.5s
Downloading windows-x64 tools...                                    3.3s
Downloading windows-x64/font-subset tools...                        1.1s
C:\flutter>
```
Androidの依存性が解決せずダウンロードできなかったとのことですが、とりあえずエラー無し。
Flutterのバージョン表示をします。

```
C:\flutter>flutter --version
Flutter 1.15.0 • channel unknown • unknown source
Framework • revision 9b3e1639db (1 year, 3 months ago) • 2020-02-04 13:28:55 -0800
Engine • revision 81dffd1241
Tools • Dart 2.8.0 (build 2.8.0-dev.7.0 c8ed304e97)
C:\flutter>
```
おお、1.15.0だ！ 念の為、 flutter doctor コマンドで診断しておいて下さい。
いくつかのFlutterプロジェクトを、flutter analyzeコマンドやビルドをしてみましたが、一部ライブラリ依存等がありましたが、ほとんど問題ありませんでした。

## 参考情報 ##
どのflutter1のバージョンを使うのかは、[Flutter SDK Releases](https://flutter.dev/docs/development/tools/sdk/releases)あたりを参考にしたらいいのかも。

flutterのバージョン混在は、[FVM](https://github.com/leoafarias/fvm)などのバージョン管理システムもあるようですので、今後検討してみたいです。それにしてもアプリ開発はバージョン依存が多くて大変。