List 颤振:所选值不显示在下拉列表中
我正在填充SQLite数据库中的城市名称,并尝试显示为下拉列表。我通过遵循一个教程来实现它,但有一个小问题。所选值不会显示在下拉列表中,它将继续显示默认提示值。但是,我能够分配和检索正确的选定值 这是我的密码: 城市,飞镖 “生成代码”下拉列表中的小部件生成: 控制台中的错误: 取消对此值的注释:\ u city,在显示中添加相同错误显示错误8次,而不是下拉列表 问题: 如何解决此问题? 如何从列表中设置默认值?默认情况下将选择哪个选项List 颤振:所选值不显示在下拉列表中,list,flutter,dart,drop-down-menu,sqflite,List,Flutter,Dart,Drop Down Menu,Sqflite,我正在填充SQLite数据库中的城市名称,并尝试显示为下拉列表。我通过遵循一个教程来实现它,但有一个小问题。所选值不会显示在下拉列表中,它将继续显示默认提示值。但是,我能够分配和检索正确的选定值 这是我的密码: 城市,飞镖 “生成代码”下拉列表中的小部件生成: 控制台中的错误: 取消对此值的注释:\ u city,在显示中添加相同错误显示错误8次,而不是下拉列表 问题: 如何解决此问题? 如何从列表中设置默认值?默认情况下将选择哪个选项 您可以用一种简单的方法来完成,只需创建一个简单的字符串列表
您可以用一种简单的方法来完成,只需创建一个简单的字符串列表并将该列表传递到下拉菜单 以下是方法: 更新getCitiesList函数:
Future<List<String>> getCitiesList() async {
Database db = await instance.database;
final citiesData = await db.query(tblCities);
if (citiesData.length == 0) return null;
return citiesData.map((Map<String, dynamic> row) {
return row["name"] as String;
}).toList();
}
snapshot.data中是否有重复的城市?如果你增加了价值:\你什么时候有例外?初始加载时或更改选定值后?否,没有重复项。目前,名单上只有两个城市。它发生在两个事件上,initial load+onChanged。因此,在文件dropdown.dart行620中调试应用程序,并检查断言失败的原因,我的意思是为什么items==null | | | items.isEmpty | | value==null | | items.whereDropdownMenuItem=>item.value==value.length==1不是真的我想把id存储到我的数据库中,但我得到的是字符串,所以你能帮我如何同时获取id和名称。@Tarunshama我不确定,但我想从数据库中同时获取id和名称,如果是这样,则可以通过如下方式更新getCitiesList函数的return语句来完成:return row[id].toString+row[name]as String;。它将构建一个ID名称的映射。
Future<List<Cities>> getCitiesList() async {
Database db = await instance.database;
final citiesData = await db.query('cities');
if (citiesData.length == 0) return null;
List<Cities> citiesList = citiesData.map((item) {
return Cities.fromMap(item);
}).toList();
return citiesList;
}
//these are defined above in the code
Cities _city;
final databaseHelper = DatabaseHelper.instance;
FutureBuilder<List<Cities>>(
future: databaseHelper.getCitiesList(),
builder: (BuildContext context, AsyncSnapshot<List<Cities>> snapshot) {
if (!snapshot.hasData) return CircularProgressIndicator();
return DropdownButton<Cities>(
items: snapshot.data
.map((city) => DropdownMenuItem<Cities>(
child: Text(city.name),
value: city,
))
.toList(),
onChanged: (Cities value) {
setState(() {
_city = value;
});
},
isExpanded: true,
// value: _city, //uncommenting this line breaks the layout
hint: Text('Select City'),
);
},
),
'package:flutter/src/material/dropdown.dart': Failed assertion: line 620 pos 15: 'items == null || items.isEmpty || value == null || items.where((DropdownMenuItem<T> item) => item.value == value).length == 1': is not true.
Future<List<String>> getCitiesList() async {
Database db = await instance.database;
final citiesData = await db.query(tblCities);
if (citiesData.length == 0) return null;
return citiesData.map((Map<String, dynamic> row) {
return row["name"] as String;
}).toList();
}
//initialize these at top
List<String> _citiesList = <String>[];
String _city;
void _getCitiesList() async {
final List<String> _list = await databaseHelper.getCitiesList();
setState(() {
_citiesList = _list;
});
}
DropdownButtonHideUnderline(
child: DropdownButton<String>(
value: _city,
items: _citiesList.map((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
onChanged: (String newValue) {
setState(() {
_city = newValue;
});
},
)),