簡體   English   中英

如何在下拉列表中獲取所選選項的狀態並在 Firebase 中顯示

[英]How to get state of selected option in dropdown and display in Firebase

我有一個用戶輸入和兩個選擇選項下拉列表。 我從狀態中檢索了displayName (用戶輸入值)並將其顯示在 Firestore 數據庫中,但是,我無法從狀態中獲取選定的選項( selectedItemAselectedItemB )並將它們顯示在數據庫中。

如何在數據庫中顯示這些值( selectedItemAselectedItemB )?

狀態

class UserInfoState with ChangeNotifier {
  String _displayName;
  dynamic _selectedItemA;
  dynamic _selectedItemB;

  get displayName => _displayName;
  get selectedItemA => _selectedItemA;
  get selectedItemB => _selectedItemB;

  set displayName(String value) {
    _displayName = value;
    notifyListeners();
  }

  set selectedItemA(dynamic value) {
    _selectedItemA = value;
    notifyListeners();
  }

  set selectedItemB(dynamic value) {
    _selectedItemB = value;
    notifyListeners();
  }
}

Future<void> updateUserReportWithUserInfo(UserInfoState state) {
  return Global.reportRef.upsert(
    ({
      'displayName': state.displayName,
      'selectedItemA': state.selectedItemA,
      'selectedItemB': state.selectedItemB
    }),
  );
}

個人資料屏幕

@override
  void initState() {
    super.initState();

    myFocusNode = FocusNode();

    _dropdownMenuItemsA = buildDropDownMenuItemsA(_dropdownItemsA);
    selectedItemA = _dropdownMenuItemsA[0].value;

    _dropdownMenuItemsB = buildDropDownMenuItemsB(_dropdownItemsB);
    selectedItemB = _dropdownMenuItemsB[0].value;
  }
...
List<DropdownMenuItem<ContinentListItem>> _dropdownMenuItemsA;
  ContinentListItem selectedItemA;

  List<DropdownMenuItem<ContinentListItem>> buildDropDownMenuItemsA(
      List listItems) {
    List<DropdownMenuItem<ContinentListItem>> items = List();
    for (ContinentListItem listItem in listItems) {
      items.add(
        DropdownMenuItem(
          child: Text(listItem.name),
          value: listItem,
        ),
      );
    }
    return items;
...
floatingActionButton: FloatingActionButton(
        backgroundColor: deepOrange,
        onPressed: () {
          myFocusNode.requestFocus();
          updateUserReportWithUserInfo(state);
          changeScreen(context, BottomNavBarController());
       ...
      
            TextField(
              focusNode: myFocusNode,
              onChanged: (value) => state.displayName = value,
            ),
            
            DropdownButtonHideUnderline(
              child: DropdownButton(
                  value: selectedItemA,
                  items: _dropdownMenuItemsA,
                  onChanged: (value) {
                    setState(() {
                      selectedItemA = value;
                      print(selectedItemA.name);
                    });
                  }),
            ),
            ...
            
            DropdownButtonHideUnderline(
              child: DropdownButton(
                  value: selectedItemB,
                  items: _dropdownMenuItemsB,
                  onChanged: (value) {
                    setState(() {
                      selectedItemB = value;
                      print(selectedItemB.name);
                    });

class ContinentListItem {
  int value;
  String name;

  ContinentListItem({this.value, this.name});
}
         

我通過添加state.selectedItemA = selectedItemA.name;解決了它state.selectedItemA = selectedItemA.name; 如下:

                    setState(() {
                      selectedItemA = value;
                    });
                    state.selectedItemA = selectedItemA.name;
                  }),

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM