我有时会找到这样的东西:
Future<List<Photo>> fetchPhotos(http.Client client) async {
final response = await client.get('https://jsonplaceholder.typicode.com/photos');
return compute(parsePhotos, response.body);
}
其中parsePhotos函数为:
List<Photo> parsePhotos(String responseBody) {
final parsed = json.decode(responseBody).cast<Map<String, dynamic>>();
return parsed.map<Photo>((json) => Photo.fromJson(json)).toList();
}
我无法理解compute(parsePhotos, response.body)
:parePhotos
函数接受了responseBody参数,但是在编写compute
时,似乎没有收到它。所以,有人可以向我解释这个表示法吗?
P.s.希望它足够清楚。
答案 0 :(得分:3)
在
return compute(parsePhotos, response.body);
parsePhotos
和response.body
只是两个独立的参数。
第一个是对传递给parsePhotos
的{{1}}参数的compute
函数的引用,第二个是来自callback
的响应数据,该响应数据被传递给{{ client.get(...)
函数的1}}参数。
message
的作用是创建一个新的隔离物,并以compute
作为入口点(例如主隔离物的compute
),然后将parsePhotos
作为参数传递给它。
不是这行main()
将message
传递给return compute(parsePhotos, response.body);
而是
response.body
来自parsePhotos
实现https://docs.flutter.io/flutter/foundation/compute.html