Flutter - Получить индекс итерации из List.map () - PullRequest
0 голосов
/ 04 марта 2019

Я много раз искал в сети ответ.

Я написал итерацию по списку букв и поместил внутрь карточки на экране, используя класс "map"

В коде вы можете видеть, что я сделалРядом и с помощью «карты» распечатывается все пользовательское табло на карточках с экраном.Я хочу добавить немного логики внутри, так что мне нужно получить идентификатор элемента (для записи события).Есть способ, которым я могу сделать, что?

На самом деле я хочу получить определенный индекс элемента по 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(),
        )
      ],
    ),

}

Изображение - каждая карта является «элементом» карты.Я хочу получить индексы для функции onTap.

Спасибо.

Ответы [ 5 ]

0 голосов
/ 25 августа 2019

Другое решение заключается в том, что get hascode вашего объекта уникален, например, int пример:

yourClass.hasCode()

, который будет возвращать идентификатор типа 123456789 для каждой итерации

youпри использовании в других виджетах, когда вам нужно

onSelectChanged: (d) {
    setState(() {
       selectedRow = d == true ? object.hascode : null;
    });
 },
 selected: object.hascode == selectedRow,
0 голосов
/ 06 августа 2019

Нет встроенной функции для получения индекса итерации.

Вероятно, вам понадобится map, который дает вам индекс:

children: enumerate(
  list,
  (index, item) => Text("event_$index")
).toList();

Реализация enumerate просто:

Iterable<E> enumerate<E, T>(
    Iterable<T> items, E Function(int index, T item) f) {
  var index = 0;
  return items.map((item) {
    final result = f(index, item);
    index = index + 1;
    return result;
  });
}
0 голосов
/ 05 марта 2019

Чтобы получить доступ к индексу, вам необходимо преобразовать свой список в карту с помощью оператора asMap .

Пример

final fruitList = ['apple', 'orange', 'mango'];
final fruitMap = myList.asMap(); // {0: 'apple', 1: 'orange', 2: 'mango'}

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

// To convert back to list
fruit 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();
0 голосов
/ 17 июля 2019

Вы можете получить индекс использования list.indexOf, если в списке нет повторяющихся элементов. 100

Пример

userBoard.map((element) {
  // get index
  var index = userBoard.indexOf(element);
  return Container(

  );
}).toList()
0 голосов
/ 04 марта 2019

Вы можете использовать list.asMap()

var result = list.asMap().map((e) => '${e[0]} - ${e[1]});
print(result);

https://api.dartlang.org/stable/2.2.0/dart-core/List/asMap.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...