简体   繁体   English

如何在下拉列表中获取所选选项的状态并在 Firebase 中显示

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

I have a user input and two select option dropdowns.我有一个用户输入和两个选择选项下拉列表。 I retrieved the displayName (user input value) from the state and displayed it in Firestore db, however, I can't get the selected options ( selectedItemA and selectedItemB ) from the state and display them in the db.我从状态中检索了displayName (用户输入值)并将其显示在 Firestore 数据库中,但是,我无法从状态中获取选定的选项( selectedItemAselectedItemB )并将它们显示在数据库中。

How can I get these values ( selectedItemA and selectedItemB ) displayed in the db?如何在数据库中显示这些值( selectedItemAselectedItemB )?

state状态

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
    }),
  );
}

profile screen个人资料屏幕

@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});
}
         

I solved it by adding state.selectedItemA = selectedItemA.name;我通过添加state.selectedItemA = selectedItemA.name;解决了它state.selectedItemA = selectedItemA.name; as follows:如下:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM