更改两级 DropdownButtonFormField :应该只有一项具有 [DropdownButton] 的值

2024-03-16

尽管这里有多个条目似乎有类似的问题,但我无法让它真正发挥作用。

我有两个依赖的 DropdownButtonFormFields 的设置,其中第二个在第一个列表更改后更改为另一个列表。

  1. 我能够将问题分解为第二个选择的选定值的持续剩余。我预计它会随着我在代码中提供的值信息而改变。

提供以下错误

════════ Exception caught by widgets library ═══════════════════════════════════

There should be exactly one item with [DropdownButton]'s value: GreenBananas. 

Either zero or 2 or more [DropdownMenuItem]s were detected with the same value
'package:flutter/src/material/dropdown.dart':
Failed assertion: line 827 pos 15: 'items == null || items.isEmpty || value == null ||
              items.where((DropdownMenuItem<T> item) {
                return item.value == value;
              }).length == 1'
The relevant error-causing widget was
    DropdownButtonFormField<String> 
lib/…/testing/test.dart:242
══════════════════════════════════════════════════════════════════

我简化了示例并重建了错误,以便更好地分析问题并从你们那里获得更有价值的输入:)

class InputRowTest extends StatefulWidget {
  @override
  _InputRowTestState createState() => _InputRowTestState();
}

class _InputRowTestState extends State<InputRowTest> {
  List<String> list1 = ['Apples', 'Bananas', 'Peaches'];

  List<String> list1_1 = ['GreenApples', 'RedApples', 'YellowApples'];

  List<String> list1_2 = [
    'YellowBananas',
    'BrownBananas',
    'GreenBananas',
    'GreenApples'
  ];

  List<String> list1_3 = [
    'RedPeaches',
    'YellowPeaches',
    'GreenPeaches',
    'GreenApples'
  ];

  List<String> _fromparent;
  int _fromparentint;
  //String selected;

  @override
  void initState() {
    _fromparent = list1_1;
    _fromparentint = 0;
    //selected = list1[0];
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    List<List<String>> subLists = [list1_1, list1_2, list1_3];
    _fromparent = subLists[_fromparentint];

    DropdownButtonFormField ddff = DropdownButtonFormField(
      //value: selected, //list1[0],
      //items: list1.map((category) {
      value: _fromparent[0], //Seems this value wont change.
      items: _fromparent.map((category) {
        return DropdownMenuItem(
          value: category,
          child: Container(
            child: Text(category),
          ),
        );
      }).toList(),
      onChanged: (val) => print(val),
    );

    return Center(
      child: Row(
        children: <Widget>[
          Expanded(
            child: DropdownButtonFormField(
              value: list1[0],
              items: list1.map((category) {
                return DropdownMenuItem(
                  value: category,
                  child: Container(
                    child: Text(category),
                  ),
                );
              }).toList(),
              onChanged: (val) {
                setState(() {
                  //selected = val;
                  _fromparentint = list1.indexOf(val);
                });
              },
            ),
          ),
          Expanded(
            child: ddff,
          ),
        ],
      ),
    );
  }
}

我找到了解决该问题的方法。

看起来 Flutter 并没有重建 DropDownFormField,而是认为保留它是完全可以的。在这种情况下,它也相当顽固。

由于我找不到重建场的方法,所以我创建了一个非常令人讨厌但有效的方法。还需要一些打磨。

我基本上让 flutter 相信我每次都提供不同的小部件。

class InputRowTest extends StatefulWidget {
  @override
  _InputRowTestState createState() => _InputRowTestState();
}

class _InputRowTestState extends State<InputRowTest> {
  List<String> list1 = ['Apples', 'Bananas', 'Peaches'];

  List<String> list1_1 = ['GreenApples', 'RedApples', 'YellowApples'];

  List<String> list1_2 = [
    'YellowBananas',
    'BrownBananas',
    'GreenBananas',
    'GreenApples'
  ];

  List<String> list1_3 = [
    'RedPeaches',
    'YellowPeaches',
    'GreenPeaches',
    'GreenApples'
  ];

  List<String> _fromparent;
  int _fromparentint;
  Widget ddbff;
  var selected;
  bool chance;

