【Flutter】3.27がリリースされたので内容について解説してみたよ

Dart

概要

どうも、@daiki1003です!

とうとうやって来ましたね!

毎度お馴染みの新しいアップデートの解説記事になります。

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

🍁 所感

かなりCupertinoに力を入れてアップデートして来てくれた感がありますね。

個人的に嬉しいアップデート3つ

  • Row/Columnspacingを追加
  • TextSelection のUX向上
  • DeepLink のバリデーター追加

今回のアップデートが大事な人

  • Web での利用者
  • Objective-C 開発を継続しようとする人
  • Dart 3.0 未満の利用者
    • IDEでのサポートが切れます
  • パッケージ開発者
    • GitHub から自動でパッケージリリース出来る GitHub Actionsが出来た
    • ダウンロード数が表示される様になります
    • Swift Package Managerへの対応

Flutter

Deep Linkがデフォルトで true に

Flutter がデフォルトで Deep Link をハンドリングしてくれる様です。

もし、これを明示的に true にしているプロジェクトはそのコードはもう要らなさそうですね。

逆に、 firebase_dynamic_links, uni_link, app_linksを利用しているプロジェクトは明示的に false にする必要があります。

詳しくは http://flutter.dev/go/deep-link-flag-migration

Dart 3 未満を非推奨に

Dart 3 未満を今後はサポートをしなくなるそうです。

Material Designの改良

Normalize `ThemeData.tabBarTheme` by QuncCccccc · Pull Request #156253 · flutter/flutter
Following #155476, this PR is to normalize ThemeData.tabBarTheme; change the TabBarTheme tabBarTheme property to TabBarThemeData tabBarTheme in ThemeData. In Th...
Update `ThemeData.dialogTheme` type to accept `DialogThemeData` by QuncCccccc · Pull Request #155129 · flutter/flutter
Following #153982, this PR is to normalize ThemeData.dialogTheme; change the DialogTheme dialogTheme property to DialogThemeData dialogTheme in ThemeData. In Th...
Normalize `ThemeData.cardTheme` by QuncCccccc · Pull Request #153254 · flutter/flutter
Following #151914, this PR is to normalize ThemeData.cardTheme; change the CardTheme cardTheme property to CardThemeData cardTheme in ThemeData. In ThemeData() ...

ThemeData において、引数の型が XxxTheme だったり XxxThemeData だったりします。

これを一部 XxxThemeData に合わせたよと言った変更になります。

これに伴い、 Xxx.of(context) から取得出来る値も XxxThemeData になります。

また、CarouselView.weighted が追加され、アイテム表示のメリハリが付けられる様になりました。

出典: https://medium.com/flutter/whats-new-in-flutter-3-27-28341129570c

Material Design 3トークン

最新の Material Design 3 トークン (v6.1) が適用されました。

Container 系の色味のマッピングが変更され、コントラストを保ったまま視覚的にアピールする様になりました。

Chip 系や ColorScheme.outline などを利用している箇所に影響があるそうです。

SegmentedButton

direction プロパティが追加され、縦に並べることもできる様になりました。

ButtonStyleButton

ElevatedButton やそれらの良く使うボタンたちの styleFrom メソッドにアイコンに関するプロパティが追加された様です。

SelectionArea

最近、割とアップデートが多いような?

まぁFlutterは割とテキスト周りまだまだ弱い印象ありますからね。

Shift + Click ジェスチャーをサポートし、デスクトップ端末でクリックによる選択範囲の拡大が可能になりました。

また、  SelectableRegionState.selectableRegion.clearSelection で選択解除も出来るそうです。

出典: https://medium.com/flutter/whats-new-in-flutter-3-27-28341129570c

Row/Columnに spacing プロパティが追加

ようやく…か!という気持ちと、サポートする予定あったんですね?という気持ちが笑

もはや、自作で同様の機能を提供していたのでなくても困らないのですがプロジェクトの学習コストを下げるためにも公式でサポートされてるのは嬉しいですね。

spacing よりは separator とかの方が個人的には良いかなとは思ったりしますが。

iOS

Objective-C によるプロジェクト作成が非推奨に

