在ListView中颤动新的Image.network foreach

时间:2019-02-25 01:36:27

标签: flutter

我一般对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',因此无法使用。

我该如何实际实现?这里没有想法。

2 个答案:

答案 0 :(得分:3)

Iterable.forEach用于在Iterable的每个项目上调用函数。它不产生任何输出(返回void),并且从提供的函数返回的任何内容都将被丢弃。

要从现有的ListList生成新的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,