check null safety
This commit is contained in:
@@ -10,45 +10,46 @@ import 'package:logging/logging.dart';
|
||||
class MessageModel extends BaseModel {
|
||||
final log = Logger('MessageModel');
|
||||
|
||||
List<Message> messages;
|
||||
List<Message> messages = [];
|
||||
|
||||
@override
|
||||
logout() async {
|
||||
if (listener != null) await listener.cancel();
|
||||
if (listener != null) await listener!.cancel();
|
||||
messages = [];
|
||||
}
|
||||
|
||||
Query query;
|
||||
DocumentSnapshot prevSnap;
|
||||
bool isEnded;
|
||||
bool isLoading;
|
||||
String userID;
|
||||
StreamSubscription<QuerySnapshot> listener;
|
||||
late Query query;
|
||||
DocumentSnapshot? prevSnap;
|
||||
late bool isEnded;
|
||||
late bool isLoading;
|
||||
String? userID;
|
||||
StreamSubscription<QuerySnapshot>? listener;
|
||||
|
||||
static const int rowPerLoad = 20;
|
||||
void initQuery(String? userID) {
|
||||
if(userID == null)return;
|
||||
if (userID == null) return;
|
||||
this.messages = [];
|
||||
this.userID = userID;
|
||||
this.prevSnap = null;
|
||||
query = Firestore.instance
|
||||
query = FirebaseFirestore.instance
|
||||
.collection("$user_collection/$userID/$messages_collection")
|
||||
.orderBy('date', descending: true);
|
||||
load();
|
||||
}
|
||||
|
||||
Future<void> load() async {
|
||||
if (prevSnap == null) return;
|
||||
Query _query =
|
||||
prevSnap != null ? query.startAfterDocument(prevSnap) : query;
|
||||
prevSnap != null ? query.startAfterDocument(prevSnap!) : query;
|
||||
QuerySnapshot snapshot =
|
||||
await _query.limit(rowPerLoad).getDocuments(source: Source.server);
|
||||
await _query.limit(rowPerLoad).get(GetOptions(source: Source.server));
|
||||
|
||||
int count = snapshot.documents.length;
|
||||
int count = snapshot.docs.length;
|
||||
isEnded = count < rowPerLoad;
|
||||
prevSnap = count > 0 ? snapshot.documents[count - 1] : prevSnap;
|
||||
prevSnap = count > 0 ? snapshot.docs[count - 1] : prevSnap;
|
||||
|
||||
snapshot.documents.forEach((e) {
|
||||
messages.add(Message.fromMap(e.data, e.documentID));
|
||||
snapshot.docs.forEach((e) {
|
||||
messages.add(Message.fromMap(e.data() as Map<String, dynamic>, e.id));
|
||||
if (messages.length == 1) {
|
||||
_initListener(e);
|
||||
}
|
||||
@@ -57,20 +58,22 @@ class MessageModel extends BaseModel {
|
||||
}
|
||||
|
||||
void _initListener(DocumentSnapshot snap) {
|
||||
if (listener != null) listener.cancel();
|
||||
if (listener != null) listener!.cancel();
|
||||
|
||||
listener = Firestore.instance
|
||||
listener = FirebaseFirestore.instance
|
||||
.collection("$user_collection/$userID/$messages_collection")
|
||||
.endBeforeDocument(snap)
|
||||
.orderBy('date', descending: true)
|
||||
.snapshots(includeMetadataChanges: true)
|
||||
.listen((qs) {
|
||||
qs.documentChanges.forEach((c) {
|
||||
qs.docChanges.forEach((c) {
|
||||
switch (c.type) {
|
||||
case DocumentChangeType.added:
|
||||
log.info("added!! $c");
|
||||
messages.insert(
|
||||
0, Message.fromMap(c.document.data, c.document.documentID));
|
||||
0,
|
||||
Message.fromMap(
|
||||
c.doc.data() as Map<String, dynamic>, c.doc.id));
|
||||
notifyListeners();
|
||||
break;
|
||||
case DocumentChangeType.modified:
|
||||
|
||||
Reference in New Issue
Block a user