Прокрутка конструктора Listview во Flutter не плавная при объединении futurebuilder и streambuilder

У меня есть страница комментариев для каждого сообщения в моем приложении, которое я использую streambuilder для получения комментариев из базы данных Firebase. Для каждого комментария я показываю изображение пользователя и его комментарий.

Чтобы получить изображение пользователя, мне нужно использовать futurebuilder, чтобы найти пользователя в документе userData, а затем захватить URL-адрес изображения и отобразить его (пользователи могут изменить свой профиль изображения, имя и т. Д. В любое время, и я должен захватить обновлял один из документа userData каждый раз, когда я хочу отображать их имя или изображение в любом месте). Вот код, который я использую:

StreamBuilder(
  stream: Firestore.instance
      .collection('posts')
      .document(postId)
      .collection('postComments')
      .orderBy(
        'createdAt',
        descending: true,
      )
      .snapshots(),
  builder: (ctx, chatSnapshot) {
    if (chatSnapshot.connectionState == ConnectionState.waiting) {
      return Center(
        child: CircularProgressIndicator(),
      );
    }
    final chatDocs = chatSnapshot.data.documents;
    return ListView.builder(
      shrinkWrap: true,
      reverse: true,
      itemCount: chatDocs.length,
      itemBuilder: (ctx, index) {
        return FutureBuilder(
          future: Firestore.instance
              .collection('userData')
              .document(userId)
              .get(),
          builder: (context, userSnapshot) {
            if (userSnapshot.connectionState == ConnectionState.waiting) {
              return Container(
                child: CircularProgressIndicator(
                  valueColor:
                      AlwaysStoppedAnimation(Color.fromRGBO(0, 0, 0, 0)),
                ),
              );
            }
            final userData = userSnapshot.data;
            User commentor = User.fromDocument(userData);
            return Padding(
              padding: const EdgeInsets.all(20.0),
              child: Row(
                children: [
                  CircleAvatar(
                    backgroundImage: NetworkImage(
                      commentor.userImage,
                    ),
                  ),
                  Padding(
                    padding: const EdgeInsets.all(8.0),
                    child: Container(
                      width: MediaQuery.of(context).size.width * 0.5,
                      padding: EdgeInsets.all(10),
                      color: Colors.grey,
                      child: Text(
                        chatDocs[index]['comment'],
                        style: TextStyle(
                          color: Colors.black,
                        ),
                        textAlign: TextAlign.start,
                      ),
                    ),
                  ),
                ],
              ),
            );
          },
        );
      },
    );
  },
);

Когда я прокручиваю снизу вверх (от самых последних к более старым комментариям), прокрутка выполняется очень плавно и без проблем, но когда я дохожу до конца списка (самый старый комментарий) и начинаю прокрутку назад, возникает странный переход между комментарии и прокрутка не гладкие, по крайней мере, для первых нескольких прокруток.

У меня есть этот снимок экрана, который показывает странное поведение при прокрутке. Почему так происходит?

Благодарность!

0 ответов

Другие вопросы по тегам