我正在使用 http
库来下载图像。
final client = http.Client();
final _response = await client.send(http.Request('GET', Uri.parse("my_url")));
聆听方式一:(聆听方式)
int downloaded = 0;
_response.stream.listen((value) {
// this gets called 82 times and I receive actual image size
downloaded += value.length;
});
聆听方式 2:(StreamBuilder 小部件)
int downloaded = 0;
StreamBuilder<List<int>>(
stream: _response.stream,
builder: (_, snapshot) {
// this gets called 11 times and I receive around 1/10 actual image size
if (snapshot.hasData) downloaded += snapshot.data.length;
return Container();
},
);
问题是为什么
StreamBuilder
的 build()
方法在新数据到达时不会经常被调用,它只是违背了用作小部件的目的。 最佳答案
StreamBuilder
基本上经过了更好的优化,不会在每个新快照上重建。正如 StreamBuilder
documentation 所说:
关于flutter - StreamBuilder 监听流和常规监听方法的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61020493/