概要
どうも、@daiki1003です!

を先日公開しましたが、本記事ではそのFlutter 3.16に対応する時にしたことをまとめてみました!
・アップデートしたいけど、どれくらい時間がかかるか心配
・何を変更しなければいけないか、あらかじめ知りたい
そんな人に向けた記事です。
それでは行ってみましょー!
執筆時アップデート前環境
| 名前 | バージョン |
| macOS Ventura | 13.1 |
| Flutter | 3.13.9 |
Flutter 3.16
deprecated_member_use
WillPopScopeをPopScopeに変更します。
その際に、インタフェースが変更されているので最初は機械的に変更するのは難しそうです。


大きく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したかどうかは問いません。canPopがfalseでない場合でも、onPopInvokedは呼ばれ、didPopはfalseになっています。
deprecated_member_use
textScaleFactorをTextScalerに変更します。
textScaleFactor: 1の場合
textScaler: TextScaler.noScalingに変更します。
textScaleFactor: 1以外の場合
textScaler: TextScaler.linear(元の値)に変更します。
ThemeData.useMaterial3
Flutter 3.16では、デフォルトでMaterial 3が適用されます。
ですが、ほとんどのアプリはすぐにMaterial 3対応するのは難しいと思います。
なので、必要あればThemeData.useMaterial3にfalseを明示的に指定します。
Dart 3.2
現状、特にありませんでした。
最後に
Flutter 3.13.9、Dart 3.2からの移行はこれだけとなりました。
今後、何か追加がありましたら追記していきたいと思います。
Twitterフォローお願いします
「次回以降も記事を読んでみたい!」「この辺分からなかったから質問したい!」
そんな時は、是非Twitter (@daiki1003)やInstagram (@ashdik_flutter)のフォローお願いします♪
Twitterコミュニティ参加お願いします
Twitterコミュニティ「Flutter lovers」を開設しました!参加お待ちしております😁
☕️ Buy me a coffee
また、記事がとても役に立ったと思う人はコーヒーを奢っていただけると非常に嬉しいです!



コメント