Ошибка трепетания: RangeError (index): недопустимое значение: не в диапазоне 0..7, включительно: 8 после list.add () - PullRequest
0 голосов
/ 28 апреля 2020

Я получаю свои данные из API, а также добавляю свои данные в API. Я сталкивался с этой ошибкой при добавлении people.add(resp[0]); in addPeople():

RangeError (index): недопустимое значение: не в диапазоне 0..7, включительно: 8

Я добавляю это people.add(resp[0]);, потому что я хочу показать после добавления данных. Это связано с тем, что после добавления данных добавленные данные не отображаются.

Вот мой код:

  List people;
  List selectedPeople = [];
  List checkBox = [];

  @override
  void initState() {
    super.initState();
  }

  void addPeople(name) async {
    http.Response response = await http.post(url, body: {'name': name});
    final resp = json.decode(response.body);
    setState(() {
      Navigator.of(context).pop();
      people.add(resp[0]);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home'),
        actions: <Widget>[
        IconButton(
           icon: Icon(Icons.add_circle_outline), 
           onPressed: () {
              _asyncInputDialog(context);
            }
          ),
        ]
      ),
      body: _buildListView(),
    );
  }

  Widget _buildListView() {
    return ListView.separated(
      itemCount: people == null ? 0 : people.length,
      itemBuilder: (context, index) {
        return ListTile(
          title: Text(people[index]['name']),
          trailing: Checkbox(
            value: checkBox[index],
            onChanged: (value) {
              if (value) {
                setState(() {
                  checkBox[index] = true; selectedPeople.add(people[index]);
                });
              } else {
                setState(() {
                  checkBox[index] = false; selectedPeople.remove(people[index]);
                });
              }
            },
          ),
        );
      },
      separatorBuilder: (context, index) {return Divider();},
    );
  }
}

1 Ответ

1 голос
/ 28 апреля 2020

Вы добавляете людей, но не устанавливаете флажок для этого.

Вы должны добавить следующую строку.

setState(() {
      Navigator.of(context).pop();
      people.add(resp[0]);
      checkBox.add(false);
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...