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

Dart

概要

どうも、@daiki1003です!
【Flutter】3.16がリリースされたので解説してみたよ
本日、11月16日、とうとうFlutter 3.16、Dart 3.2がリリースされました! 本記事では、Flutter 3.16に焦点を当てて、下記記事の要約をしていこうと思います。 それでは行ってみましょー!...

を先日公開しましたが、本記事ではそのFlutter 3.16に対応する時にしたことをまとめてみました!

・アップデートしたいけど、どれくらい時間がかかるか心配
・何を変更しなければいけないか、あらかじめ知りたい

そんな人に向けた記事です。

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

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

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

Flutter 3.16

deprecated_member_use

WillPopScopePopScopeに変更します。

その際に、インタフェースが変更されているので最初は機械的に変更するのは難しそうです。

Android predictive back
The ability to control back navigation at the time that a back gesture is received has been replaced with an ahead-of-time navigation API in order to support...

大きく3パターンに分かれるのでそれぞれ解説します。

遷移するかどうかが変数に依存する場合

PopScope.canPopにそのまま渡します。

// BEFORE
WillPopScope(
  onWillPop: () async {
    return _myCondition;
  },
  child: ...
),

// AFTER
PopScope(
  canPop: _myCondition,
  child: ...
),

遷移前処理を行っている場合

PopScope.onPopInvokedでその処理を行います。

// BEFORE
WillPopScope(
  onWillPop: () async {
    _myHandleOnPopMethod();
    return true;
  },
  child: ...
),

// AFTER
PopScope(
  canPop: true,
  onPopInvoked: (bool didPop) {
    _myHandleOnPopMethod();
  },
  child: ...
),

ユーザに遷移するかどうかを委ねる

例えば、X (旧Twitter) で投稿内容がある時に戻ろうとすると、「変更内容が破棄されます」と言う旨のダイアログが表示される。
ユーザの選択内容によっては、戻るみたいな状況はこちらです。

// BEFORE
WillPopScope(
  onWillPop: () async {
    final shouldPop = await _showBackDialog();
    return shouldPop ?? false;
  },
  child: child,
)

// AFTER
return PopScope(
  canPop: false,
  onPopInvoked: (bool didPop) async {
    if (didPop) {
      return;
    }
    final navigator = Navigator.of(context);
    final shouldPop = await _showBackDialog();
    if (shouldPop ?? false) {
      navigator.pop();
    }
  },
  child: child,
)

メソッド名が、onPopInvokedであることに要注意です。

つまり、onPoppedではないので、popしたかどうかは問いません。
canPopfalseでない場合でも、onPopInvokedは呼ばれ、didPopfalseになっています。

https://github.com/flutter/flutter/blob/11a9cb7029d77aef521a934645383780a732d67c/packages/flutter/lib/src/widgets/pop_scope.dart#L19-L21

deprecated_member_use

textScaleFactorTextScalerに変更します。

textScaleFactor: 1の場合

textScaler: TextScaler.noScalingに変更します。

textScaleFactor: 1以外の場合

textScaler: TextScaler.linear(元の値)に変更します。

ThemeData.useMaterial3

Flutter 3.16では、デフォルトでMaterial 3が適用されます。
ですが、ほとんどのアプリはすぐにMaterial 3対応するのは難しいと思います。
なので、必要あればThemeData.useMaterial3falseを明示的に指定します。

Dart 3.2

現状、特にありませんでした。

最後に

Flutter 3.13.9Dart 3.2からの移行はこれだけとなりました。
今後、何か追加がありましたら追記していきたいと思います。

誰かのお役に立てば。

Twitterフォローお願いします

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

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

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

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

☕️ Buy me a coffee

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

コメント

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