4
DropdownButton Value does not update even after selecting different items.

デフォルト値がnullの場合、エラーメッセージが表示され、デフォルト値(nullではない)を渡すと、他の選択された値に変更されません。

currentCategory は、DropdownButton のデフォルト値として設定されています。

StreamBuilder<QuerySnapshot>(
                    stream: Firestore.instance
                        .collection('categories')
                        .snapshots(),
                    builder: (BuildContext context,
                        AsyncSnapshot<QuerySnapshot> snapshot) {
                      currentCategory = snapshot.data.documents[0];
                      return DropdownButtonHideUnderline(
                        child:
                            new DropdownButtonFormField<DocumentSnapshot>(
                          value: currentCategory,
                          onChanged: (DocumentSnapshot newValue) {
                            setState(() {
                              currentCategory = newValue;
                            });
                            print(currentCategory.data['name']);
                          },
                          onSaved: (DocumentSnapshot newValue) {
                            setState(() {
                              currentCategory = newValue;
                            });
                          },
                          items: snapshot.data.documents
                              .map((DocumentSnapshot document) {
                            return new DropdownMenuItem<DocumentSnapshot>(
                              value: document,
                              child: Text(
                                document.data['name'],
                              ),
                            );
                          }).toList(),
                        ),
                      );
                    }),

この問題を解決するのを手伝ってください。前もって感謝します。

4

2 に答える 2

0

これはsetState、変更されていてもa を実行するたびcurrentCategoryに、ツリーが再構築され、currentCategory = snapshot.data.documents[0];設定されていないという考えが与えられるためです。

if(currentCategory == null) currentCategory = snapshot.data.documents[0];この条件が満たされた場合にのみ設定されるように置き換えます。

于 2019-01-04T19:19:56.000 に答える