From ad40b169333bc82ff187db3c3f687af6f6e142f5 Mon Sep 17 00:00:00 2001 From: Juan Felipe Duarte <70235683+DuarteJFelipe@users.noreply.github.com> Date: Wed, 26 Apr 2023 17:26:31 -0500 Subject: [PATCH] puntaje pro y cliente --- lib/src/components/drawer_menu.dart | 17 +++-- lib/src/components/drawer_professional.dart | 17 +++-- lib/src/models/score_model.dart | 72 --------------------- lib/src/models/user_model.dart | 16 ++--- lib/src/screens/cita.dart | 11 +++- lib/src/screens/professional.dart | 1 - lib/src/screens/reputation.dart | 8 +-- 7 files changed, 41 insertions(+), 101 deletions(-) delete mode 100644 lib/src/models/score_model.dart diff --git a/lib/src/components/drawer_menu.dart b/lib/src/components/drawer_menu.dart index 6398408..be12629 100644 --- a/lib/src/components/drawer_menu.dart +++ b/lib/src/components/drawer_menu.dart @@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_rating_bar/flutter_rating_bar.dart'; import 'package:prosappco/src/authentication/authentication_repository.dart'; import 'package:prosappco/src/components/photo_view.dart'; +import 'package:prosappco/src/models/score_model2.dart'; import 'package:prosappco/src/models/user_model.dart'; import 'package:prosappco/src/screens/profile.dart'; import 'package:prosappco/src/screens/prueba.dart'; @@ -17,6 +18,7 @@ class DrawerMenu extends StatefulWidget { class _DrawerMenuState extends State { final uid = AuthenticationRepository.instance.getCurrentUserUid(); UserModel? user; + ScoresModel? scoresModel; @override void initState() { @@ -27,6 +29,12 @@ class _DrawerMenuState extends State { (UserModel s) => setState(() => user = s), ); } + + if (scoresModel == null) { + ScoresModel.scoreFrom(uid.toString(), false).then( + (ScoresModel s) => setState(() => scoresModel = s), + ); + } } @override @@ -50,11 +58,6 @@ class _DrawerMenuState extends State { }, ), ); - // if (ModalRoute.of(context)?.settings.name != '/profile') { - // Navigator.pushNamed(context, '/profile'); - // } else { - // Scaffold.of(context).openEndDrawer(); - // } }, title: Text(user?.name ?? '', style: const TextStyle(fontWeight: FontWeight.bold)), @@ -219,7 +222,7 @@ class _DrawerMenuState extends State { subtitle: Row( children: [ RatingBar.builder( - initialRating: user?.score?.average ?? 0, + initialRating: scoresModel?.average ?? 0, minRating: 1, direction: Axis.horizontal, allowHalfRating: true, @@ -237,7 +240,7 @@ class _DrawerMenuState extends State { ), const SizedBox(width: 5), Text( - '(${user?.score?.total.toString()}) ${user?.score?.average.toString()}'), + '(${scoresModel?.total.toString()}) ${scoresModel?.average.toString()}'), ], ), ), diff --git a/lib/src/components/drawer_professional.dart b/lib/src/components/drawer_professional.dart index 59c9956..3350aea 100644 --- a/lib/src/components/drawer_professional.dart +++ b/lib/src/components/drawer_professional.dart @@ -1,20 +1,18 @@ -import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_auth/firebase_auth.dart'; -import 'package:firebase_storage/firebase_storage.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_rating_bar/flutter_rating_bar.dart'; import 'package:prosappco/src/authentication/authentication_repository.dart'; import 'package:prosappco/src/components/photo_view.dart'; -import 'package:prosappco/src/models/score_model.dart'; import 'package:prosappco/src/models/user_model.dart'; import 'package:prosappco/src/screens/calendar.dart'; import 'package:prosappco/src/screens/professional.dart'; -import 'package:prosappco/src/screens/professional_profile.dart'; import 'package:prosappco/src/screens/profile.dart'; import 'package:prosappco/src/screens/profile_pro.dart'; import 'package:prosappco/src/screens/reputation.dart'; +import '../models/score_model2.dart'; + class DrawerProfessional extends StatefulWidget { @override State createState() => _DrawerProfessionalState(); @@ -23,6 +21,7 @@ class DrawerProfessional extends StatefulWidget { class _DrawerProfessionalState extends State { final uid = AuthenticationRepository.instance.getCurrentUserUid(); UserModel? user; + ScoresModel? scoresModel; @override void initState() { @@ -33,6 +32,12 @@ class _DrawerProfessionalState extends State { (UserModel s) => setState(() => user = s), ); } + + if (scoresModel == null) { + ScoresModel.scoreTo(uid.toString(), false).then( + (ScoresModel s) => setState(() => scoresModel = s), + ); + } } @override @@ -249,7 +254,7 @@ class _DrawerProfessionalState extends State { subtitle: Row( children: [ RatingBar.builder( - initialRating: user?.score?.average ?? 0, + initialRating: scoresModel?.average ?? 0, minRating: 1, direction: Axis.horizontal, allowHalfRating: true, @@ -267,7 +272,7 @@ class _DrawerProfessionalState extends State { ), const SizedBox(width: 5), Text( - '(${user?.score?.total.toString()}) ${user?.score?.average.toString()}'), + '(${scoresModel?.total.toString()}) ${scoresModel?.average.toString()}'), ], ), ), diff --git a/lib/src/models/score_model.dart b/lib/src/models/score_model.dart deleted file mode 100644 index 60dac64..0000000 --- a/lib/src/models/score_model.dart +++ /dev/null @@ -1,72 +0,0 @@ -import 'package:cloud_firestore/cloud_firestore.dart'; -import 'package:firebase_storage/firebase_storage.dart'; - -class ScoreModel { - final int total; - final double average; - final List details; - - ScoreModel(this.total, this.average, this.details); - - static Future fromJson( - Map? json, bool requiredDetails) async { - try { - if (json == null) return ScoreModel(0, 0, []); - - List list = []; - if (requiredDetails) { - for (var e in (json['detalles'] as List)) { - list.add(await ScoreDetailsModel.fromJson(e)); - } - } - - return ScoreModel( - json['total'], - json['promedio'], - list, - ); - } catch (e) { - print('XD 54 $e'); - return ScoreModel(0, 0, []); - } - } -} - -class ScoreDetailsModel { - final String name; - final Reference? avatar; - final double score; - final String comment; - - ScoreDetailsModel(this.name, this.avatar, this.score, this.comment); - - static Future fromJson(Map? json) async { - final FirebaseStorage storage = FirebaseStorage.instance; - - try { - if (json == null) return ScoreDetailsModel("", null, 0, "null"); - var refUser = - (json['usuario_id'] as DocumentReference>); - - var data = await refUser.get(); - - var name = data.data()?["name"] ?? "no name"; - - Reference? avatarRef; - String? avatar = data.data()?["photo"]; - if (avatar != null) { - avatarRef = storage.ref().child(avatar); - } - - return ScoreDetailsModel( - name, - avatarRef, - (json['puntaje'] is int) ? json['puntaje'].toDouble() : json['puntaje'], - json['comentario'] ?? "ISNULL", - ); - } catch (e) { - print('XD $e'); - return ScoreDetailsModel("", null, 0, ""); - } - } -} diff --git a/lib/src/models/user_model.dart b/lib/src/models/user_model.dart index 4146665..a93d5a6 100644 --- a/lib/src/models/user_model.dart +++ b/lib/src/models/user_model.dart @@ -1,6 +1,5 @@ import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_storage/firebase_storage.dart'; -import 'package:prosappco/src/models/score_model.dart'; import 'package:prosappco/src/screens/professional.dart'; class UserModel { @@ -8,13 +7,13 @@ class UserModel { final String city; final String? state; final Reference? photo; - final ScoreModel? score; - UserModel(this.name, this.city, this.state, this.photo, this.score); + UserModel(this.name, this.city, this.state, this.photo); - static Future fromJson(Map? json) async { + static Future fromJson( + Map? json, String uid) async { try { - if (json == null) return UserModel('', '', null, null, null); + if (json == null) return UserModel('', '', null, null); String? avatar = json['photo']; return UserModel( @@ -22,11 +21,10 @@ class UserModel { json['city'], json['estado'], avatar != null ? storage.ref().child(avatar) : null, - await ScoreModel.fromJson(json['puntuacion'], false), ); } catch (e) { print('XD user $e'); - return UserModel('', '', null, null, null); + return UserModel('', '', null, null); } } @@ -35,10 +33,10 @@ class UserModel { final snapshot = await FirebaseFirestore.instance.collection('users').doc(uid).get(); final Map? data = snapshot.data(); - return fromJson(data); + return fromJson(data, uid); } catch (e) { print('Error getting user: $e'); - return UserModel('', '', null, null, null); + return UserModel('', '', null, null); } } } diff --git a/lib/src/screens/cita.dart b/lib/src/screens/cita.dart index f264523..7f89c97 100644 --- a/lib/src/screens/cita.dart +++ b/lib/src/screens/cita.dart @@ -6,6 +6,7 @@ import 'package:intl/intl.dart'; import 'package:prosappco/src/components/photo_view.dart'; import 'package:prosappco/src/components/pop_appbar.dart'; import 'package:prosappco/src/models/event_model.dart'; +import 'package:prosappco/src/models/score_model2.dart'; import 'package:prosappco/src/models/user_model.dart'; class CitaScreen extends StatefulWidget { @@ -21,6 +22,7 @@ class _CitaScreenState extends State { @override String nombre = ''; Reference? ref_photo; + ScoresModel? scoresModel; @override void initState() { @@ -31,6 +33,11 @@ class _CitaScreenState extends State { (UserModel s) => setState(() => user = s), ); } + if (scoresModel == null) { + ScoresModel.scoreFrom(uid.toString(), false).then( + (ScoresModel s) => setState(() => scoresModel = s), + ); + } } Widget build(BuildContext context) { @@ -88,7 +95,7 @@ class _CitaScreenState extends State { subtitle: Row( children: [ RatingBar.builder( - initialRating: user?.score?.average ?? 0, + initialRating: scoresModel?.average ?? 0, minRating: 1, direction: Axis.horizontal, allowHalfRating: true, @@ -105,7 +112,7 @@ class _CitaScreenState extends State { ), const SizedBox(width: 5), Text( - '(${user?.score?.total.toString()}) ${user?.score?.average.toString()}'), + '(${scoresModel?.total.toString()}) ${scoresModel?.average.toString()}'), ], ), ), diff --git a/lib/src/screens/professional.dart b/lib/src/screens/professional.dart index 5f64a69..45d59ce 100644 --- a/lib/src/screens/professional.dart +++ b/lib/src/screens/professional.dart @@ -6,7 +6,6 @@ import 'package:flutter/material.dart'; import 'package:prosappco/src/authentication/authentication_repository.dart'; import 'package:prosappco/src/components/photo_view.dart'; import 'package:prosappco/src/components/pop_appbar.dart'; -import 'package:prosappco/src/models/score_model.dart'; import 'package:prosappco/src/screens/professional_info.dart'; import '../models/score_model2.dart'; diff --git a/lib/src/screens/reputation.dart b/lib/src/screens/reputation.dart index c9e5de5..b218bc1 100644 --- a/lib/src/screens/reputation.dart +++ b/lib/src/screens/reputation.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_rating_bar/flutter_rating_bar.dart'; import 'package:prosappco/src/components/photo_view.dart'; import 'package:prosappco/src/components/pop_appbar.dart'; -import 'package:prosappco/src/models/score_model.dart'; +import 'package:prosappco/src/models/score_model2.dart'; import 'package:prosappco/src/screens/professional.dart'; class ReputationScreen extends StatelessWidget { @@ -22,17 +22,17 @@ class ReputationScreen extends StatelessWidget { body: SingleChildScrollView( child: Column( children: [ - //..._scoresList(professional.puntuacion.details), + ..._scoresList(professional.scores.scores), ], )), )); } - List _scoresList(List list) { + List _scoresList(List list) { return list.map((e) => _scoreItem(e)).toList(); } - Widget _scoreItem(ScoreDetailsModel scoreDetails) { + Widget _scoreItem(ScoreModel2 scoreDetails) { return ListTile( onTap: () {}, leading: ReferencePhoto(