【问题标题】:DropdownButton cause null item exceptionDropdownButton 导致空项目异常
【发布时间】:2020-05-11 20:52:32
【问题描述】:

DropdownButton 导致 null 异常,因为我在值名称参数中传递字符串变量。

  String diseases = "Select a disease";

DropdownButton<String>(
    value: diseases,
    items: model.diseases
   .map((String value) {
    return DropdownMenuItem<
    String>(
    value: value,
    child: Text(value),
     );
     }).toList(),
     onChanged: (d) {
     setState(() {
     diseases = d;
     print(
     diseases.toString());
     });
     },
     )

如果我使用数组 value:diseases 中的第一个选定元素(按 value:model.diseases[0]),它工作正常,如果我使用它也工作正常将 model.diseases[0] 的值更改为“疾病”后的 hotreload

════════ 小部件库捕获的异常 ═══════════════════════════════════抛出以下断言 构建 Builder(脏):'package:flutter/src/material/dropdown.dart': 断言失败:第 608 行 pos 15:'items == null ||项目.isEmpty || 值 == 空 || items.where((DropdownMenuItem item) => item.value == value).length == 1': 不正确。

要么断言表明框架本身存在错误,要么我们 应在此错误消息中提供更多信息 帮助您确定并解决根本原因。在任一情况下, 请在 GitHub 上提交错误报告此断言:
https://github.com/flutter/flutter/issues/new?template=BUG.md

【问题讨论】:

  • 我首先检查是否 (model.diseases!=null?Dropdownbutton(....) .it not null ,我检查了它

标签: flutter


【解决方案1】:

错误是因为您提供的默认值不存在于值列表中,如果您想在选择任何值之前在下拉菜单中显示标签,请将初始值设置为 null 并使用下拉菜单小部件的提示属性

    String diseases;

DropdownButton<String>(
    hint: Text("Select a disease"),
    value: diseases,
    items: model.diseases
   .map((String value) {
    return DropdownMenuItem<
    String>(
    value: value,
    child: Text(value),
     );
     }).toList(),
     onChanged: (d) {
     setState(() {
     diseases = d;
     print(
     diseases.toString());
     });
     },
     )

【讨论】:

  • 你是对的,需要将初始值设置为null,但真的很奇怪。
  • hint + null for value 的组合可以解决问题。如果没有提示,将 value 设置为 null 将引发异常。
猜你喜欢
  • 2017-11-02
  • 1970-01-01
  • 2014-04-02
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多