英文:
How to dynamically update ListView while fetching data asynchronously?
问题
我正在尝试找出在获取数据列表时更新 ListView.builder()
的最佳方法。基本上,我是分批下载数据的 -- 比如一次下载一组 10 张图片 -- 然后在未来完成后在 ListView.builder
中显示它们,下面还有一个指示器表示我们仍在获取数据。并且一直执行此操作,直到所有数据都被获取。
最佳实现方式是什么?
我拥有的示例代码如下:
void _fetchImages() async {
// 获取图片
for (...) {
final results = await Future.wait[imageFutures];
// 在这里更新列表
imageList.addAll(results); // 假设数据以正确的格式返回
setState((){});
}
}
@override
void initState() {
super.initState();
_fetchImages();
}
@override
Widget build(BuildContext context) {
return ListView.builder(...);
}
英文:
I am trying to figure out the best way to update a ListView.builder()
while I'm fetching a list of data. Essentially, I am downloading data in batches -- let's say a group of 10 images at a time -- and displaying them in a ListView.builder
after the future completes, with an indicator below it to signify that we're still fetching data. And do this until everything is fetched.
What's the best way of going about this?
Example code of what I have:
void _fetchImages() async {
// Fetch images
for (...) {
final results = await Future.wait[imageFutures];
// update list here
imageList.addAll(results); // let's say data comes back in correct format
setState((){});
}
}
@override
void initState() {
super.initState();
_fetchImages();
}
@override
Widget build(BuildContext context) {
return ListView.builder(...);
}
答案1
得分: 0
从`Stream`返回`List`,然后你可以使用`StreamBuilder`。
```dart
return StreamBuilder<List<MyImage>>(
stream: dataStream,
builder: (BuildContext context, AsyncSnapshot<List<MyImage>> snapshot) {
if (snapshot.hasData) {
return Center(
child: ListView.builder(
...
);
}
return SomeWidget(
...
);
},
);
英文:
Return List
from Stream
then you can use StreamBuilder
.
return StreamBuilder<List<MyImage>>(
stream: dataStream,
builder: (BuildContext context, AsyncSnapshot<List<MyImage>> snapshot) {
if (snapshot.hasData) {
return Center(
child: ListView.builder(
...
);
}
return SomeWidget(
...
);
},
);
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论