Dart:如何使用点表示法,未捕获 TypeError 问题

Bas*_*ail 2 dart flutter

我在 dart 中有以下代码,它将字符串解码为 JSON 对象。

import 'dart:convert';

void main(){
  var stringValue = "{\"last_supported\": \"2.00\", \"current\": \"2.00\"}";
  var newValue = json.decode(stringValue);

  print(newValue["last_supported"]);
}
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常,但是当我将 print 语句更改为: print(newValue.last_supported);
它给了我以下异常:
Uncaught TypeError: C.C_JsonCodec.decode$1(...).get$last_supported is not a function

是否可以使用点注释来访问属性,以及如何使用?

Ahm*_*tab 9

我猜你有java脚本背景。

在 dart 中,对象键无法通过点表示法访问.。相反,它们像数组一样通过['key_name'].

所以这就是为什么这条线不起作用

print(newValue.last_supported)
Run Code Online (Sandbox Code Playgroud)

这一个确实

print(newValue["last_supported"]);
Run Code Online (Sandbox Code Playgroud)

dart 中的点表示法仅适用于类实例,不适用于 Map(类似于 JavaScript 对象)。看看以下内容:

class User {
   final String name;
   final int age;
   // other props;

   User(this.name, this.age);
}
Run Code Online (Sandbox Code Playgroud)

现在,当您创建新的用户对象时,您可以使用点符号访问其公共属性

final user = new User("john doe", 20); // the new keyword is optional since Dart v2

// this works
print(user.name);
print(user.age);

// this doesn't work because user is an instance of User class and not a Map.
print(user['name]);
print(user['age]);
Run Code Online (Sandbox Code Playgroud)

有关该关键字的更多信息,您可以在此处new阅读 v2 发行说明。