【Flutter】Flutter 3にアップデートするためにしたことをまとめてみたよ

Dart

概要

どうも、@daiki1003です!

Flutter 3がリリースされましたね!
変更内容は後ほどまとめるとして。

今回は手元のプロジェクトでアップデートした際にどこを変更したのか
まとめてみようと思います。

これからあげようと思ってるけど大変なのかな?
何を変えるんだろう?
と思っている方の参考になれば幸いです!

筆者環境

OS: macOS Monterey 12.3.1
アップデート前バージョン: Flutter 2.10.5

アップデート内容の紹介

unnecessary_non_null_assertion

Clean up the bindings APIs. by Hixie · Pull Request #89451 · flutter/flutter
Add more documentation. Make premature binding accesses have better runtime errors. Make accesses to instance not required !. Rationalize our "ensureInitialized...

Before
WidgetsBinding.instance!.addPostFrameCallback
After
WidgetsBinding.instance.addPostFrameCallback

Binding系のinstanceがnon-nullableになりました。

invalid_null_aware_operator

Before
WidgetsBinding.instance?.addPostFrameCallback
After
WidgetsBinding.instance.addPostFrameCallback

unnecessary_non_null_assertionとほぼ同じです。
nullableな値に対して?で受けていた場合、こちらの警告になりますので?を消しましょう。

unused_element

Before

void someMethod({String optionalText = 'optional'}) {
  print(optionalText);
}

After

void someMethod() {
  print('optional');
}

optionalな値を引数に取るにも関わらず、どこからも指定されていない場合に怒られます。
引数から削除し、変数でoptionalTextとしていた箇所に'optional'
指定します。
もしくは、内部で変数にしてしまうのもありでしょう。

Dart 2.17

ここからはDartを2.17に上げると起こる警告です。

avoid_redundant_argument_values

Before

Column(
  mainAxisAlignment: MainAxisAlignment.start,
  ...
)

After

Column(
  ...
)

各クラスやメソッドの引数にデフォルト値を指定してしまっている場合に出る警告です。
基本的にはクラス内部で定義されているデフォルト値を使用しようね、という意味合いの警告だと思います。

use_colored_box

Before

Container(color: Colors.blue)

After

ColoredBox(color: Colors.blue)

colorプロパティしか使っていない場合は、ContainerではなくColoredBox使おうな、と言うだけです。
これ系は、SizedBoxでも同じことで怒られますね!

use_super_parameters

基本的にdart fix --applyを叩くことで自動で解決してくれますが。

Before

const MyApp({
    Key? key,
  }) : super(key: key);

After

const MyApp({super.key});

地味にクラスを書かなくて良くなったのは最高のアプデだと思っています。

しかし、ここで注意が必要です。
僕らは、新しくクラスを作る時は上記MyAppの様にKey?named parametersに追加しろと
言われて今まで育ってきました。(よね?)

ですが、本対応を行った後にprivate classprivate constructorに対しては
「使ってないからsuper.keyの指定を削除しなさい」と怒られます。

build_runnerのエラー

ここまでで、普通にアプリは実行できるようになっています。
が、多くのプロジェクトに入っているであろうbuild_runner、動かしてみると下記のエラーが出ました。
(freezedの生成に使っています。)

これも地味に時間を使ってしまったのですが、下記をpubspec.yamlに追加することで解決しました。

analyzer: ^3.4.1

手元のプロジェクトでは、そもそもanalyzerがなかったので純粋に追加しました。

最後に

とりあえず、ここまでの対応で全ての警告は消えてくれ、無事にCIも通りました。
まだ、何かありましたら追加したいと思います。

また、自分のプロジェクトではこんな対応もしたよーなどありましたら
教えていただけると嬉しいです!

誰かのお役に立てば。

Twitterフォローお願いします

「次回以降も記事を読んでみたい!」
「この辺分からなかったから質問したい!」

そんな時は、是非Twitter (@daiki1003)Instagram (@ashdik_flutter)のフォローお願いします♪

Twitterコミュニティ参加お願いします

Twitterコミュニティ「Flutter lovers」を開設しました!
参加お待ちしております😁

☕️ Buy me a coffee

また、記事がとても役に立ったと思う人は
コーヒーを奢っていただけると非常に嬉しいです!
@daiki1003

コメント

タイトルとURLをコピーしました