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

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

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

实际上,我想在 userBoard 上获取元素的特定索引。

代码:

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(),
            )
          ],
        ),
}

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

最佳答案

要访问索引,您需要使用 asMap 将列表转换为 map 。运算符。

示例

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();

您的代码

userBoard.asMap().map((i, element) => MapEntry(i, Stack(
  GestureDetector(onTap: () {
    setState(() {
      // print("element=${element.toString()}");
      // print("element=${userBoard[i].toString()}");
    });
  }),
))).values.toList();

其他答案的引用

  • 我喜欢 this answer更好的。请看一看。
  • 如果您想在多个地方尝试扩展 like this .
  • 或者,您也可以尝试 dart collection approach .

https://stackoverflow.com/questions/54990716/

相关文章:

unit-testing - Flutter/Dart 在单元测试中等待几秒钟

list - Flutter 应用中的无限列表

dart - 如何在 Flutter 中获取 Text 小部件的大小

dart - Flutter 中的 Scaffold 和 MaterialApp 有什么区别?

dart - 长文本 flutter 中的换行符

android - 将自定义 boxshadow 添加到 Flutter 卡

flutter - 如何在 Flutter 中将一个小部件放在另一个小部件之上?

android - 什么时候在 Flutter 中使用 setState?

firebase - 如何使用 buildArguments 或其他任何东西在 Flutter/Fi

flutter - 将容器缩小到较小的 child 而不是扩大到填充 parent