From ab0dfb83d14b9f5505d9b13cf86906b074f392aa Mon Sep 17 00:00:00 2001 From: Felipe Date: Wed, 1 Nov 2023 13:06:49 -0500 Subject: [PATCH] provider fix --- lib/src/components/drawer_menu.dart | 36 +++++++++------------------ lib/src/models/scores_model.dart | 2 +- lib/src/providers/user_provider.dart | 37 ++++++++++++++++++---------- 3 files changed, 37 insertions(+), 38 deletions(-) diff --git a/lib/src/components/drawer_menu.dart b/lib/src/components/drawer_menu.dart index d18c82b..7a30f6e 100644 --- a/lib/src/components/drawer_menu.dart +++ b/lib/src/components/drawer_menu.dart @@ -19,30 +19,16 @@ import 'package:url_launcher/url_launcher.dart'; import 'package:get/get.dart'; import 'package:provider/provider.dart'; -class DrawerMenu extends StatefulWidget { - @override - State createState() => _DrawerMenuState(); -} - -class _DrawerMenuState extends State { +class DrawerMenu extends StatelessWidget { final uid = AuthenticationRepository.instance.getCurrentUserUid(); - ScoresModel? scoresModel; - - @override - void initState() { - super.initState(); - if (scoresModel == null) { - ScoresModel.scoreTo(uid.toString(), false, false).then( - (ScoresModel s) => setState(() => scoresModel = s), - ); - } - } Future _irSugerencias() async { - const url = - 'https://admin.prosapp.co/sugerencias'; // AquĆ­ debes poner la URL a la que quieres dirigirte - if (await canLaunch(url)) { - await launch(url); + const url = 'https://admin.prosapp.co/sugerencias'; + + final Uri _url = Uri.parse(url); + + if (await canLaunchUrl(_url)) { + await launchUrl(_url); } else { throw 'No se pudo abrir la URL $url'; } @@ -50,8 +36,9 @@ class _DrawerMenuState extends State { @override Widget build(BuildContext context) { - final userProvider = Provider.of(context, listen: false); + final userProvider = Provider.of(context); UserModel? user = userProvider.user; + ScoresModel? score = userProvider.score; return Drawer( child: Column( @@ -280,7 +267,7 @@ class _DrawerMenuState extends State { subtitle: Row( children: [ RatingBar.builder( - initialRating: scoresModel?.average ?? 0, + initialRating: score?.average ?? 0, minRating: 1, direction: Axis.horizontal, allowHalfRating: true, @@ -298,7 +285,7 @@ class _DrawerMenuState extends State { ), const SizedBox(width: 5), Text( - '(${scoresModel?.total.toString()}) ${scoresModel?.average.toStringAsFixed(1)}'), + '(${score?.total.toString()}) ${score?.average.toStringAsFixed(1)}'), ], ), ), @@ -417,6 +404,7 @@ class _DrawerMenuState extends State { ListTile infoUser(BuildContext context, UserModel? user) { return ListTile( onTap: () { + Navigator.pop(context); if (kIsWeb) { Navigator.push( context, diff --git a/lib/src/models/scores_model.dart b/lib/src/models/scores_model.dart index 3c685a1..1b5a255 100644 --- a/lib/src/models/scores_model.dart +++ b/lib/src/models/scores_model.dart @@ -27,7 +27,7 @@ class ScoresModel { // Me static Future scoreTo( - String userReceived, bool isFromClient, bool userInfo) async { + String? userReceived, bool isFromClient, bool userInfo) async { final receivedScoresQuery = FirebaseFirestore.instance .collection('scores') .where('is_from_professional', isEqualTo: isFromClient) diff --git a/lib/src/providers/user_provider.dart b/lib/src/providers/user_provider.dart index b2e9a74..d7c899b 100644 --- a/lib/src/providers/user_provider.dart +++ b/lib/src/providers/user_provider.dart @@ -1,28 +1,39 @@ +// ignore_for_file: avoid_print + 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; + final tag = "UserProvider"; UserModel? _user; + ScoresModel? _score; UserProvider() { - _loadUser(); - } + var uid = FirebaseAuth.instance.currentUser?.uid; + print("$tag uid=$uid"); + if (uid == null) return; - Future _loadUser() async { - final documentSnapshot = await _firestore - .collection('users') - .doc(FirebaseAuth.instance.currentUser?.uid) - .get(); - - if (documentSnapshot.exists) { - final data = documentSnapshot.data() as Map; - _user = UserModel.fromFirestore(data); - notifyListeners(); - } + final 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); + print("$tag _user=$_user"); + print("$tag _score=$_score"); + notifyListeners(); + } + }, onDone: () { + print("Task Done"); + }, onError: (error) { + print("Some Error"); + }); } UserModel? get user => _user; + ScoresModel? get score => _score; }