Ограничивает ли StreamBuilder + ListView.builder + Firebase Realtime Database количество трафика данных? - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть приложение чата, и я немного волнуюсь, когда у меня, например, 10.000 сообщений (+ изображения) в моем групповом чате.Правильный ли следующий код (или загружается ли весь чат (= все сообщения) каждый раз, когда я его открываю)?Отличным решением было бы, если бы StreamBuilder загружал только самые новые сообщения и ленивые загрузки, если я прокручивал до старых.

 StreamBuilder(
                  stream: _queryDatabase.onValue,
                  builder: (BuildContext context, snapshot) {
                    if (snapshot.hasData) {
                      if (snapshot.data.snapshot.value != null) {
                        //final int documentsLength = snapshot.data.documents.length;
                        Map<dynamic, dynamic> map =
                            snapshot.data.snapshot.value;

                        List<dynamic> list = map.values.toList()
                          ..sort((a, b) =>
                              b['timestamp'].compareTo(a['timestamp']));
                        final int listLength = map.values.toList().length;
                        // map.forEach((dynamic, v) => print(v["author"]));
                        //print(messages);

                        return ListView.builder(
                            padding: const EdgeInsets.all(8.0),
                            physics: const AlwaysScrollableScrollPhysics(),
                            controller: _scrollController,
                            itemCount: listLength,
                            reverse: true,
                            itemBuilder: (context, int index) {
                              _responseToText() {
                                setRef(
                                    textRef: list[index]['text'],
                                    authorRef: list[index]['author']);
                              }

                              _responseToImage() {
                                setRef(
                                    imageUrl: list[index]['imageUrl'],
                                    authorRef: list[index]['author']);
                              }

                              _responseToImageResponse() {
                                setRef(
                                    textRef: list[index]['text'],
                                    imageUrl: list[index]['imageUrl'],
                                    authorRef: list[index]['author']);
                              }

                              return ChatMessageSingleChat(
                                snapshot: list,
                                index: index,
                                userId: globals.userId,
                                singleChat: true,
                                groupId: widget.groupId,
                                answerText: _responseToText,
                                answerImage: _responseToImage,
                                answerImageAnswer: _responseToImageResponse,
                                newFocusNode: _newFocusNode,
                              );
                            }); ...
...