Как правильно загружать страницы, чтобы это работало каждый раз

#flutter #dart

#flutter #dart

Вопрос:

Я разрабатываю групповое приложение, и когда я загружаю страницу списка пользователей, появляется ошибка: метод ‘[]’ был вызван в null. Получатель: null Пытался вызвать:

Получив сообщение об ошибке, я пытаюсь выполнить горячую перезагрузку страницы, и все работает. Это происходит каждый раз.

Я пытаюсь загрузить то, что мне нужно, а затем работать с ними

  @override
  void didChangeDependencies() async {
    super.didChangeDependencies();
    groupModel =await DBFuture().getGroup(widget.groupId);
    users= await DBFuture().getUsers(groupModel.members);
    dlu=groupModel.members.length;
  }
 
 child: ListView.builder(
          itemCount: dlu,
          shrinkWrap: true,
          itemBuilder: (BuildContext context,index) => Container(

.
.
.
.
                        Column(
                          crossAxisAlignment: CrossAxisAlignment.start,
                          children: <Widget>[
                            Text("Nazwa: " users[index].fullName),
                            Text("Email: " users[index].email),
                            Text("Ranga: "),
                          ],
                        )
                      ],
                    ),
 

проблема с индексом?

Ответ №1:

Причина, по которой он выдает сообщение об ошибке с null, заключается в том, что ваши данные еще не загружены, и когда вы перезагружаете данные, ошибка исчезает.

Итак, если вы хотите получить данные, тогда только создайте экран, который вы должны использовать Futurebuilder или StreamBuilder для потока. Оберните вас ListView.builder внутри a Futurebuilder , чтобы он ожидал получения данных, после чего только вы загружаете страницу с данными. Обязательно укажите возвращаемый тип данных вашего future

 class Test extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return FutureBuilder<DataType>(
      future: DBFuture().getUsers(groupModel.members),
      builder: (context, snapshot) {
        if (snapshot.hasData) {
          return ListView.builder(
            itemCount: dlu,
            shrinkWrap: true,
            itemBuilder: (BuildContext context, index) => Container(
              Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: <Widget>[
                  Text("Nazwa: "   users[index].fullName),
                  Text("Email: "   users[index].email),
                  Text("Ranga: "),
                ],
              ),
            ),
          );
        }
        return Center(child: CircularProgressIndicator(),);
      },
    );
  }
}
 

Комментарии:

1. Какой тип базы должен быть

2. @K55, если вы нашли мой ответ полезным / полезным. Пожалуйста, дайте ему большой палец вверх и отметьте как ответ, если это возможно;) и что касается другого сообщения в будущем