【Flutter】Flutter3.10.0にアップデートするためにしたこと

Dart

概要

どうも、@daiki1003です!

Flutter 3.10.0とうとうリリースされましたねー!
iOSImpellerがstableになったと言うことでいち早く入れたい人も多いのではないかなと思います。

そこで弊ブログでは毎度お馴染みのアップデート時対応シリーズを
書いてみました!

アップデート時に何を変更しなくてはいけなくなるのか、皆様の参考になると幸いです。

執筆時アップデート前環境

名前バージョン
macOS Ventura13.1
Flutter3.7.12

アップデート内容の紹介

use_build_context_synchronously

use_build_context_synchronously

contextawaitを跨いで使うなという警告です。

// BEFORE
Future someMethod({
  required BuildContext context,
}) async {
  final result = await _someFuture();
  Navigator.of(context).push(...);
}

// AFTER
Future someMethod({
  required BuildContext context,
}) async {
  final result = await _someFuture();
  if (context.mounted) {
    Navigator.of(context).push(...);
  }
}

prefer_const_constructors

prefer_const_constructors

const付けられるウィジェットは付けろよ、と言う警告です。

Stack, Row/Column, Paddingなどが新たにconstに対応しました!
これは地味に嬉しいですね!!!

// BEFORE
Column(
  children: const [
    ...,
  ],
)

// AFTER
const Column(
  children: [
    ...,
  ],
)

deprecated_member_use

Diagnostic messages
Details for diagnostics produced by the Dart analyzer.
// BEFORE
MediaQueryData.fromWindow(
  WidgetsBinding.instance.window,
)

// AFTER
MediaQueryData.fromView(
  View.of(context),
)

などなど。

MaterialApp.useInheritedMediaQueryなんかも対象になったのは地味に大きいかもしれません。

avoid_redundant_argument_values

avoid_redundant_argument_values

初期値として与えられている値を、インスタンス化時に引数に渡そうとすると怒られます。
この警告自体は前からあるものですが、どうやらfreezedパッケージの@Default
対象になったようです。

@freezed
class Some extends _$Some {
  const factory Some({
    @Default(0) int hoge,
  });
}

// BEFORE
Some(hoge: 0)

// AFTER
Some()

avoid_positional_boolean_parameters

avoid_positional_boolean_parameters
// BEFORE
Task(true);
Task(false);
ListBox(false, true, true);
Button(false);

// AFTER
Task.oneShot();
Task.repeating();
ListBox(scroll: true, showScrollbars: true);
Button(ButtonState.enabled);

CI/CD

flutter pub run

flutter pub rundeprecatedになり、dart runに変更する必要があります。
VSCodeの方は、.vsCode/tasks.jsonも確認しておくと良さそうですね。

dart formatの実行

lintのルールが変わっているのか、変更される場合が多くCIでフォーマットをチェックしている場合は
コケる可能性があるので実行しておきましょう。

Dart 3

unnecessary_breaks

unnecessary_breaks

switchcase文で、ほとんどの場合、breakが必要なくなります。
例外として、処理を行いたくない場合fallthroughされてしまうのでbreakを書く必要があります。

enum Hoge {
  foo,
  bar,
  baz,
  qux
  ;
}

// BEFORE
switch (hoge) {
  case Hoge.foo:
    print('This is foo');
    break;
  case Hoge.bar:
    break;
  case Hoge.baz:
  case Hoge.qux:
    print('These are baz or qux');
    break;
}

// AFTER
switch (hoge) {
  case Hoge.foo:
    print('This is foo');
  case Hoge.bar:
    break;
  case Hoge.baz:
  case Hoge.qux:
    print('These are baz or qux');
}
誰かのお役に立てば。

Twitterフォローお願いします

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

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

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

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

☕️ Buy me a coffee

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

コメント

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