Dart 3.10 の Dot Shorthands を Flutter で試してみた
西田@リテールアプリ共創部マッハチームです。
Dart 3.10(2025年11月、Flutter 3.38 と同時リリース)で導入された Dot Shorthands は、enum 値や static メンバー、コンストラクタの型名を省略できる新構文です。
試しに Flutter 3.41 で flutter create してみたところ、生成されるテンプレートコードに既に Dot Shorthands が使われていました。知らないうちに新構文に触れていた方もいるかもしれません。
本記事では、Flutter アプリの実コードで Dot Shorthands を使いながら、どこで使えて、どこでハマるかを整理します。
Dot Shorthands とは
Dart がコンテキスト(式の期待される型)から型を推論し、型名を省略して .メンバー名 だけで書ける構文です。
// Before
TextAlign align = TextAlign.center;
// After(Dot Shorthand)
TextAlign align = .center;
Dart コンパイラが「この変数は TextAlign 型だな」と分かるので、.center だけで TextAlign.center を解決してくれます。
利用条件
pubspec.yaml の SDK 下限を ^3.10.0 以上に設定する必要があります。
environment:
sdk: ^3.10.0
Flutter で使えるパターン
実際に Flutter アプリを作りながら、Dot Shorthands が使える場面を確認していきます。
1. enum の値アクセス
最も基本的な使い方です。
enum TaskStatus {
todo,
inProgress,
done,
cancelled,
}
// Before
TaskStatus status = TaskStatus.todo;
// After
TaskStatus status = .todo;
2. switch 式での enum マッチング
switch 式との組み合わせが特に強力です。case TaskStatus.todo: のような冗長な記述が不要になります。
String get label => switch (this) {
.todo => '未着手',
.inProgress => '進行中',
.done => '完了',
.cancelled => 'キャンセル',
};
Before と比較してみましょう。
// Before
String get label => switch (this) {
TaskStatus.todo => '未着手',
TaskStatus.inProgress => '進行中',
TaskStatus.done => '完了',
TaskStatus.cancelled => 'キャンセル',
};
型名の繰り返しがなくなり、値とラベルの対応が一目でわかるようになります。
3. 静的コンストラクタ(Named Constructor / Factory)
ColorScheme.fromSeed() のような静的コンストラクタも省略できます。
// Before
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
),
// After
theme: ThemeData(
colorScheme: .fromSeed(seedColor: Colors.blue),
),
ThemeData の colorScheme パラメータが ColorScheme 型であることをコンパイラが知っているので、.fromSeed() で解決できます。
4. Flutter の enum プロパティ
Flutter のウィジェットで頻繁に使う enum プロパティがスッキリします。
// Before
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [...],
)
// After
Column(
crossAxisAlignment: .start,
mainAxisAlignment: .center,
children: [...],
)
実は、flutter create で生成されるテンプレートコードでも mainAxisAlignment: .center のように既に採用されています。
5. EdgeInsets の静的ファクトリ
EdgeInsets は static メソッドが豊富なので、恩恵が大きいです。
// Before
padding: EdgeInsets.all(12),
padding: EdgeInsets.symmetric(horizontal: 16),
padding: EdgeInsets.only(bottom: 4),
// After
padding: .all(12),
padding: .symmetric(horizontal: 16),
padding: .only(bottom: 4),
6. デフォルト引数
コンストラクタのデフォルト値にも使えます。
class Task {
final String title;
final TaskStatus status;
// Before
const Task({required this.title, this.status = TaskStatus.todo});
// After
const Task({required this.title, this.status = .todo});
}
7. 等値比較
左辺の型から右辺を推論できるので、比較式でも使えます。
// Before
if (task.status == TaskStatus.done) { ... }
// After
if (task.status == .done) { ... }
三項演算子内でも動作します。
// Before
decoration: task.status == TaskStatus.done
? TextDecoration.lineThrough
: TextDecoration.none,
// After
decoration: task.status == .done ? .lineThrough : .none,
8. コンストラクタ引数での enum 指定
ウィジェットやモデルの生成時、引数に enum を渡す場面でも使えます。
// Before
const Task(title: 'ブログを書く', status: TaskStatus.inProgress),
// After
const Task(title: 'ブログを書く', status: .inProgress),
ハマりポイント: 使えないパターン
Colors.xxx は省略できない
// これはコンパイルエラー!
Color color = .blue; // Color.blue を探すが、存在しない
Colors.blue の Colors は、Color 型とは別のクラスです。Dot Shorthands はコンテキスト型(ここでは Color)自身の static メンバーを探すので、Color.blue を探しに行きます。しかし Color クラスに blue という static メンバーは存在しません。
// 従来通り書く必要がある
Color color = Colors.blue;
Icons.xxx も省略できない
同じ理由で、Icons.add も省略できません。
// これもコンパイルエラー!
IconData icon = .add; // IconData.add を探すが、存在しない
// 従来通り
IconData icon = Icons.add;
Icons は IconData 型の static メンバーを持つ別のユーティリティクラスです。
なぜ使えないのか
Dot Shorthands の解決ルールは**「コンテキスト型自身の static メンバーを探す」**です。
| 式 | コンテキスト型 | 探す場所 | 結果 |
|---|---|---|---|
TextAlign x = .center |
TextAlign |
TextAlign.center |
✅ OK (enum値) |
EdgeInsets x = .all(8) |
EdgeInsets |
EdgeInsets.all() |
✅ OK (staticメソッド) |
Color x = .blue |
Color |
Color.blue |
❌ NG (存在しない) |
IconData x = .add |
IconData |
IconData.add |
❌ NG (存在しない) |
Colors や Icons は Flutter が提供するユーティリティクラスであり、型そのものではありません。この区別を理解しておくとハマらずに済みます。
flutter create のテンプレートでも採用済み
実際に Flutter 3.41 で flutter create したところ、生成されるカウンターアプリのコードに Dot Shorthands が使われていました。
// flutter create で生成されるコード(Flutter 3.41 で確認)
colorScheme: .fromSeed(seedColor: Colors.deepPurple),
// ...
mainAxisAlignment: .center,
公式テンプレートで採用されていることから、今後は Dot Shorthands が標準的な書き方になっていくと考えられます。
まとめ
Dart 3.10 の Dot Shorthands は、Flutter コードの冗長さを解消してくれる便利な機能です。
積極的に使いたい場面:
- enum の switch 式(最も効果が大きい)
CrossAxisAlignment/MainAxisAlignment等の Flutter enumEdgeInsets.all()/.symmetric()等の静的ファクトリ- コンストラクタのデフォルト引数
従来通り書く必要がある場面:
Colors.xxx(Color 型の static メンバーではない)Icons.xxx(IconData 型の static メンバーではない)
ルールは「コンテキスト型自身の static メンバーかどうか」。これさえ押さえておけば、迷わず使いこなせるはずです。
この記事が誰かの役に立てば幸いです。







