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

2024-06-18

我正在从 SQLite 数据库填充城市名称并尝试显示为下拉列表。我通过遵循教程使其工作,但遇到了一个小问题。所选值不会显示在下拉列表中,它继续显示默认提示值。但是,我能够分配和检索正确的选定值。

这是我的代码:

cities.dart

class Cities {
  int id;
  String name;

  Cities(this.id, this.name);

  Cities.fromMap(Map<String, dynamic> json) {
    this.id = json["id"];
    this.name = json["name"];
  }

  Map<String, dynamic> toMap() => {
        'id': null,
        'name': name,
      };
}

Function从数据库检索并返回值:

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

构建的代码在下拉菜单中Widget build:

//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.

取消对此的评论value: _city,在显示中添加相同的错误(显示错误 8 次,而不是下拉列表)。

问题:

  1. 我该如何解决这个问题?
  2. 如何从列表中设置默认值? (默认选择)

您可以以简单的方式做到这一点,只需创建一个简单的字符串列表并将该列表传递到下拉菜单即可。

就是这样:

  1. 更新你的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();
    }
    
  2. 将其添加到您的表单页面中:

    //initialize these at top
    List<String> _citiesList = <String>[];
    String _city;
    
    void _getCitiesList() async {
      final List<String> _list = await databaseHelper.getCitiesList();
      setState(() {
        _citiesList = _list;
      });
    }
    
  3. Call _getCitiesList(); inside initState().

  4. 将其添加到您的build method:

    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;
          });
          },
    )),
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

颤动:所选值不显示在下拉列表中 的相关文章

随机推荐

  • 使用 Internet Explorer 和 SSL 时如何启用自动完成功能?

    当以下两个条件都成立时 1 The page was delivered over HTTPS 2 The page was delivered with headers or a META tag that prevents cachin
  • Vim 搜索模式,如果出现则删除到行尾

    我正在尝试在文本文件中搜索特定模式 如果出现这种模式 则意味着该行的其余部分不需要 因此可以删除 我尝试过使用以下命令 但到目前为止还没有成功 s pattern d g pattern d 如果有人有任何建议 他们将不胜感激 would
  • 数据透视表错误 |无效的调用或过程

    我需要一些帮助来解决这个问题 我正在尝试创建一个数据透视表 从第一季度开始 在同一张表中包含一系列数据 第一个 if 语句在那里是因为最后一列并不总是包含标题 所以我将其包含在那里 我希望范围是动态的 因为所制作的表格的大小将根据工作表中数
  • 从 swift 数组创建张量

    这工作正常 import TensorFlow var t Tensor
  • “引擎”和“框架”有什么区别? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我听说这些术语似乎可以互换使用 所以我有点不清楚 请举出例子 这些术语和其他术语看起来确实非常相似 它们是从概念角度命名的 因此可以定
  • Valgrind 对未初始化的字节大喊大叫

    Valgrind 抛出了这个错误 11204 Syscall param write buf points to uninitialised byte s 11204 at 0x4109033 write in lib libc 2 13
  • 如何使用魔杖扭曲图像

    我正在尝试做同样的事情this https stackoverflow com questions 52090350 how to insert image in a mock up老问题但在python using wand 到目前为止我
  • 使用 Symfony 4 命令加载不同的 .env 文件

    env运行 Symfony 4 命令时会解析文件 如果 dotenv 可用 这在开发时工作正常 而且 我想测试我的代码 所以另一个环境 因此我需要加载另一个 env file 我喜欢 Docker 运行容器的方式 docker run e
  • 如何在没有副本的情况下将结构转换为字节数组?

    StructLayout LayoutKind Explicit public struct struct1 FieldOffset 0 public byte a 1 byte FieldOffset 1 public int b 4 b
  • 为什么Java中的FileChannel不是非阻塞的?

    我想编写一个同时写入多个文件的程序 认为通过使用非阻塞模式可以用一个线程来实现 但FileChannel不支持非阻塞模式 有人知道为什么吗 UNIX 不支持文件的非阻塞 I O 请参阅常规文件的非阻塞 I O http www remlab
  • 了解SD卡路径Android的最佳方法

    我需要知道大多数设备中的 SD 卡路径 我实际使用时遇到一些问题 Environment getExternalStorageDirectory 但有些手机无法返回正确的路径 我不知道为什么 检查不同设备和操作系统版本的 SD 卡路径的最佳
  • 为什么有时 npm install 在 mac 上不起作用?

    我在运行命令时创建了nodejs项目npm 安装它因一些错误而失败 同一个项目正在进行中ubuntu系统但是当我克隆这个代码时mac系统并尝试运行 npm install 它失败并出现一些错误 我认为 scrypt 模块有问题 但我不知道确
  • 退出时的 Powerpoint 问题

    我有一些 C 代码 可以打开 Powerpoint 幻灯片 刷新图表 然后退出 这工作正常 除非用户已经打开了 Powerpoint 幻灯片 在这种情况下 一旦 exe 运行 它将关闭他们现有的会话 丢失他们可能所做的任何更改 所以 问题是
  • finish() 和 System.exit(0) 之间的区别

    我说的是android中的编程 早期我以为 finish 关闭当前活动并返回到 Activity 堆栈中的上一个 并且System exit 0 关闭整个应用程序 但是我错了 我做了一个小实验并了解到两者都只会完成当前的 Activity
  • 为什么静态向下转型 unique_ptr 不安全?

    我指的是一个后续问题 向下转型 unique ptr 到 unique ptr https stackoverflow com questions 21174593 downcasting unique ptrbase to unique
  • Matlab dec2bin 给出错误的值

    我正在使用 Matlab 的 dec2bin 将十进制数转换为二进制字符串 但是 我得到了错误的结果 例如 gt gt dec2bin 13339262925365424727 ans 101110010001111010010100111
  • 在 C++ 中检查文件是否存在的最佳方法是什么? (跨平台)

    我已阅读以下答案检查 C 中文件是否存在的最佳方法是什么 跨平台 https stackoverflow com questions 230062 whats the best way to check if a file exists i
  • JavaScript 中的巨大字符串替换?

    我有一个小型 JavaScript 应用程序 可以解析用户放入浏览器中的文件 最近我发现一些非英语字符的问题 此处放置的文件类型使用 Windows 1252 字符集 因此诸如 实际上是通过 我必须将它们全部转换为正确的字符 例如 我得到S
  • 为什么全局变量“名称”更改为字符串? [复制]

    这个问题在这里已经有答案了 当我将数组对象命名为 name 时 类型自动更改为 String 而不是 Array 为什么
  • 颤动:所选值不显示在下拉列表中

    我正在从 SQLite 数据库填充城市名称并尝试显示为下拉列表 我通过遵循教程使其工作 但遇到了一个小问题 所选值不会显示在下拉列表中 它继续显示默认提示值 但是 我能够分配和检索正确的选定值 这是我的代码 cities dart clas