flutter create 時の --ios-language objc フラグが削除されます。

Cupertino(Sliver)NavigationBar

コンテンツが下に来るまで、透明に描画される様になりました。

CupertinoCheckbox, CupertinoRadio, CupertinoSwitch

サイズや色味が本家に近寄り、カスタマイズのためのプロパティがいくつか追加されました。

CupertinoSlidingSegmentedControl 

個々のセグメンテーションを無効にしたり、コンテンツによって各セグメントのサイズが変更にされたりします。

CupertinoButton

onLongPress ハンドラが追加されました。

Cupertino(Date)Picker

タップしたアイテムにジャンプする様になった!

出典: https://medium.com/flutter/whats-new-in-flutter-3-27-28341129570c

ButtonStyleの追加

iOS 15+ で利用されている CupertinoButton のサイズが利用出来たり、半透明背景の CupertinoButton.tinted が追加されたりしました。

Compositor Backpressure

高負荷なレンダリング時に、iOSデバイスにて1フレームあたり数msの遅延が起こっていたものが起こりにくくなりました。

特に120Hzのデバイスで顕著だそうです。

DisplayP3

iOS デバイスでは、sRGB より鮮明に描画可能な DisplayP3 と言う色域が広いカラースペースを使っています。

これによって、いくつかの Color のメソッドが deprecated になった様です。

Swift Package Manager

マイグレーションが進んでいる様です。

また、 main チャンネルでしか利用出来なかった SPM が、 betastable チャンネルでも利用可能になりました!

Firebaseplus 系のプラグインなどはもう移行が完了しているそうです。

Android

Impeller

デフォルトレンダリングエンジンとして、とうとう Impeller が採用されました!

--no-enable-impeller フラグか、 AndroidManifest.xml の変更でオプトアウトもできる様です。

Edge to Edge

Android 15+のデバイスではデフォルトで Edge-to-edge で描画される様になりました。

Freeform

フリーフォームがサポートされました。

アプリのウィンドウをリサイズすることが可能になり、 SafeAreaMediaQuery に対応するためのプロパティやメソッドが追加されました。

ビルドスクリプト

build.gradle.kts が利用可能になりました。

Kotlin エンジニアには嬉しいサポートですね!

Web

レンダリングがより効率的になったり、 Flutter チームによって開発されたプラグイン/パッケージは全て WebAssembly と互換性を持つ様になりました。

DevTools

DeepLink バリデータ

iOS向けに、ディープリンクのバリデーションツールが追加されました。

データのインポート/エクスポート

  • DevTools に表示しているデータデータをエクスポート
  • ネットワークデータを .har ファイルとしてエクスポート
  • メモリスナップショットのインポート

メモリ関連のデバッグのUX向上

メモリ関連のデバッグをしていて、急に接続が切れたりすると今までであればもう同じ状況は再現出来ずヤキモキしていました。

今後は、最後に表示していたメモリ情報を見ることを再度見ることができる様になりました!

新しい Flutter Inspector

いつも使っている Flutter Inspector がUI刷新して新登場したそうです。

まだ、プレビュー版とのことですがこれはかなり楽しみですね!

WebAssembly の有効化

WebAssembly を有効化する設定が追加されました!

EcoSystem

pub.dev でダウンロード数の表示

pub.dev にダウンロード数が表示される様になりました。

いいねの様な静的な値ではなく、直近のダウンロード数が下記の様に見えるのでパッケージ追加の判断の際に非常に役立ちそうですね。

Pub workspaces

モノレポのための Pub workspaces と言うのが追加されましたが、これは Dart の記事で書きたいと思います。

自動パブリッシュ

自動パブリッシュのための GitHub Actions が追加された様です。

アプリ内課金

iOSmacOS において、StoreKit 1から StoreKit 2 へとアップデートされました。

☕️ 最後に

いかがでしたか?

今回も割と色々なアップデートが入りましたね。

また、近々アップデートするために必要なことをまとめて記事化するので楽しみにしていてくださいね。

誰かのお役に立てば。

Twitterフォローお願いします

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

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

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

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

☕️ Buy me a coffee

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

コメント

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