У меня есть логика, и она работает, но я что-то упускаю, потому что единственный способ, которым это работает, - это когда я заменяю массив следующей «страницей» или документами, но когда я делаю .addAll()
, он получает беспорядочный. Те же самые первые документы читаются и включаются несколько новых, но не все, что должно было быть включено.
код:
ScrollController _scrollController = ScrollController();
List<Message> _messages = [];
List<dynamic> _startAfter = [DateTime.now()];
...
@override
void initState() {
super.initState();
this._scrollController.addListener(() {
if (this._scrollController.position.minScrollExtent + this._scrollController.position.pixels <= -15.0) {
setState(() {
this._startAfter = [this._messages.first.createdAt.toDate()];
});
}
});
}
...
Column(
children: <Widget>[
Expanded(
child: StreamBuilder<List<Message>>(
stream: APIs().chats.messagesStream(chatID: widget.chat.chatID, orderBy: 'createdAt', descending: true, startAfter: this._startAfter, limit: 10),
builder: (context, snapshot) {
print(this._startAfter);
switch (snapshot.connectionState) {
case ConnectionState.waiting:
{
return PAIndicator();
}
default:
{
if (snapshot.hasData) {
this._messages = snapshot.data; // Having the issue here.
// this._messages.addAll(snapshot.data); Causes problems when rebuilding
return MessagesList(
scrollController: this._scrollController,
messages: this._messages,
aUser: widget.aUser,
);
} else {
return ListView();
}
}
}
}),
),
// ...
]
)
Я заметил, что ошибка возникает только тогда, когда она перестраивается.
Когда данные извлекаются, они заменяют то, что находится в массиве, как я могу просто добавить данные вместо того, чтобы просто заменить их или дать несколько одинаковых значений одних и тех же сообщений, когда используется .addAll()
, не беспокоясь о том, что пользовательский интерфейс будет перестроен как если клавиатура показывает и закрывает?
Кроме того, как я могу убедиться, что если документов больше нет, они не будут восстановлены или не вызовут firebase? (Решено, теперь остался только главный вопрос)