【发布时间】:2019-12-05 13:24:30
【问题描述】:
我有一个带有 ListView 的脚手架,可以滚动。 顶部有一个标题容器和一个包含图像列表的列。
我只想在这些图像出现在视口中时才加载它们,但它们都同时开始加载。
当我将此图像添加到 ListView 的子项时不会发生这种情况,但我想将它们放入单独的小部件以保持我的代码干净。有可能吗?
这是一个简化的例子:
const List<String> images = [
'https://cataas.com/cat?hash=1',
'https://cataas.com/cat?hash=2',
'https://cataas.com/cat?hash=3',
'https://cataas.com/cat?hash=4',
'https://cataas.com/cat?hash=5',
'https://cataas.com/cat?hash=6',
'https://cataas.com/cat?hash=7',
'https://cataas.com/cat?hash=8',
];
// Scaffold child
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListView(
children: [
// Header
Placeholder(
fallbackHeight: 300,
),
Category(),
SizedBox(height: 16),
Category(),
],
);
}
}
class Category extends StatelessWidget {
@override
Widget build(BuildContext context) {
print('Build category');
return Column(
children: [
Padding(
padding: EdgeInsets.all(32),
child: Text('CATEGORY TITLE'),
),
...images.map((image) => CategoryItem(image)),
],
);
}
}
class CategoryItem extends StatelessWidget {
final String imageUrl;
CategoryItem(this.imageUrl);
@override
Widget build(BuildContext context) {
print('Build image: $imageUrl');
return FadeInImage.memoryNetwork(
fit: BoxFit.cover,
placeholder: kTransparentImage,
image: imageUrl,
);
}
}
【问题讨论】:
标签: flutter dart lazy-loading