  Widget ddff(List<String> list, bool chance) {
    return (chance)
        ? DropdownButtonFormField(
            value: list[0], //Seems this value wont change.
            items: list.map((category) {
              return DropdownMenuItem(
                value: category,
                child: Container(
                  child: Text(category),
                ),
              );
            }).toList(),
            onChanged: (val) {
              print(val);
            },
          )
        : Container(
            child: DropdownButtonFormField(
              value: list[0], //Seems this value wont change.
              items: list.map((category) {
                return DropdownMenuItem(
                  value: category,
                  child: Container(
                    child: Text(category),
                  ),
                );
              }).toList(),
              onChanged: (val) {
                print(val);
              },
            ),
          );
  }

  @override
  void initState() {
    _fromparent = list1_1;
    _fromparentint = 0;
    selected = list1_1[0];
    chance = true;
    ddbff = ddff(_fromparent, chance);
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    List<List<String>> subLists = [list1_1, list1_2, list1_3];
    _fromparent = subLists[_fromparentint];

    chance = !chance;
    ddbff = ddff(_fromparent, chance);

    return Center(
      child: Container(
        child: Row(
          children: <Widget>[
            Expanded(
              child: DropdownButtonFormField(
                value: list1[0],
                items: list1.map((category) {
                  return DropdownMenuItem(
                    value: category,
                    child: Container(
                      child: Text(category),
                    ),
                  );
                }).toList(),
                onChanged: (val) {
                  setState(() {
                    _fromparentint = list1.indexOf(val);
                  });
                },
              ),
            ),
            Expanded(
              child: ddbff,
            ),
          ],
        ),
      ),
    );
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改两级 DropdownButtonFormField :应该只有一项具有 [DropdownButton] 的值 的相关文章

  • 在透明背景的 flutter 上播放视频

    我在 Blender 上做了一些复杂的 3D 动画 我想在 flutter 上播放它们 问题是 当我将动画导出到视频并将其放在我的 flutter 应用程序上时 透明背景消失了 我使用 video player 在 flutter 上播放视
  • 提交后清除 React 中的表单

    我试图在使用 Axios 创建表单提交后清除表单数据 消息处理良好 响应记录到页面 但每个文本字段中的数据在提交后仍保留在页面上 我尝试添加一个resetForm函数 我将表单设置回原来的空白状态 但这不起作用 import React C
  • 如何在 Flutter 中创建网络图像列表

    我使用 Carousel Pro 包在屏幕上实现轮播 在这个 Carousel 类中它需要一个图像列表 Carousel 类的语法是 Carousel images NetworkImage https cdn images 1 mediu
  • setState 没有在 Dart / Flutter 中重新加载状态?

    我遵循了 Google CodeLabs 的 Flutter 教程 Part 1 https codelabs developers google com codelabs first flutter app pt1 Part 2 http
  • 如果没有 Scaffold,Material App 样式将无法工作

    我正在尝试创建一个没有 Scaffold 元素的 Material design 应用程序 这是纯粹的默认应用程序 import package flutter material dart void main gt runApp MyApp
  • android studio 中没有flutter SDK

    我正在尝试跑步Flutter在 Android studio 上 但我有一个解决此错误的问题 我正在使用所有东西的最新版本 例如 dart 和 flutter 或插件 Flutter 用户应该运行flutter packages get代替
  • 如何在 PHP、HTML 表单和 Javascript 之间传递布尔值

    我有一个 PHP 程序 它使用 HTML 表单并使用 JavaScript 进行验证 HTML 表单中有一个隐藏字段 其中包含一个布尔值 该值由 PHP 设置 由 JavaScript 在提交时进行验证 然后传递到另一个 PHP 页面 当我
  • Symfony2 - ReferencedColumnName id 为空

    我要放弃食谱文章了表单集合 http symfony com doc current cookbook form form collections html但是 当尝试将其保留到数据库时 我收到约束冲突错误 引用的列名称 id 为空 SQL
  • 根据上一个 Flutter 的选择更改下拉按钮的选择

    我有2个DropdownButtonFormField我在那里可以选择汽车 我需要根据用户从 DropdownButtonFormField 中的第一个选择中选择的汽车型号来更改按钮的第二个选择 即 如果用户在第一个选择中选择梅赛德斯 则在
  • 将文本字段输入限制为仅数字

    我搜索过谷歌 但我能找到的所有解决方案都非常复杂和冗长 我需要的是将我正在进行的调查中的文本字段的输入限制为仅数字 最快 最干净的方法是什么 我使用的是严格的 HTML 4 01 和 ECMAScript 提前致谢 最快
  • 如何从symfony2中的表单对象获取每个字段的错误消息?

    我按照这个教程http symfony com doc current forms html http symfony com doc current forms html我完美地呈现了我的插入表单 但只有一个问题我无法解决 当表单无效时
  • 如何连接flutter到localhost mysql数据库

    我想将本地主机 mysql 数据库连接到 flutter 但我没有这样做 我尝试了 mysql1 与这些连接 ConnectionSettings host 10 0 2 2 port 3306 user root password roo
  • flutter 检测 url 并显示预览

    我正在尝试制作一个类似于 wats app 的链接预览功能 它有两个部分 从文本字段检测 URL 显示该 URL 的预览 第 2 部分有很多插件可以显示预览 但我一直坚持第 1 部分 即如何检测和解析用户在文本字段中输入的 URL 还有一个
  • 当表单操作转到第三方网站时将数据传递到“谢谢”页面

    我有一个网络表单 它收集用户的邮政编码作为字段之一并将其发布到第三方网站
  • 如何在 Flutter 中开始加载主题

    我希望用户可以在我的应用程序中更改并保存主题颜色 但是 我不知道如何在应用程序开始运行时加载保存的主题颜色 比如我想在下面的评论处直接加载保存的主题颜色 我尝试了共享首选项 但是 SharedPreference 实例需要运行await 这
  • HTML 表单:POST 对象数组

    提交班级名单 一次添加3名学生 每个学生都有最初 最后的年龄 问题 我们如何才能将所有学生放入数组中 students 0 gt Array first gt first name for 0 last gt last name for 0
  • Android 动态添加联系表单

    Hi 我想实现如图所示的表单 不知道他们如何动态添加字段 这是列表视图吗 可扩展列表 用户可以在运行时添加和删除 我已经检查了包含子项目的可扩展列表 但我们在数组中定义子元素 在图像中它们动态添加 任何指南 链接 Thanks Custom
  • flutter - 尝试从子窗口小部件调用 setState 时未调用回调函数

    我正在使用 VoidCallback 从子小部件调用 setState 但回调函数根本没有执行 下面是我的代码的本质 子部件 class TextFormMentorHashtag extends StatefulWidget const
  • PHP 5 的 HTML 表单库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个QuickForm替代品 QF 存在性能问题 例如组合框中的许多选项 我还想要一些更面向对象的东西 比如 Zend Form
  • Rails 3 UJS 干客户端 + 服务器端表单验证

    使用 jQuery 进行表单验证就像向字段添加类名一样简单 使用 Rails 进行表单验证就像将条件放入控制器 和 或模型 中一样简单 我认为应该有一种方法可以编写一次验证并将它们应用到客户端和服务器端 我一直热衷于编写自己的 javasc

随机推荐

  • 如何查看Linux线程的状态?

    如何使用代码而不是工具来检查 Linux 线程的状态 我想知道线程是否正在运行 被锁阻塞或因其他原因而休眠 我知道 Linux 工具 top 可以完成这项工作 但如何在我自己的代码中实现它 谢谢 我认为你应该详细研究 proc http l
  • 对函数体评估感到困惑

    我对以下行为感到困惑Function In 1 InlineCellInMessage Function expr DisplayForm Cell BoxData MakeBoxes expr StandardForm Input Hol
  • XSLT:将平面列表转变为层次结构

    我尝试了解 XSLT 2 0 中的分组功能 我的源文件是
  • Flash/ActionScript 3.0 中的 StackTrace

    我想在代码的任何函数中查看堆栈跟踪 因此我做了类似的事情来调用它并打印堆栈跟踪 public function PrintStackTrace try throw new Error StackTrace catch e Error tra
  • 合并两个多维数组并重新索引所有子数组

    我有两个数组 我想将这两个数组合并为单个数组 请查看下面的详细信息 第一个数组 Array 0 gt Array a gt 1 b gt 2 c gt 3 1 gt Array a gt 3 b gt 2 c gt 1 第二个数组 Arra
  • 我可以将 CSS3 与 XHTML 1.0 一起使用吗?

    我可以将 CSS3 属性与 XHTML 一起使用 还是仅与 HTML5 网页一起使用 HTML版本和CSS之间有关系吗 还是完全没有关系 Thanks 如果浏览器支持 CSS3 和 XHTML 1 0 则可以同时使用两者 这两个标准彼此之间
  • github“网络推送通知”如何工作?

    github 似乎在其 Web 界面上使用轮询服务器进行实时通知 live github com 看起来该技术既不是基于 Websocket 也不是 XHR 轮询 它是如何开发的 他们似乎使用 HTML5 服务器发送事件 一段时间后 我通过
  • 为什么暂存目录也称为 Index/Git Index?

    我对 Git 中的暂存目录 Git Index 的命名感到困惑 叫Index有什么特殊含义吗 为什么不直接称为Cache 或Temp目录以便我们更容易理解呢 对我来说 索引可以帮助我们更快地搜索内容 就像 DBMS 中的索引一样 它与暂存区
  • 如何设置 Amazon S3 存储桶预签名 URL 过期时间(从当前日期算起 1 年内)

    图像上传到 Amazon S3 存储桶 我需要得到一个预签名 URL来自亚马逊服务器 我还想设置该 URL 的到期时间 这最多只需要 17 天 但我无法设置最多 1 年的到期时间 Calendar cal Calendar getInsta
  • 如何 Invoke-Expression 调用带有变量的函数或脚本?

    我使用此脚本收到无效路径错误 buildZIP starmatic echo buildZIP command XXXXXXXXXX L Gopi Prod App ToZipNew ps1 buildZIP Invoke Expressi
  • JPA 配置布尔字段以保留为整数

    在 JPA 中 有一个注释指定布尔字段应保留为整数 我正在使用 OpenJPA 它当前将布尔字段保留为位 我宁愿使用整数 1 或 0 您可以指定列定义 Column name boolColumn columnDefinition INT
  • 导航栏不显示

    这里我有2个看法 欢迎VC WebViewVC First 应用程序代理 calls 欢迎VC通过下面的代码 void presentWelcomeViewController WelcomeViewController welcomeVi
  • 为每个 cURL 请求返​​回 AJAX 结果

    基本上 我的想法是做某种形式的 实时 cURL 结果 正在生产的系统实时结果例如 当执行每个请求时 我将有一个表 其中包含需要通过 cURL 请求访问的网站列表 其中根据每个 cURL 响应的结果 我需要使用 AJAX 将数据发送回我的页面
  • 循环语句的 freemarker 模板

    我想在 freemarker 模板中创建 for 语句 我正在阅读指南http freemarker sourceforge net http freemarker sourceforge net 但只有清单 我如何创建 for 语句或 f
  • 关于将临时绑定到构造函数中的引用成员的虚假警告

    据我所知 如果临时对象绑定到构造函数的初始值设定项列表中的引用成员 则该对象将在构造函数返回时被销毁 However 考虑以下代码 include
  • 使用 jQuery 重新排序 div

    是否可以使用 jQuery 对某些 div 重新排序 我有几个 div 我想根据 div 中的数据索引号在页面加载时重新排序它们 Now div class score 3 div div class score 2 div div cla
  • 如何在 Vagrant 和 Homestead 中回滚 PHP 版本?

    因此 我的公司正在使用 PHP 和 Laravel 为客户进行软件开发 我是公司的新人 正在使用 VirtualBox 设置较新的 Macbook 使用 Homestead 和 Vagrant 设置 Laravel 我已经完成了所有设置 以
  • Lua 中对 Table[] 进行排序

    我有一个 Lua 表 我正在尝试对其进行排序 该表的格式如下 tableOfKills PlayerName NumberOfKills 这意味着 例如 如果我有一个名为 Robin 的玩家总共击杀 8 次 而另一个名为 Jon 的玩家总共
  • TFS2012 - 无法上传大于 5MB 的文件

    我正在虚拟机 Windows Azure 内 上运行 TFS 2012 安装 一切工作正常 除了无法签入大于 5MB 的文件 在客户端 它显示 请求已中止 请求已取消 在服务器端 事件日志包含一条错误消息
  • 更改两级 DropdownButtonFormField :应该只有一项具有 [DropdownButton] 的值

    尽管这里有多个条目似乎有类似的问题 但我无法让它真正发挥作用 我有两个依赖的 DropdownButtonFormFields 的设置 其中第二个在第一个列表更改后更改为另一个列表 我能够将问题分解为第二个选择的选定值的持续剩余 我预计它会