当前位置: 首页 > 知识库问答 >
问题:

飞镖2。X List.cast()不作曲

壤驷经国
2023-03-14

即将推出的Dart 2。X版本需要强大的键入。在处理JSON数据时,我们现在必须将动态类型转换为适当的Dart类型(不是问题)。一个相关的问题忽略从JSArray到List的强制转换失败

问题是。cast()函数似乎无法组合。使用DDC编译并在Chrome浏览器中运行时的原始代码:

Map<String, dynamic> json = { "data": ["a", "b", "c"] };
List<String> origBroken = json["data"].map( (s) => s.toUpperCase() ).toList();

现在接收运行时警告(这将很快是一个错误)

Ignoring cast fail from JSArray to List<String>

所以我添加了。铸造

List<String> docFixBroken = json["data"].cast<String>().map( (s) => s.toUpperCase() ).toList();
List<String> alsoBroken = List.from( (json["data"] as List).cast<String>() ).map( (s) => s.toUpperCase() ).toList();

没有给出警告的代码需要一个临时变量(似乎也可以跳过显式转换):

List<String> temp = json["data"];
List<String> works = temp.map( (s) => s.toUpperCase() ).toList();

那么,如何将强制转换和映射作为单个组合表达式编写呢?我需要它作为单个表达式的原因是,在初始值设定项列表中使用该表达式来设置最终的类变量。


共有1个答案

楚涵润
2023-03-14

我编写了忽略从JSArray到List的强制转换失败

所以我添加了。铸造

List<String> docFixBroken = json["data"].cast<String>().map( (s) => s.toUpperCase() ).toList();
List<String> alsoBroken = List.from( (json["data"] as List).cast<String>() ).map( (s) => s.toUpperCase() ).toList();

不幸的是,由于工厂构造函数(https://github.com/dart-lang/sdk/issues/26391)缺乏泛型类型,List.from不能持久化类型信息。在此之前,您应该/可以使用. toList()来代替:

(json['data'] as List).toList()

所以,重写你的例子:

List<String> docFixBroken = json["data"].cast<String>().map( (s) => s.toUpperCase() ).toList();
List<String> alsoBroken = List.from( (json["data"] as List).cast<String>() ).map( (s) => s.toUpperCase() ).toList();

可以写为:

List<String> notBroken = (json['data'] as List).cast<String>().map((s) => s.toUpperCase()).toList();

希望有帮助!

 类似资料:
  • 我正在尝试使用DART做POST并且我收到了这个错误,现在我只想在服务器端打印消息以确保我收到了它,但我不知道如何解释错误: < li >在服务器端: 【警告】rpc:响应状态码:500头:access-control-allow-credentials:true access-control-allow-origin:* cache-control:no-cache,no-store,must-

  • 显然这是某种例外,但是(1)为什么我们不需要指定它的类型,(2)我可以添加什么来指定它的具体类型?例如,如何以类似于的方式处理多种类型的可能异常?

  • 我一直在使用VSCode进行颤振开发,但没有问题。今天,飞镖分析器突然抱怨说,大多数类都是未定义的,或者目标不存在。 有人见过这个吗? 我已经重新启动了VSCode,重新启动了计算机,卸载了flutter/dart插件,运行flutter dr没有任何问题……我没有想法了。 VSCode问题

  • 问题内容: 请注意:我对使用Polymer对此不感兴趣; 我想使用“纯”飞镖! 我正在尝试为Dart应用程序构建一个简单的登录屏幕,并且很难将两个表单变量(和)发送到服务器端POST: 这是我的主要HTML文件(): 这是我的主要Dart文件(): 当我在浏览器中运行此程序时,我看到登录屏幕出现,但是当我单击登录按钮时,什么都没有发生,并且Firebug在交叉编译,混淆,缩小的JavaScript

  • 我已经在Android studio上安装了颤振,每当我在Android studio上导入新项目时,它会显示“Dart未配置下载Dart SDK或打开Dart设置” 到目前为止,代码还不错。 当我打开省道设置时 Idk在每个项目中尝试了什么,只有在新的颤振项目运行良好时才尝试。颤振版本是2.8.1 Dart版本是2.15.1 Android Studio Arctic Fox | 2020.3.

  • 在flutter示例页面中,有一个名为“将数据发送到新屏幕”的项目。我对第65行的构造函数有一个重新保护的问题。