check null safety

This commit is contained in:
tzw
2021-09-10 16:33:52 +06:30
parent 3eacbef117
commit d8c86a512b
46 changed files with 275 additions and 304 deletions

View File

@@ -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: