我一般对Flutter和基于Java的语言都是陌生的,我自己来自PHP背景。这将是一个非常初学者的问题:
我正在像这样通过ListView创建新的Network.image:
new Image.network(snapshot.data[index].imageurl.toString() ?? ''),
好的,可以很好地用作快照。data[index] .imageurl用作:
data ['content'][0]['imageurl']
并定义为:
String imageurl;
但是我想做的是获取整个数组:
data ['content']['imageurl']
我认为应该定义为:
List imageurl;
并循环遍历以为数组中的每个条目创建自己的Image.network。
我尝试了多种方法,包括:
return new Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
snapshot.data[index].imageurl.forEach((data) {
new Image.network(snapshot.data[index].imageurl.toString() ?? ''),
}
但是foreEach循环给我一个错误:
“此处的表达式的类型为'void',因此无法使用。
我该如何实际实现?这里没有想法。
答案 0 :(得分:3)
Iterable.forEach
用于在Iterable的每个项目上调用函数。它不产生任何输出(返回void
),并且从提供的函数返回的任何内容都将被丢弃。
要从现有的List
或List
生成新的Iterable
,您将要使用Iterable.map
方法。
例如:
List<Widget> result = snapshot.data[index].imageurl.map((data) {
// Make sure to return the result.
return Image.network(snapshot.data[index].imageurl.toString())
}).toList(); // Call to convert the Iterable into a List.
还有另一个潜在的问题:x.toString() ?? ''
是不必要的,因为toString()永远不应返回null-甚至Null.toString()
都返回"null"
。
答案 1 :(得分:0)
好的,所以我终于弄清楚了。
List<Widget> result = content.map((c) => Image.network(snapshot.data[index].imageUrl.toString())).toList();
要获得输出结果,我确实返回了新列:
children: result,