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]
}
list1・list2という数値のリストを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]
}
同じようにlist1・list2という数値のリストを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]
}
同じようにlist1・list2という数値のリストを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つ入っていて、list2はnullです。
結合するときに「...?」をつけることで、エラーにならずに結合されます。
「...?」を使えば、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]
}
list1・list2という数値のリストを2つ作っています。
そして、「List.of(list1)」でlist1のコピーを作成し、作成したコピーに対してlist2リストを追加しています。
そのあとに、結果をresult変数に格納して出力しています。
使いどころ
- 元のリストを変更したくない
- 明示的にコピーを作りたい場合
どの方法を使うべき?(使い分けまとめ)
| 方法 | 元のリスト | 特徴 | おすすめ用途 |
|---|---|---|---|
+ |
変更しない | シンプル | 軽量な結合 |
addAll() |
変更する | 高速 | ページング・追加処理 |
... |
変更しない | Flutter向き | Widget / UI |
List.of() |
変更しない | 明示的コピー | 安全性重視 |
まとめ
Dart(Flutter)でリストを結合・連結する方法は複数ありました。
- 元のリストを変更したくない →
+/... - 既存リストに追加したい →
addAll() - FlutterのUI構築 → スプレッド演算子が便利
用途に応じて使い分けていきましょう。

コメント