Dart(Flutter)でリストが空かどうかを判定する方法についてまとめています。
この記事では下記の内容を確認してみました。
isEmptyを使った判定isNotEmptyを使った判定length == 0を使った判定(非推奨)- nullableなリストへの対応
※ 載せているコードはFlutter 3.29.3 / Dart 3.7.2で動作を確認しています。
isEmpty・isNotEmptyとは?
isEmptyとisNotEmptyは、DartのListクラスに用意されているプロパティです。
リストに要素が入っているかどうかをかんたんに確認できます。
よく使いそうなシーンとしては、APIから取得したデータが空のときに「データがありません」と表示したい場合などが挙げられます。
isEmpty を使った判定
isEmpty を使うことで、リストが空かどうかを確認できます。
void main() {
List<String> fruits = [];
if (fruits.isEmpty) {
print('リストは空です');
} else {
print('リストにデータがあります');
}
}
isEmpty はリストの要素数が空のとき true を返すプロパティです。
シンプルで読みやすいので、基本的にはこちらを使うと良いかと思います。
結果を確認すると、下記のようになりました。
リストは空です
リストが空なので、isEmpty が true になっているのを確認できます。
isNotEmpty を使った判定
「リストにデータがあるときだけ処理したい」という場合は、isNotEmpty を使うことができます。
void main() {
List<String> fruits = ['apple', 'banana'];
if (fruits.isNotEmpty) {
print('最初の要素: ${fruits[0]}');
}
}
isNotEmpty は isEmpty の逆で、要素が1件以上あるときに true を返します。
!fruits.isEmpty と書くより直感的に読めるので、こちらを使うと良いかと思います。
確認してみると、下記のようになりました。
最初の要素: apple
要素が2件で、空ではないので true になって出力されました。
length == 0 を使った判定(非推奨)
length == 0 で要素数を直接比較する方法もあります。
void main() {
List<String> fruits = [];
if (fruits.length == 0) {
print('リストは空です');
}
}
動作はしますが、isEmpty と比べると少し冗長です。
Dartのlintツールでも「isEmpty を使うように」と警告が出ることがあるので、特別な理由がなければ isEmpty を使うようにすると良いかと思います。
nullableなリストへの空チェック
Dart 2.12以降はNull Safetyが導入されているので、リストが null になりうる場合は少し注意が必要です。
void main() {
List<String>? fruits = null;
if (fruits == null || fruits.isEmpty) {
print('リストはnullまたは空です');
}
}
null の状態で fruits.isEmpty を呼び出すと Null check operator used on a null value というエラーが発生します。
|| を使って先に null チェックをしておくことで、安全に判定できます。
確認してみると、値はnullなので、下記のようになりました。
リストはnullまたは空です
APIのレスポンスを扱う場面ではリストが null になるケースもよくあるので、一度確認しておくと良いかと思います。
【Flutter】Widgetでリストの空チェックをしてみる
Flutterでは、リストが空のときに別のWidgetを表示するという場面がよくあります。
isEmpty と三項演算子を組み合わせてみました。
import 'package:flutter/material.dart';
class FruitListPage extends StatelessWidget {
final List<String> fruits;
const FruitListPage({Key? key, required this.fruits}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('フルーツ一覧')),
body: fruits.isEmpty
? const Center(child: Text('データがありません'))
: ListView.builder(
itemCount: fruits.length,
itemBuilder: (context, index) {
return ListTile(title: Text(fruits[index]));
},
),
);
}
}
fruits.isEmpty が true のとき「データがありません」を表示し、データがある場合は ListView.builder でリスト表示しています。
FlutterのUIでよく使われるパターンなので、覚えておくと便利かと思います。
終わりに
Dartでリストが空かどうかを判定する方法をまとめてみました。
基本は isEmpty と isNotEmpty を使うのがシンプルでわかりやすいかと思います。
nullableなリストを扱う場合は、null チェックをセットで行うようにすると安全です。
公式ドキュメントにも詳しい情報が載っているので、気になる方は一度確認してください。
Dart公式ドキュメント – List class

コメント