Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dictionary 有没有办法在map/forEach中标识当前索引_Dictionary_Flutter_Dart - Fatal编程技术网

Dictionary 有没有办法在map/forEach中标识当前索引

Dictionary 有没有办法在map/forEach中标识当前索引,dictionary,flutter,dart,Dictionary,Flutter,Dart,大多数语言都提供类似以下内容的apples.map((apple,index)=>{})。Dart在地图或forEach中标识索引的等价物是什么 有人提供了apples.asMap().map((apple,index)=>{})但是它返回了一个不可修改的映射版本,当我试图映射一个列表以生成小部件.toList()时,它不适用于列的子项:我不确定我是否完全理解您的意图,但是map和forEach是在Iterable上定义的,并且一个Interable的元素不一定是有序的,因此为每个元素提供索引不

大多数语言都提供类似以下内容的
apples.map((apple,index)=>{})
。Dart在地图或forEach中标识索引的等价物是什么


有人提供了
apples.asMap().map((apple,index)=>{})
但是它返回了一个不可修改的映射版本,当我试图映射一个列表以生成小部件
.toList()
时,它不适用于
列的
子项:

我不确定我是否完全理解您的意图,但是
map
forEach
是在Iterable上定义的,并且一个Interable的元素不一定是有序的,因此为每个元素提供索引不一定有意义。例如,如果Iterable是一个集合,则元素没有顺序


我不太明白为什么在您的特定示例中需要索引。如果你扩展你的例子,也许我会理解

使用列表项的索引和值的一种方法是使用新的构造。代码如下所示:

Widget build(BuildContext context) {
  final list = ['Mango', 'Orange', 'Apple'];

  return Scaffold(
    appBar: AppBar(
      title: Text(widget.title),
    ),
    body: Column(
      children: <Widget>[
        for (int i = 0; i < list.length; i++)
          ListTile(title: Text('${list[i]} has index $i')),
      ],
    ),
  );
}

地图中拥有一个索引
可能非常有用,原因很多,与原始列表中项目的实际索引无关。例如:知道当前项目之前已经看到了多少个项目,创建自动递增ID,知道当前项目是处于偶数索引还是奇数索引,等等。
。asMap
是正确的方法。Map、filter、reduce等功能类似于工具。它们不会修改原始结构,这是经过设计的。相反,它们返回原始结构的副本。如果您需要修改元素,只需保留
asMap
的返回值。谢谢,我会尝试一下,我最终只是在外部创建了一个单独的for循环,并将所有小部件添加到一个列表中作为子级使用。这可能看起来更干净。干杯这些新的构造是Dart的UI作为代码哲学的一部分,并且是一个很好的推荐。如果我的答案符合你的目的,你能把它标为正确答案吗?
environment:
  sdk: ">=2.3.0 <3.0.0"