75 lines
1.8 KiB
Dart
75 lines
1.8 KiB
Dart
|
|
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<Notification> notifications = [];
|
||
|
|
|
||
|
|
var filterValues = {1: "po", 2: "do", 3: "buyer"};
|
||
|
|
List<Notification> 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<void> _loadNotifications() async {
|
||
|
|
Stream<QuerySnapshot> 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<void> seen() async {
|
||
|
|
await request("/notification/seen", "POST", token: await getToken());
|
||
|
|
}
|
||
|
|
|
||
|
|
Future<void> seenID(String id) async {
|
||
|
|
await request("/notification/seen/${user.docID}/$id", "POST",
|
||
|
|
token: await getToken());
|
||
|
|
}
|
||
|
|
}
|