Я хочу, чтобы решение изменило мое состояние сразу после того, как я получу будущие данные без каких-либо действий в Flutter

#flutter #setstate #flutter-futurebuilder

Вопрос:

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

 FutureBuilder(
                      future: blogServices.articleComment(token, widget.article.id),
                      builder: (context, snapshot) {
                        // print(token);
                        if (snapshot.hasError) {
                          return Container();
                        } else if (snapshot.connectionState ==
                            ConnectionState.done amp;amp;
                            snapshot.data != null) {
                          List<ArticleComment> comments = snapshot.data;
                          setState(() {. <-------- Error!!!!!!!! 
                            commentsCount=comments.length;
                          });
                          return Container();
                        } else {
                          return CircularProgressIndicator();
                        }
                      },
                    ),
 

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

1. я также использовал WidgetsBinding.instance.addPostFrameCallback((_) { setState(() { commentsCount = количество; }); }); состояние изменилось, но будущий конструктор бесконечно зацикливается.

2. пожалуйста, сформулируйте свою проблему более четко. Разработайте код, а также добавьте больше фрагментов кода из-за кода.

3. без функции обратного вызова вы не разрешаете вызывать setState() , если вы хотите использовать commentsCount внешний конструктор будущего , вам нужно вызвать свой API из initState

4. но это снова вызовет будущее futurebuilder

Ответ №1:

Я нашел решение, поэтому вместо

 setState(() {. <-------- Error!!!!!!!! 
   commentsCount=comments.length;
});
 

Я использовал приведенный ниже код

 WidgetsBinding.instance.addPostFrameCallback((_) { setState(() { commentsCount = count; }); });
 

и часть загрузки была связана с моим снимком состояния.ConnectionState ==
Состояние соединения.сделав это, я удалил его и просто сделал снимок.данные != ноль. Это сработало для меня!!