草庐IT

Dart/flutter : DropdownButton causes exception when value is changed

coder 2023-05-09 原文

我用 DropdownButton 写了一个相当广泛的表格和 TextField小部件。这个概念是我有一个 StatefulWidget ,其中 State<StatefulWidget> 的类包含 2 个返回我要构建的小部件的方法。通过这种方式,我可以轻松访问和使用输入的数据,并将其传递给一个函数来编写一封电子邮件。

但是,当我从选项中选择一个项目时,框架会在重建期间引发异常。我输入了一些日志函数,它显示 setState()方法成功将值保存到 selectedValue变量。

Widget buildMultiChoiceInputRow(var label, List<String> values) {
    final List<String> options = values.toList();
    selection = options.first;

    final dropDownMenuOptions = options.map((String value) {
      return new DropdownMenuItem<String>(
        value: value,
        child: new Text(value),
      );
    }).toList();

    return new Column(
      children: <Widget>[
        new Row(
          children: <Widget>[
            new Expanded(
              child: new Container(
                  padding:
                      const EdgeInsets.only(left: 5.0, top: 2.0, right: 5.0),
                  child: new Text(label, style: commonInfoCardInfoTextBlack16Bold)),
            ),
          ],
        ),
        new Row(
          children: <Widget>[
            new Expanded(
              child: new Container(
                padding: const EdgeInsets.only(left: 5.0, right: 5.0),
                child: new DropdownButton(
                value: selectedValue,
                items: dropDownMenuOptions,
                onChanged: (selection) {
                  setState(() {
                    selectedValue = selection;
                    switch (label) {
                      case labelVirtualAdoption:
                        tempAdoptionType =
                            composeMultiChoiceAnswer(label, selection);
                            print(selection);
                            print(selectedValue);
                        break;
                          case labelAskedAboutSpecies:
                            tempAskedAboutSpecies =
                                composeMultiChoiceAnswer(label, selection);
                            break;
                          case labelHouseOrFlat:
                            tempHouseOrFlat =
                                composeMultiChoiceAnswer(label, selection);
                            break;
                            ....
                          default:
                            break;
                        }
                      });
                    }),
              ),
            )
          ],
        ),
        new Divider(color: Colors.transparent)
      ],
    );
  }

这是一个异常(exception):

