首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从List.map()获取迭代索引

从List.map()获取迭代索引
EN

Stack Overflow用户
提问于 2019-03-05 04:03:39
回答 17查看 116.2K关注 0票数 70

我在字母列表上写了一个迭代,并使用"map“类将内部卡片放在屏幕上。

在代码中,您可以看到我创建了一行,并使用“userBoard”将卡片上的所有映射打印到屏幕上。我想在里面添加一些逻辑,所以我需要获取元素的id (用于录制事件)。有没有办法让我做到这一点?

实际上,我希望通过userBoard获得元素的特定索引。

代码:

代码语言:javascript
复制
Widget build(BuildContext context) {
    return Row(
      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
      children: <Widget>[
            Row(
              children: userBoard
                  .map((element) => Stack(children: <Widget>[
                        Align(
                          alignment: Alignment(0, -0.6),
                          child: GestureDetector(
                            onTap: (() {
                              setState(() {
                                // print("element=${element.toString()}");
                                // print("element=${userBoard[element]}");
                              });
                            }),
                            child: SizedBox(
                              width: 40,
                              height: 60,
                              child: Card(
                                  shape: RoundedRectangleBorder(
                                    borderRadius: BorderRadius.circular(5.0),
                                  ),
                                  child: Center(
                                    child: Text(element,
                                        style: TextStyle(fontSize: 30)),
                                  )),
                            ),
                          ),
                        )
                      ]))
                  .toList(),
            )
          ],
        ),
}

- each card is "element" of the map. I want to get the indexes for the function onTap.

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2019-03-05 12:44:04

要访问索引,需要使用asMap操作符将列表转换为地图。

示例

代码语言:javascript
复制
final fruitList = ['apple', 'orange', 'mango'];
final fruitMap = fruitList.asMap(); // {0: 'apple', 1: 'orange', 2: 'mango'}

// To access 'orange' use the index 1.
final myFruit = fruitMap[1] // 'orange'

// To convert back to list
final fruitListAgain = fruitMap.values.toList();

你的代码

代码语言:javascript
复制
userBoard.asMap().map((i, element) => MapEntry(i, Stack(
  GestureDetector(onTap: () {
    setState(() {
      // print("element=${element.toString()}");
      // print("element=${userBoard[i].toString()}");
    });
  }),
))).values.toList();
票数 126
EN

Stack Overflow用户

发布于 2019-07-17 16:06:45

当列表中没有重复的元素时,可以使用list.indexOf来获取索引。

示例

代码语言:javascript
复制
userBoard.map((element) {
  // get index
  var index = userBoard.indexOf(element);
  return Container(

  );
}).toList()
票数 55
EN

Stack Overflow用户

发布于 2020-03-03 15:47:16

如果您想要迭代,最简单的方法

我们可以用一个新函数来扩展Iterable

代码语言:javascript
复制
import 'dart:core';

extension IndexedIterable<E> on Iterable<E> {
  Iterable<T> mapIndexed<T>(T Function(E e, int i) f) {
    var i = 0;
    return map((e) => f(e, i++));
  }
}

用法:

代码语言:javascript
复制
myList.mapIndexed((element, index) {});

摘自here

票数 40
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54990716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档