info de comentarios
This commit is contained in:
@@ -1,3 +1,6 @@
|
|||||||
|
import 'package:cloud_firestore/cloud_firestore.dart';
|
||||||
|
import 'package:firebase_storage/firebase_storage.dart';
|
||||||
|
|
||||||
class ScoreModel {
|
class ScoreModel {
|
||||||
final int total;
|
final int total;
|
||||||
final double average;
|
final double average;
|
||||||
@@ -5,17 +8,19 @@ class ScoreModel {
|
|||||||
|
|
||||||
ScoreModel(this.total, this.average, this.details);
|
ScoreModel(this.total, this.average, this.details);
|
||||||
|
|
||||||
factory ScoreModel.fromJson(Map<String, dynamic>? json) {
|
static Future<ScoreModel> fromJson(Map<String, dynamic>? json) async {
|
||||||
try {
|
try {
|
||||||
if (json == null) return ScoreModel(0, 0, []);
|
if (json == null) return ScoreModel(0, 0, []);
|
||||||
|
|
||||||
|
List<ScoreDetailsModel> list = [];
|
||||||
|
for (var e in (json['detalles'] as List<dynamic>)) {
|
||||||
|
list.add(await ScoreDetailsModel.fromJson(e));
|
||||||
|
}
|
||||||
|
|
||||||
return ScoreModel(
|
return ScoreModel(
|
||||||
json['total'],
|
json['total'],
|
||||||
json['promedio'],
|
json['promedio'],
|
||||||
(json['detalles'] as List<dynamic>?)
|
list,
|
||||||
?.map((e) => ScoreDetailsModel.fromJson(e))
|
|
||||||
.toList() ??
|
|
||||||
[],
|
|
||||||
);
|
);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
print('XD 54 $e');
|
print('XD 54 $e');
|
||||||
@@ -25,23 +30,40 @@ class ScoreModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class ScoreDetailsModel {
|
class ScoreDetailsModel {
|
||||||
final String userId;
|
final String name;
|
||||||
|
final Reference? avatar;
|
||||||
final double score;
|
final double score;
|
||||||
final String comment;
|
final String comment;
|
||||||
|
|
||||||
ScoreDetailsModel(this.userId, this.score, this.comment);
|
ScoreDetailsModel(this.name, this.avatar, this.score, this.comment);
|
||||||
|
|
||||||
|
static Future<ScoreDetailsModel> fromJson(Map<String, dynamic?>? json) async {
|
||||||
|
final FirebaseStorage storage = FirebaseStorage.instance;
|
||||||
|
|
||||||
factory ScoreDetailsModel.fromJson(Map<String, dynamic>? json) {
|
|
||||||
try {
|
try {
|
||||||
if (json == null) return ScoreDetailsModel("no user", 0, "");
|
if (json == null) return ScoreDetailsModel("", null, 0, "null");
|
||||||
|
var refUser =
|
||||||
|
(json['usuario_id'] as DocumentReference<Map<String, dynamic>>);
|
||||||
|
|
||||||
|
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(
|
return ScoreDetailsModel(
|
||||||
json['usuario_id'],
|
name,
|
||||||
|
avatarRef,
|
||||||
(json['puntaje'] is int) ? json['puntaje'].toDouble() : json['puntaje'],
|
(json['puntaje'] is int) ? json['puntaje'].toDouble() : json['puntaje'],
|
||||||
json['comentario'],
|
json['comentario'] ?? "ISNULL",
|
||||||
);
|
);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
print('XD $e');
|
print('XD $e');
|
||||||
return ScoreDetailsModel("no user", 0, "");
|
return ScoreDetailsModel("", null, 0, "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ Future<List<Professional>> getProfessionals() async {
|
|||||||
professionalRef: storage.ref().child(_photo),
|
professionalRef: storage.ref().child(_photo),
|
||||||
professionalEspecializado: especializaciones,
|
professionalEspecializado: especializaciones,
|
||||||
ubicacion: data['ubicacion'],
|
ubicacion: data['ubicacion'],
|
||||||
puntuacion: ScoreModel.fromJson(data['puntuacion']),
|
puntuacion: await ScoreModel.fromJson(data['puntuacion']),
|
||||||
);
|
);
|
||||||
professionals.add(professional);
|
professionals.add(professional);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -223,7 +223,7 @@ class _ProfessionalInfoScreenState extends State<ProfessionalInfoScreen> {
|
|||||||
return ListTile(
|
return ListTile(
|
||||||
onTap: () {},
|
onTap: () {},
|
||||||
leading: ReferencePhoto(
|
leading: ReferencePhoto(
|
||||||
ref: widget.professional.professionalRef,
|
ref: scoreDetails.avatar,
|
||||||
size: 50,
|
size: 50,
|
||||||
sizeCircle: 50,
|
sizeCircle: 50,
|
||||||
sizeIcon: 35,
|
sizeIcon: 35,
|
||||||
@@ -258,9 +258,9 @@ class _ProfessionalInfoScreenState extends State<ProfessionalInfoScreen> {
|
|||||||
child: Text.rich(
|
child: Text.rich(
|
||||||
TextSpan(
|
TextSpan(
|
||||||
children: [
|
children: [
|
||||||
const TextSpan(
|
TextSpan(
|
||||||
text: 'name, ',
|
text: '${scoreDetails.name}, ',
|
||||||
style: TextStyle(fontSize: 15, color: Colors.black),
|
style: const TextStyle(fontSize: 15, color: Colors.black),
|
||||||
),
|
),
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: '"${scoreDetails.comment}"',
|
text: '"${scoreDetails.comment}"',
|
||||||
|
|||||||
Reference in New Issue
Block a user