0

API からドロップダウン テーブルを動的に更新しています。時間を選択すると、対応する件名が API から取得されます。

私が時間を切り替えているとしましょう。

5 時間目には被験者 A と B がいて、4 時間目には被験者 B だけがいます。

5 時間は、選択された主題として A で最初に選択されます。

時間 4 を選択すると、API から新しいリストが取得されますが、「項目がドロップダウン ボタン項目リストにありません」というエラーが表示されます。

これは DropDownMenuField の value 属性が原因であることを理解しています。そのため、API からの情報の取得が成功したときに値を null に設定しました。

時間5アイテム画像

時間 5 選択した画像

時間 4 を選択した後のエラー

スニペットは以下のとおりです。

ドロップダウン ボタン:

DropdownButtonFormField<String>(
                    isExpanded: true,
                    style: new TextStyle(
                      fontFamily: "Poppins",
                      fontWeight: FontWeight.w400,
                      color: Colors.black,
                    ),
                    decoration: InputDecoration(
                      contentPadding: const EdgeInsets.all(0),
                      labelText: "Select subject",
                      labelStyle: TextStyle(
                        fontFamily: "Poppins",
                        fontWeight: FontWeight.w200,
                        color: Colors.black,
                      ),
                    ),
                    value: subjectController,
                    onChanged: (value) {
                      setState(() {
                        pk_table =
                        pk_table_array[subject_array.indexOf(value)];
                        required_timestamp = required_timestamp_array[
                        subject_array.indexOf(value)];
                        subjectController = value;
                        buttonActive = true;
                      });
                    },
                    items: _subjectDropDownItems,
                  ),

setState メソッド (API のフェッチが成功したときに呼び出されます):

setState(() {
  subjectController = null;
  buttonActive = true;
  subject_array.forEach((subject) {
    if (subjectController == null) {
      print("updated value");
      subjectController = subject;
    }
    _subjectDropDownItems.add(new DropdownMenuItem(
      child: new Text(subject.toString()),
      value: subject.toString(),
    ));
  });
});

subjectController は State クラスの属性として定義されています。

そして、これはエラーです:

    There should be exactly one item with [DropdownButton]'s value: IT8551B - Web Technology Laboratory B. 
Either zero or 2 or more [DropdownMenuItem]s were detected with the same value

事前に助けてくれてありがとう!

4

2 に答える 2