Dartで実装しているFlutterアプリで実行中に起きたエラーです。なんだかんだでかなり手こずったので、デバッグ内容の備忘録です。

エラー内容

There should be exactly one item with [DropdownButton]'s value: . Either zero or 2 or more [DropdownMenuItem]s were detected with the same valueDartのDropdownButton

エラー内容ですが、読んでいてもよくわかりません。結構抽象的な文章ですが、いろいろな症状でこのエラーが出るみたいです。アプリ上で以下のように表示されます。

原因

プルダウンでプルダウンする前に表示されている値valueがなかったり、複数あるときに出るみたいですが、自分の場合はプルダウンの選択肢itemsのリストにitemsの文字列がなかったことが原因でした。

itemsのリストが別のプルダウンで選択した内容によって変化する場合、itemsのリスト中身に現在のvalue値がないとエラーが出ます。

具体的には都道府県を選択した後に市町村を選ばせるという処理ですが、デフォルトの値が都道府県は北海道と函館市で例えば山形県を選択したあとに、itemsは山形の市町村になるのにvalueが函館市のままだと、山形に函館はないよとなってエラーがでます。

Screenshot

解決策

ということで、1つ目のプルダウンである都道府県が選択されて、itemsの対応する市町村のリストを更新したら、2つ目のプルダウンでデフォルトで選択されているvalueもついでに更新してください。

onChanged: (String? prefecture) {
    setState(() {
    // 1つめのプルダウンで選択された都道府県をselectedPrefectureに格納
    selectedPrefecture = prefecture!;
    // 2つめのプルダウンのitemsのリストmunicipalitiesを再設定
    municipalities = dicMunicipalityPrefecture[selectedPrefecture]!;
    // 都道府県が変わったら2つめのプルダウンのValueの市町村もリセット
    selectedMunicipality = municipalities.first;
    });
},

考えてみれば単純ですが、エラーメッセージから原因が特定できずデバッグに手こずりました。

それでは。