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

Dart

概要

どうも、@daiki1003です!

Flutter 3.7.0がリリースされましたね!

【Flutter】3.7.0がリリースされたので解説してみたよ
前回Flutter 3.3.0が出てから約半年、ようやくマイナーバージョンアップデートとなるFlutter 3.7.0がリリースされました! と同時にDart 2.19.0もリリースされましたね! 本記事では、上記記...

本記事では、手元のプロジェクトで3.7.0対応した際に変更したことを
まとめていこうと思っているので興味のある方はぜひちらっと覗いて行って見てください。

それでは行ってみましょー!

筆者環境

OS: macOS Ventura 13.1
アップデート前バージョン: Flutter 3.3.7

アップデート内容の紹介

invalid_null_aware_operator

Diagnostic messages
Details for diagnostics produced by the Dart analyzer.

Before
Overlay.of(context, rootOverlay: true)?.insert(_entry);
After
Overlay.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

use_string_in_part_of_directives

Before
part of my_library;
After
part of '../my_library.dart';
or
part 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

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

コメント

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