Dart 3.10 の Dot Shorthands を Flutter で試してみた

Dart 3.10 の Dot Shorthands を Flutter で試してみた

2026.04.02

西田@リテールアプリ共創部マッハチームです。

Dart 3.10(2025年11月、Flutter 3.38 と同時リリース)で導入された Dot Shorthands は、enum 値や static メンバー、コンストラクタの型名を省略できる新構文です。

試しに Flutter 3.41flutter 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),
),

ThemeDatacolorScheme パラメータが 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.blueColors は、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;

IconsIconData 型の 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 (存在しない)

ColorsIcons は 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 enum
  • EdgeInsets.all() / .symmetric() 等の静的ファクトリ
  • コンストラクタのデフォルト引数

従来通り書く必要がある場面:

  • Colors.xxx(Color 型の static メンバーではない)
  • Icons.xxx(IconData 型の static メンバーではない)

ルールは「コンテキスト型自身の static メンバーかどうか」。これさえ押さえておけば、迷わず使いこなせるはずです。

この記事が誰かの役に立てば幸いです。

参考

この記事をシェアする

関連記事