gpt4 book ai didi

flutter - 试图理解 Dart 中的匿名函数

转载 作者:行者123 更新时间:2023-12-03 03:01:29 24 4
gpt4 key购买 nike

我试图理解行中的代码

list = (json.decode(response.body) as List)
.map((data) => PhotoData.fromJson(data))
.toList();

我有以下问题a) .map 有什么作用?b) 上面代码中的“数据”是什么c) 能否请您将代码简化为长格式,以便我更好地理解它。

完整的功能如下:

_fetchData() async {

http.Response response =
await http.get("https://jsonplaceholder.typicode.com/photos");
print("Fetching data...");
list = (json.decode(response.body) as List)
.map((data) => PhotoData.fromJson(data))
.toList();
setState(() {
isLoading =false;
});
}




factory PhotoData.fromJson(Map<String, dynamic> json) {
return PhotoData( json['id'], json['title'],
json['thumbnailUrl'], json['url']);
}

最佳答案

map是类内部的一个方法 Iterable .自上课 List 工具 EfficientLengthIterable<E>因此它继承了方法 map .

根据docs , map 执行以下操作:

Returns a new lazy Iterable with elements that are created by calling f on each element of this Iterable in iteration order.


这是 map 的实现方法:

Iterable<T> map<T>(T f(E e)) => MappedIterable<E, T>(this, f);

Iterable<T> => 这意味着 map方法将返回一个 Iterable

f(E e) => 表示 map将包含一个元素类型为 E 的函数

=>箭头是return的简写


例子:

class Person 
{
String firstName;
String lastName;

Person(this.firstName, this.lastName);
}

void main() {
List<Person> people = new List<Person>();
people.add(new Person("Joe", "Smithers"));
people.add(new Person("Patrick", "Thomas"));
var mappedNames = people.map<String>((Person n) => 'Mr. ${n.firstName} ${n.lastName}');
print(mappedNames);
}

在这个例子中 map返回类型为 String 的可迭代对象,因此您可以添加 map<String> , 和变量 n类型为 Person , 因此你可以写成 Person n .

n 的类型相当于变量类型people .因为这里基本上是map方法在列表内迭代 people并返回一个新的 Iterable根据你在返回声明中写的。

因此print(mappedNames)将为您提供以下内容:

(Mr. Joe Smithers, Mr. Patrick Thomas)

Note : 您不必添加类型,因为 dart 会推断类型。


在您的代码中,您具有以下内容:

list = (json.decode(response.body) as List)
.map((data) => PhotoData.fromJson(data))
.toList();

(json.decode(response.body) as List)这意味着您正在将 json 对象转换为类型 List , 然后使用 map您在其中进行迭代并返回一个可迭代对象。

然后你使用 toList() 创建一个 List来自返回的 iterable

关于flutter - 试图理解 Dart 中的匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57970470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com