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>>? _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; _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 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; _user = UserModel.fromFirestore(data); _score = await ScoresModel.scoreTo(uid, false, false); notifyListeners(); } } UserModel? get user => _user; ScoresModel? get score => _score; }