import 'dart:async'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:fcs/vo/notification.dart'; import 'base_model.dart'; import 'constants.dart'; import 'firebase_helper.dart'; class NotificationModel extends BaseModel { int filer = 0; List notifications = [ Notification( desc: 'A102A-34-#23', status: 'delivered', time: DateTime(2020, 4, 28, 10, 32)), Notification( desc: 'A102A-34-#24', status: 'picked up', time: DateTime(2020, 4, 26, 9, 32)), Notification( desc: 'A102A-34-#23', status: 'sorted', time: DateTime(2020, 4, 24, 10, 32)), Notification( desc: 'ORDER # 114-0725982-9074639', status: 'audited', time: DateTime(2020, 4, 22, 12, 30)), Notification( marketPlace: "Amazon", desc: 'ORDER # 114-0725982-9074639', status: 'received', time: DateTime(2020, 4, 22, 12, 22)) ]; var filterValues = {1: "po", 2: "do", 3: "buyer"}; List get notis { return notifications .where((n) => filer == 0 || n.itemType == filterValues[filer]) .toList(); } int unseen = 0; void initUser(user) { super.initUser(user); _loadNotifications(); } @override logout() async { notifications = []; } Future _loadNotifications() async { Stream snapshots = Firestore.instance .collection( "/$biz_collection/${setting.okEnergyId}/$user_collection/${user.docID}/$notification_collection") .orderBy("time", descending: true) .limit(50) .snapshots(); snapshots.listen((snaps) async { notifications.clear(); unseen = 0; // snaps.documentChanges.forEach((c) { // if (c.type == DocumentChangeType.added) { // FlutterRingtonePlayer.play( // android: AndroidSounds.notification, // ios: IosSounds.glass, // ); // } // }); snaps.documents.forEach((d) { var n = Notification.fromMap(d.data, d.documentID); if (!n.seen) unseen++; notifications.add(n); }); notifyListeners(); }); } void filter(int filter) { this.filer = filter; } Future seen() async { await request("/notification/seen", "POST", token: await getToken()); } Future seenID(String id) async { await request("/notification/seen/${user.docID}/$id", "POST", token: await getToken()); } }