为什么在 Dart 中为 Map 声明 String 时,该程序会打印错误?

问题描述 投票:0回答:1

所以我目前正在使用 Dart 中的地图。我正在观看一些 YouTube 教程,因为讲师比我的 Udemy 讲师更善于解释。

但是当我尝试使用字符串而不是像以前那样使用 null 访问地图中不存在的值时,它在 Dartpad 上显示错误。所以我理解为什么讲师选择 String 声明,因为也许是从键值映射(字典)中提取该值。

但是我按照他的说明代码进行代码操作,但仍然收到此错误:

Uncaught Error: TypeError: null: type 'JSNull' is not a subtype of type 'String'.

它之前可以工作,但我似乎无法弄清楚为什么他能够毫无问题地运行该程序,但我却无法。

使用集合或列表更容易操作集合中的数据类型。这是我在代码编辑器上出现的错误的屏幕截图。

真正奇怪的是,编译文档没有错误。任何输入都会有帮助,因为我对 Dart 还很陌生。谢谢你

我尝试回到我的代码行,但没有任何效果。我一定是做错了什么,因为当我运行程序时,我不断收到错误。我什至尝试从头开始重新创建该程序,但没有任何改变。

我的代码:

void main() {
  var user = {
    'username': 'peter',
    'password': 'peter123',
    'role': 'admin',
    'staffNr': 9911,
  };

  var username = user['username'];
  print(username);

  user['password'] = 'Peter12345';
  print(user);

  user['password'] = 'Peter12345';
  user['loggedIn'] = true;
  print(user);

  var ipAddress = user['ipAddress'] as String;
  if (ipAddress == null) {
    print('The value is empty');
  } else {
    print(ipAddress.length);
  }
}
string dart maps dartpad
1个回答
0
投票

您的问题如下:

var ipAddress = user['ipAddress'] as String;

问题在于

String
是不可为 null 的类型,并且不允许具有值
null
。因此,由于该元素不在
Map
中,然后您将获得
null
作为值,因此您无法将此
null
类型转换为
String

你应该做的是转换为类型

String?
,这是一个可为空的类型,这意味着它可以是
String
null

  var ipAddress = user['ipAddress'] as String?;
  if (ipAddress == null) {
    print('The value is empty');
  } else {
    print(ipAddress.length);
  }
© www.soinside.com 2019 - 2024. All rights reserved.