firebase - 如何在下拉列表中获取所选选项的状态并在 Firebase 中显示
问题描述
我有一个用户输入和两个选择选项下拉菜单。我displayName
从状态中检索(用户输入值)并将其显示在 Firestore 数据库中,但是,我无法从状态中获取选定的选项(selectedItemA
和selectedItemB
)并将它们显示在数据库中。
我怎样才能让这些值(selectedItemA
和selectedItemB
)显示在数据库中?
状态
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;
如下解决了它:
setState(() {
selectedItemA = value;
});
state.selectedItemA = selectedItemA.name;
}),
推荐阅读
- python - Holoviews 曲线中的关键尺寸用于在字典中查找值
- android - 在 Android 的 Webview 中嵌入 Spotify 无法正常工作
- c# - C# 将时间戳添加到 PKCS#7 CMS 数字签名
- python - Python:获取列表的可能性并更改循环数
- laravel - 如何使用 FilePond 上传图片?
- bash - 使用 bash 在 n 斜杠之间捕获文本
- python - TypeError的解决方法是什么:QTreeWidget.setModel() is a private method
- node.js - NodeJS 向 Laravel 服务器发送请求错误
- swift - 界面构建器和以编程方式创建的视图之间的自动布局行为不一致
- python - 使用汤 Python 在 google playstore 中查找所有 jscontroller div