import 'dart:async'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:logging/logging.dart'; import 'package:fcs/model/base_model.dart'; import 'package:fcs/model/constants.dart'; import 'package:fcs/model/firebase_helper.dart'; import 'package:fcs/util.dart'; import '../vo/user.dart'; class UserModel extends BaseModel { final log = Logger('UserListModel'); StreamSubscription listener; List users = []; void initUser(user) async { super.initUser(user); _loadUsers(user); } Future _loadUsers(User user) async { try { String path = "/$biz_collection/${setting.okEnergyId}/$user_collection"; var snaps = await Firestore.instance .collection(path) .where('user_level', isLessThanOrEqualTo: user.userLevel) .limit(1) .getDocuments(); Stream snapshots = Firestore.instance .collection(path) .where('user_level', isLessThanOrEqualTo: user.userLevel) .snapshots(); snapshots.listen((snaps) async { users = snaps.documents.map((documentSnapshot) { var data = User.fromMap(documentSnapshot.data, documentSnapshot.documentID); if (data.docID == user.docID && data.isBlock) { this.mainModel.logout(); notifyListeners(); } return data; }).toList(); notifyListeners(); }); } catch (e) { log.warning("Error!! $e"); } } @override logout() async { users = []; if (listener != null) listener.cancel(); } List getUserList() { return users.where((u) => u.docID != this.user.docID).toList(); } Future findUser(String phoneNumber) async { var _phoneNumber = updatePhoneNumber(phoneNumber); try { var data = await request("/user/find/$_phoneNumber", "GET", token: await getToken()); return User.fromJson(data); } catch (e) { throw Exception(e); } } Future getUser(String id) async { String path = "/$biz_collection/${setting.okEnergyId}/$user_collection"; print("id=> $id"); var snap = await getDocSnap(path, id); print("snap=> $snap"); return User.fromMap(snap.data, snap.documentID); } }