【发布时间】:2019-01-21 20:45:12
【问题描述】:
编辑:
主页 - 我正在从我的 firebase 集合中获取字符串列表。然后我想调用firestore存储并获取可下载的图像链接并将其存储在我将传递到第2页的列表中。下面的代码是我获取可下载链接的方式。
Future<List<String>> test(List images) async{
List<String> listOfImages = List<String>();
for(int i = 0; i < images.length; i++){
final ref = FirebaseStorage.instance.ref().child(images[i]);
var url = await ref.getDownloadURL();
listOfImages.add(url);
}
return listOfImages;
}
然后我以以下方式传递图像列表
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => CarDetailScreen(
carImages: test( car['images'])
)),
);
第 2 页 - 我收到了一个 Future>,我想将其转换为列表
List<T> map<T>(List list, Function handler) {
List<T> result = [];
for (var i = 0; i < list.length; i++) {
result.add(handler(i, list[i]));
}
return result;
}
new CarouselSlider(
items: ***["This is where I need a List"]***.map((url) {
return new Container(
margin: new EdgeInsets.all(5.0),
child:
new GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ViewCarImages(
carImages: _getImages(snapshot))),
);
},
child:
new ClipRRect(
borderRadius: new BorderRadius.all(new Radius.circular(5.0)),
child:
new Image.network(
url,
fit: BoxFit.cover,
width: 1000.0,
)
)
)
);
}).toList(),
viewportFraction: 0.9,
aspectRatio: 2.0,
autoPlay: false,
)
【问题讨论】:
-
为什么需要动态而不是字符串?
-
因为我正在使用插件(CarouselSlider)并且在 items 属性中它正在寻找 List
。 -
没有办法从
Future到同步的非未来。您对该值所做的任何事情都必须是异步的。FutureBuilder是 Flutter 的典型方式 - 如果这不可能,您需要提供更多上下文。 -
@NateBosch 我在我的问题中添加了更多代码。我尝试添加一个 FutureBuilder,但我真的不确定如何实现这一点。