Dartでリストが空かどうか判定する方法!【Flutter対応】

Dart(Flutter)でリストが空かどうかを判定する方法についてまとめています。
この記事では下記の内容を確認してみました。

  • isEmpty を使った判定
  • isNotEmpty を使った判定
  • length == 0 を使った判定(非推奨)
  • nullableなリストへの対応

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

isEmpty・isNotEmptyとは?

isEmptyisNotEmptyは、DartのListクラスに用意されているプロパティです。
リストに要素が入っているかどうかをかんたんに確認できます。

よく使いそうなシーンとしては、APIから取得したデータが空のときに「データがありません」と表示したい場合などが挙げられます。

isEmpty を使った判定

isEmpty を使うことで、リストが空かどうかを確認できます。

void main() {
  List<String> fruits = [];

  if (fruits.isEmpty) {
    print('リストは空です');
  } else {
    print('リストにデータがあります');
  }
}

isEmpty はリストの要素数が空のとき true を返すプロパティです。
シンプルで読みやすいので、基本的にはこちらを使うと良いかと思います。

結果を確認すると、下記のようになりました。

リストは空です

リストが空なので、isEmptytrue になっているのを確認できます。

isNotEmpty を使った判定

「リストにデータがあるときだけ処理したい」という場合は、isNotEmpty を使うことができます。

void main() {
  List<String> fruits = ['apple', 'banana'];

  if (fruits.isNotEmpty) {
    print('最初の要素: ${fruits[0]}');
  }
}

isNotEmptyisEmpty の逆で、要素が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.isEmptytrue のとき「データがありません」を表示し、データがある場合は ListView.builder でリスト表示しています。
FlutterのUIでよく使われるパターンなので、覚えておくと便利かと思います。

終わりに

Dartでリストが空かどうかを判定する方法をまとめてみました。

基本は isEmptyisNotEmpty を使うのがシンプルでわかりやすいかと思います。
nullableなリストを扱う場合は、null チェックをセットで行うようにすると安全です。

公式ドキュメントにも詳しい情報が載っているので、気になる方は一度確認してください。
Dart公式ドキュメント – List class

コメント