I/flutter (20998): The following assertion was thrown building AdoptionInput(dirty, state: AdoptionInputState#3cc80):
I/flutter (20998): 'package:flutter/src/material/dropdown.dart': Failed assertion: line 481 pos 15: 'value == null ||
I/flutter (20998): items.where((DropdownMenuItem<T> item) => item.value == value).length == 1': is not true.

这里是堆栈,显示在重建过程中抛出了异常:

I/flutter (20998): #2      new DropdownButton (package:flutter/src/material/dropdown.dart)
I/flutter (20998): #3      AdoptionInputState.buildMultiChoiceInputRow (package:osszefogasaszanhuzokert/adoptionPageUtilities.dart:443:28)
I/flutter (20998): #4      AdoptionInputState.build (package:osszefogasaszanhuzokert/adoptionPageUtilities.dart:639:11)
I/flutter (20998): #5      StatefulElement.build (package:flutter/src/widgets/framework.dart:3730:27)
I/flutter (20998): #6      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3642:15)
I/flutter (20998): #7      Element.rebuild (package:flutter/src/widgets/framework.dart:3495:5)
I/flutter (20998): #8      BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2242:33)

这个问题看起来很像 a former bug in flutter ,但是如果我尝试初始化 selectionselectedValueinitState() ,第一次构建表单时将抛出相同的异常。

我在这里错过了什么?

最佳答案

DropdownButton 的“值”应设置为“null”或值列表中的一个。

DropdownButton(
      value: null,
      isDense: true,
      onChanged: (String newValue) {
        // somehow set here selected 'value' above whith 
       // newValue
       // via setState or reactive.
      },
      items: ['yellow', 'brown', 'silver'].map((String value) {
        return DropdownMenuItem(
          value: value,
          child: Text(value),
        );
      }).toList(),
    ),

因此对于我的示例 DropdownButton 值应设置为 null 或为“黄色”或“棕色”或“银色”。

关于 Dart/flutter : DropdownButton causes exception when value is changed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50384426/

有关Dart/flutter : DropdownButton causes exception when value is changed的更多相关文章

  1. Flutter 环境变量配置和flutter doctor中的错误解决 - 2

    一、环境变量右键点击我的电脑-属性:然后找到环境变量 1.Android的SDK不在C盘的话需要额外配这个到用户环境变量:ANDROID_HOMED:\AndroidSDK2.然后在系统变量:Path中添加一条这样的值        D:\Flutter\flutter\bin             这个值写flutter包解压的实际地址即可 3.在系统变量中添加两个镜像变量:        变量名:FLUTTER_STORAGE_BASE_URL      变量值:https://storage.flutter-io.cn        变量名:PUB_HOSTED_URL      变量

  2. javascript - Google Dart JavaScript 转换器是否支持旧版浏览器? - 2

    GoogleDartJavaScript转换器支持旧版浏览器还是仅支持现代浏览器? 最佳答案 根据technicaloverviewofitsofficialsite:您将能够以多种方式运行Dart代码:1.将Dart代码转换为可在任何现代浏览器中运行的JavaScript:Chrome、Safari5+和Firefox4+(即将推出更多浏览器支持)。2.在服务器端直接在虚拟机中执行Dart代码3.使用Dartboard在任何浏览器窗口中编写、修改和执行小型Dart程序Dart->JavaScript编译器几乎不可能支持旧版浏览器。

  3. javascript - 用 Dart 可视化? - 2

    我的工作涉及大量的可视化。我一直在用D3.js和JavaScriptInfovistoolkit我最近了解到Dart如何成为开发Web应用程序的新方法。Q1。Dart是否提供任何用于可视化的库(某种级别的D3.js或JavaScriptInfovistoolkit)?Q2。如果我继续使用Dart,我可以使用D3.js吗?/JavascriptInfovistoolkit与Dart一起?编辑:我在互联网上发现wecanuseJavascriptalongwithDart.我经历了DartFAQ,但无法真正找到与可视化库或D3.js本身相关的任何内容。 最佳答案

  4. javascript - Dart vs JavaScript——它们是编译语言还是解释语言? - 2

    Dart被认为是编译语言还是解释语言?同样的问题也适用于JavaScript。问题原因:我去过watchinganinterview与dart的创始人一起,在7:10LarsBak说:"Whenyou[...]inaJavaScriptprogram,youactuallyexecuteJavaScriptbeforeyoustartrunningtherealprogram.InDart,youdon'texecuteanythingbeforethefirstinstructioninmainisbeingexecuted".在我看来,他是在说JavaScript是一种编译型语言,

  5. javascript - Dart js-interop 与 jquery ui - 2

    我是Dart的新手,我在开始使用js-interop库时遇到了问题。我想从jqueryui添加一个slider到我的页面,但我不知道如何从Dart进行slider()设置调用。js-interop是这样做的正确方法吗?对此提供一些帮助将不胜感激。voidmain(){js.scoped((){varslider=query('#slider-range');varoptions=js.map({'range':true,'values':[17,67]});//Thisdoesn'twork.Elementhasnomethodnamedslider.slider.slider(opt

  6. javascript - 处理 DART 中的事件 - 2

    我是DART的新手。我阅读了语言概述并在DART编辑器中检查了示例代码。到目前为止,我找不到如何处理DART中的事件。例如onclick="call_dart_method()".我们如何处理DART中的事件? 最佳答案 这不是你在Dart上的做法在此处查看“事件”部分下的内容:http://www.dartlang.org/articles/improving-the-dom/elem.onClick.listen((event)=>print('click!')); 关于javasc

  7. javascript - 相当于 Array.prototype.map() 的 Dart? - 2

    我尝试从Dart中的map列表中获取ID。在JavaScript中会是这样的:varlist=[{id:3,name:'third'},{id:4,name:'fourth'}];varresult=list.map(function(x){returnx.id;});这应该给出结果[3,4]在Dart中是否有一种简单的方法可以做到这一点?到目前为止,我能够做到这一点(在Dart中):varlist=[{'id':3,'name':'third'},{'id':4,'name':'fourth'}];varresult=list.map((x)=>x['id']);结果是“Mapped

  8. javascript - dart 可以生成可读的 javascript 库吗? - 2

    目标我想写一个javascript库(框架),但需要OOP和mixins。尝试使用typescript,但它不支持混入(手册上说支持,但编译器/规范没有任何与混入相关的内容)。typescript在typescript中,以下代码:classGreeter{greeting:string;constructor(message:string){this.greeting=message;}greet(){return"Hello,"+this.greeting;}}编译为:varGreeter=(function(){functionGreeter(message){this.gree

  9. javascript - Angular Dart 到 JavaScript 结果对于生产来说太大了吗? - 2

    AngularDart应用程序(什么都不做)的最小/最小编译和缩小JavaScript大小大约为650KB是否正确?这对于移动应用来说太多了,对于普通应用来说甚至太大了。有谁知道如何让它小于100KB? 最佳答案 “最小的编译和缩小的Javascript”今天是190KB。我们正在跟踪该数字并关注部署规模和性能。如果您看到650KB,则可能某处存在错误;如果您可以在https://github.com/angular/angular.dart提供问题的详细信息我们将不胜感激。此外,如果您可以分享您的用例和要求,这将有助于我们设计系统

  10. javascript - 将 dart 编译为 javascript 的限制是什么? - 2

    我知道,该Dart仍处于技术预览阶段。Dart也可以编译成JavaScript。但是将dart编译为javascript的限制是什么?Dart必须在语言中具有一些特定的功能或概念,而不能仅仅将其翻译成JavaScript代码吗?原因是,一个friend问我Dart是否可以将所有可能的东西都编译成JavaScript或那个,例如5%的语言元素(你知道,非常酷的改进内容)将无法编译。http://www.dartlang.org 最佳答案 我的初创公司在Dart中开发了一个超过50,000行的应用程序,到目前为止,在将Dart编译为Ja

随机推荐