From e48d0a49d78e0ff62c7dd8910d4357cf43f7534a Mon Sep 17 00:00:00 2001 From: Juan Felipe Duarte <70235683+DuarteJFelipe@users.noreply.github.com> Date: Mon, 17 Apr 2023 12:47:27 -0500 Subject: [PATCH] info de comentarios --- lib/src/models/score_model.dart | 46 +++++++++++++++++++------- lib/src/screens/professional.dart | 2 +- lib/src/screens/professional_info.dart | 8 ++--- 3 files changed, 39 insertions(+), 17 deletions(-) diff --git a/lib/src/models/score_model.dart b/lib/src/models/score_model.dart index 2047b61..ae9cae1 100644 --- a/lib/src/models/score_model.dart +++ b/lib/src/models/score_model.dart @@ -1,3 +1,6 @@ +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:firebase_storage/firebase_storage.dart'; + class ScoreModel { final int total; final double average; @@ -5,17 +8,19 @@ class ScoreModel { ScoreModel(this.total, this.average, this.details); - factory ScoreModel.fromJson(Map? json) { + static Future fromJson(Map? json) async { try { if (json == null) return ScoreModel(0, 0, []); + List list = []; + for (var e in (json['detalles'] as List)) { + list.add(await ScoreDetailsModel.fromJson(e)); + } + return ScoreModel( json['total'], json['promedio'], - (json['detalles'] as List?) - ?.map((e) => ScoreDetailsModel.fromJson(e)) - .toList() ?? - [], + list, ); } catch (e) { print('XD 54 $e'); @@ -25,23 +30,40 @@ class ScoreModel { } class ScoreDetailsModel { - final String userId; + final String name; + final Reference? avatar; final double score; final String comment; - ScoreDetailsModel(this.userId, this.score, this.comment); + ScoreDetailsModel(this.name, this.avatar, this.score, this.comment); + + static Future fromJson(Map? json) async { + final FirebaseStorage storage = FirebaseStorage.instance; - factory ScoreDetailsModel.fromJson(Map? json) { try { - if (json == null) return ScoreDetailsModel("no user", 0, ""); + 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( - json['usuario_id'], + name, + avatarRef, (json['puntaje'] is int) ? json['puntaje'].toDouble() : json['puntaje'], - json['comentario'], + json['comentario'] ?? "ISNULL", ); } catch (e) { print('XD $e'); - return ScoreDetailsModel("no user", 0, ""); + return ScoreDetailsModel("", null, 0, ""); } } } diff --git a/lib/src/screens/professional.dart b/lib/src/screens/professional.dart index 1a4b2c1..8c1b852 100644 --- a/lib/src/screens/professional.dart +++ b/lib/src/screens/professional.dart @@ -84,7 +84,7 @@ Future> getProfessionals() async { professionalRef: storage.ref().child(_photo), professionalEspecializado: especializaciones, ubicacion: data['ubicacion'], - puntuacion: ScoreModel.fromJson(data['puntuacion']), + puntuacion: await ScoreModel.fromJson(data['puntuacion']), ); professionals.add(professional); } diff --git a/lib/src/screens/professional_info.dart b/lib/src/screens/professional_info.dart index 96e08fa..1e3d347 100644 --- a/lib/src/screens/professional_info.dart +++ b/lib/src/screens/professional_info.dart @@ -223,7 +223,7 @@ class _ProfessionalInfoScreenState extends State { return ListTile( onTap: () {}, leading: ReferencePhoto( - ref: widget.professional.professionalRef, + ref: scoreDetails.avatar, size: 50, sizeCircle: 50, sizeIcon: 35, @@ -258,9 +258,9 @@ class _ProfessionalInfoScreenState extends State { child: Text.rich( TextSpan( children: [ - const TextSpan( - text: 'name, ', - style: TextStyle(fontSize: 15, color: Colors.black), + TextSpan( + text: '${scoreDetails.name}, ', + style: const TextStyle(fontSize: 15, color: Colors.black), ), TextSpan( text: '"${scoreDetails.comment}"',