我在字母列表上写了一个迭代,并使用"map“类将内部卡片放在屏幕上。
在代码中,您可以看到我创建了一行,并使用“userBoard”将卡片上的所有映射打印到屏幕上。我想在里面添加一些逻辑,所以我需要获取元素的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(),
)
],
),
}
- each card is "element" of the map. I want to get the indexes for the function onTap.
发布于 2019-03-05 12:44:04
要访问索引,需要使用asMap操作符将列表转换为地图。
示例
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();
发布于 2019-07-17 16:06:45
当列表中没有重复的元素时,可以使用list.indexOf
来获取索引。
示例
userBoard.map((element) {
// get index
var index = userBoard.indexOf(element);
return Container(
);
}).toList()
发布于 2020-03-03 15:47:16
如果您想要迭代,最简单的方法
我们可以用一个新函数来扩展Iterable
:
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++));
}
}
用法:
myList.mapIndexed((element, index) {});
摘自here。
https://stackoverflow.com/questions/54990716
复制相似问题