RangeError (index): недопустимое значение: не в диапазоне 0..1 включительно: 2. Как это можно исправить? - PullRequest
0 голосов
/ 21 марта 2020

Я строю данные c ListView. Как я могу решить эту ошибку? Также, как я могу добавить пользовательский интерфейс в ListView?

Ниже приведен код MatchData моего класса:

class MatchData {
  String date, team1, team2, time;

  MatchData({@required this.date, @required this.team1, @required this.team2, @required this.time});
}

Ниже приведены данные, которые я хочу отобразить в ListView:

final List<MatchData> dayMatch = [
    MatchData(
        date: '12/02/2020',
        team1: 'Mumbai Indians',
        team2: 'Bangalore',
        time: '16:00'),
    MatchData(
        date: '12/02/2020',
        team1: 'Mumbai Indians',
        team2: 'Bangalore',
        time: '16:00')
  ];

  match() {
    return dayMatch;
  }

Ниже приводится тело моего виджета:

body: Center(child: ListView.builder(itemBuilder: (context, index) {
          return Card(
            child: Row(
              children: <Widget>[
                  Text(dayMatch[index].date),
                  Text(dayMatch[index].team1),
                  Text(dayMatch[index].time),
                  Text(dayMatch[index].team2),
                ],
            ),
          );
        }

Ответы [ 2 ]

0 голосов
/ 21 марта 2020

Если вы не укажете itemCount, а экран достаточно большой, чтобы отобразить десять элементов, ListView.builder() создает чуть более десяти дочерних элементов, и даже больше по требованию, если вы прокрутите вниз.

В вашем случае ListView.builder() пытается создать более двух дочерних элементов, в то время как ваш список (dayMatch) содержит только два элемента, поэтому возникает ошибка.

Чтобы исправить это, просто передайте число элементов в аргумент itemCount, иначе лучше использовать конструктор по умолчанию ListView , если число фиксированное и небольшое. ListView.builder() делает больше вычислений под капотом, чтобы быть гибким, что слишком мало для небольшого списка.

0 голосов
/ 21 марта 2020

Вы можете использовать "itemCount".

child: ListView.builder(
  itemCount: dayMatch.length,
  itemBuilder: (context, index) {
    return Card(
      child: Row(
        children: <Widget>[
          Text(dayMatch[index].date),
          Text(dayMatch[index].team1),
          Text(dayMatch[index].time),
          Text(dayMatch[index].team2),
        ],
      ),
    );
  },
),
...