55 lines
1.6 KiB
Dart
55 lines
1.6 KiB
Dart
import 'package:cloud_firestore/cloud_firestore.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:firebase_auth/firebase_auth.dart';
|
|
import 'package:prosappco/src/models/scores_model.dart';
|
|
import 'package:prosappco/src/models/user_model.dart';
|
|
|
|
class UserProvider extends ChangeNotifier {
|
|
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
|
|
UserModel? _user;
|
|
ScoresModel? _score;
|
|
Stream<DocumentSnapshot<Map<String, dynamic>>>? _stream;
|
|
|
|
UserProvider() {
|
|
initUserProvider();
|
|
}
|
|
|
|
void initUserProvider() {
|
|
var uid = FirebaseAuth.instance.currentUser?.uid;
|
|
if (uid == null) return;
|
|
_stream = _firestore.collection('users').doc(uid).snapshots();
|
|
_stream?.listen((documentSnapshot) async {
|
|
if (documentSnapshot.exists) {
|
|
final data = documentSnapshot.data() as Map<String, dynamic>;
|
|
_user = UserModel.fromFirestore(data);
|
|
_score = await ScoresModel.scoreTo(uid, false, false);
|
|
notifyListeners();
|
|
}
|
|
}, onDone: () {}, onError: (error) {});
|
|
}
|
|
|
|
void setNullUser() {
|
|
_user = null;
|
|
_score = null;
|
|
_stream = null;
|
|
notifyListeners();
|
|
}
|
|
|
|
Future<void> updateUserDataAndScores() async {
|
|
var uid = FirebaseAuth.instance.currentUser?.uid;
|
|
if (uid == null) return;
|
|
|
|
var documentSnapshot = await _firestore.collection('users').doc(uid).get();
|
|
|
|
if (documentSnapshot.exists) {
|
|
final data = documentSnapshot.data() as Map<String, dynamic>;
|
|
_user = UserModel.fromFirestore(data);
|
|
_score = await ScoresModel.scoreTo(uid, false, false);
|
|
notifyListeners();
|
|
}
|
|
}
|
|
|
|
UserModel? get user => _user;
|
|
ScoresModel? get score => _score;
|
|
}
|