概要
どうも、@daiki1003です!Flutter 3.7.0
がリリースされましたね!
本記事では、手元のプロジェクトで3.7.0
対応した際に変更したことを
まとめていこうと思っているので興味のある方はぜひちらっと覗いて行って見てください。
それでは行ってみましょー!
筆者環境
OS: macOS Ventura 13.1
アップデート前バージョン: Flutter 3.3.7
アップデート内容の紹介
invalid_null_aware_operator
BeforeOverlay.of(context, rootOverlay: true)?.insert(_entry);
AfterOverlay.of(context, rootOverlay: true).insert(_entry);
nullable
ではないものを、nullable
として扱ってしまっている場合に起きる警告です。
deprecated_member_use
Before
TextField( toolbarOptions: const ToolbarOptions(), ),
After
TextField( contextMenuBuilder: (context, editableTextState) => /* 鋭意調査中 */, ),
こちらに関しては、まだ最適解が分かっていないので分かり次第記事を更新し、@daiki1003からシェアします! 🙏
Before
ThemeData( textTheme: const TextTheme( button: ..., ), ),
After
ThemeData( textTheme: const TextTheme( labelLarge: ..., ), ),
implicit_call_tearoffs
Before
class Hoge { void call() {} } void callFunc(Function() f) { f(); } callFunc(Hoge());
After
class Hoge { void call() {} } void callFunc(Function() f) { f(); } callFunc(Hoge().call);
call
メソッドが呼ばれることを期待しているにも関わらず、インスタンスのみしか渡していない場合に起こります。
素直に、 call
を渡しましょう。
combinators_ordering
Before
export 'package:flutter/services.dart' show SmartQuotesType, SmartDashesType;
After
export 'package:flutter/services.dart' show SmartDashesType, SmartQuotesType;
show
の内容もアルファベット順でソートしろとのこと。
Dart 2.19.0
ここからはDartを2.19.0に上げた際に起きた警告です。
use_build_context_synchronously
Before
await sendSomething(...); Navigator.of(context).push<void>(...);
After
await sendSomething(...); if (context.mounted) { Navigator.of(context).push<void>(...); }
await
の後に、BuildContext
を利用している場合に怒られます。Flutter 3.7.0
で追加されたcontext.mounted
を使いましょう。
しかし、1点不便な点があります。
early return
をしようと、context.mounted
を否定で確認しようとすると
同じuse_build_context_synchronously
で怒られますw
Bad
await sendSomething(...); if (!context.mounted) { // ここで怒られる return; } Navigator.of(context).push<void>(...);
これは今後の修正に期待ですね。
pedantic_mono 1.21.1
@monoさん謹製のpedantic_monoを入れているのですがpackage.yaml
の箇所で怒られていました。
該当のパッケージは、本日1/26に更新されており、これを更新した際に出た警告も直していきます。
use_string_in_part_of_directives
Beforepart of my_library;
Afterpart of '../my_library.dart';
orpart of 'package:sample_app/path/to/my_library.dart';
library my_library;
を定義しているファイルへのパスが必要になりました。
相対パス、絶対パスどちらも可能です。
unreachable_from_main
Before
main() {} void f() {} final json ={};
After
main() {}
要するに、トップレベル(クラス内ではない)にpublic
で定義された使われていない変数や関数定義があるよ、との警告です。
最後に
とりあえず、ここまでの対応で全ての警告は消えてくれ、無事にCIも通りました。
まだ、何かありましたら追加したいと思います。
また、自分のプロジェクトではこんな対応もしたよーなどありましたら
教えていただけると嬉しいです!
Twitterフォローお願いします
「次回以降も記事を読んでみたい!」「この辺分からなかったから質問したい!」
そんな時は、是非Twitter (@daiki1003)やInstagram (@ashdik_flutter)のフォローお願いします♪
Twitterコミュニティ参加お願いします
Twitterコミュニティ「Flutter lovers」を開設しました!参加お待ちしております😁
☕️ Buy me a coffee
また、記事がとても役に立ったと思う人はコーヒーを奢っていただけると非常に嬉しいです!
コメント