Dartでリストを結合・連結する方法!【Flutter対応】

Dart(Flutter)でリスト(配列)を結合・連結する方法について解説します。

Flutterアプリ開発では、複数のリストをまとめたい場面がよくあります。
例えば、APIのレスポンスを結合したり、ページングしたデータをリストに追加したりするケースです。

※ 載せているコードはFlutter 3.29.3 / Dart 3.7.2で動作を確認しています。

Dartでリストを結合・連結する主な方法!

Dartでリストを結合する方法は、主に次の4つがあります。

  • + 演算子
  • addAll()
  • スプレッド演算子(...
  • List.of() / toList()

順番に見ていきましょう。

+演算子でリストを結合する(新しいリストを作成)

もっともシンプルなのが、+ 演算子を使う方法です。

void main() {
  final list1 = [1, 2, 3];
  final list2 = [4, 5, 6];

  final result = list1 + list2;

  print(result); // [1, 2, 3, 4, 5, 6]
}

list1list2という数値のリストを2つ作っています。
次の処理で、+演算子を使うことで結合して、結果をresult変数に格納して出力しています。

ポイント

  • 新しいリストが作成される
  • 元のリスト、list1やlist2は変更されない
  • 読みやすく、シンプル

UI表示用のデータなど、元データを保持したい場合におすすめです。

addAllでリストを連結する(元のリストを変更)

既存のリストに要素を追加したい場合は、addAll()メソッドを使います。

void main() {
  final list1 = [1, 2, 3];
  final list2 = [4, 5, 6];

  list1.addAll(list2);

  print(list1); // [1, 2, 3, 4, 5, 6]
}

同じようにlist1list2という数値のリストを2つ作っています。
その後に、list1からaddAllメソッドを呼び出して、list2を渡しています。

これで、list1リストにlist2のリストが追加されます。
元のlist1リスト追加されるという挙動になるので気をつけましょう。

ポイント

  • 元のリスト、list1自体が変更される
  • 新しいリストは作られない
  • パフォーマンス面で有利な場合がある

よくある使用例

  • ページング処理でリストを追加
  • API取得データを既存リストに追記
items.addAll(newItems);
setState(() {});

Flutterでこのパターンを使うことがあります。

スプレッド演算子(...)でリストを結合する

Flutter開発で非常によく使われるのが、スプレッド演算子です。

void main() {
  final list1 = [1, 2, 3];
  final list2 = [4, 5, 6];

  final result = [...list1, ...list2];

  print(result); // [1, 2, 3, 4, 5, 6]
}

同じようにlist1list2という数値のリストを2つ作っています。
そのあとに、リストに「...」をつけて、新しいリストとして2つのリストを展開しています。

これで結合された結果がresultに格納されます。

メリット

  • 可読性が高い
  • Widgetリストとの相性が良い
  • 新しいリストを作成できる

null安全に結合する(...?)

Flutterでは、リストが null の可能性がある場合も多いです。

final List<int>? list1 = [1, 2];
final List<int>? list2 = null;

final result = [
  ...?list1,
  ...?list2,
];

print(result); // [1, 2]

list1には数値が2つ入っていて、list2nullです。
結合するときに「...?」をつけることで、エラーにならずに結合されます。

...?」を使えば、nullチェック不要で安全に結合できます。

List.ofを使った結合

明示的にコピーを書きたい場合に使える方法です。

void main() {
  final list1 = [1, 2, 3];
  final list2 = [4, 5, 6];

  final result = List.of(list1)..addAll(list2);

  print(result); // [1, 2, 3, 4, 5, 6]
}

list1list2という数値のリストを2つ作っています。
そして、「List.of(list1)」でlist1のコピーを作成し、作成したコピーに対してlist2リストを追加しています。
そのあとに、結果をresult変数に格納して出力しています。

使いどころ

  • 元のリストを変更したくない
  • 明示的にコピーを作りたい場合

どの方法を使うべき?(使い分けまとめ)

方法 元のリスト 特徴 おすすめ用途
+ 変更しない シンプル 軽量な結合
addAll() 変更する 高速 ページング・追加処理
... 変更しない Flutter向き Widget / UI
List.of() 変更しない 明示的コピー 安全性重視

まとめ

Dart(Flutter)でリストを結合・連結する方法は複数ありました。

  • 元のリストを変更したくない → + / ...
  • 既存リストに追加したい → addAll()
  • FlutterのUI構築 → スプレッド演算子が便利

用途に応じて使い分けていきましょう。

コメント