Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 颤振:所选值不显示在下拉列表中_List_Flutter_Dart_Drop Down Menu_Sqflite - Fatal编程技术网

List 颤振:所选值不显示在下拉列表中

List 颤振:所选值不显示在下拉列表中,list,flutter,dart,drop-down-menu,sqflite,List,Flutter,Dart,Drop Down Menu,Sqflite,我正在填充SQLite数据库中的城市名称,并尝试显示为下拉列表。我通过遵循一个教程来实现它,但有一个小问题。所选值不会显示在下拉列表中,它将继续显示默认提示值。但是,我能够分配和检索正确的选定值 这是我的密码: 城市,飞镖 “生成代码”下拉列表中的小部件生成: 控制台中的错误: 取消对此值的注释:\ u city,在显示中添加相同错误显示错误8次,而不是下拉列表 问题: 如何解决此问题? 如何从列表中设置默认值?默认情况下将选择哪个选项 您可以用一种简单的方法来完成,只需创建一个简单的字符串列表

我正在填充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;
      });
      },
)),