70 lines
1.8 KiB
Dart
70 lines
1.8 KiB
Dart
import 'package:cloud_firestore/cloud_firestore.dart';
|
|
import 'package:firebase_storage/firebase_storage.dart';
|
|
|
|
class ScoreModel {
|
|
final int total;
|
|
final double average;
|
|
final List<ScoreDetailsModel> details;
|
|
|
|
ScoreModel(this.total, this.average, this.details);
|
|
|
|
static Future<ScoreModel> fromJson(Map<String, dynamic>? json) async {
|
|
try {
|
|
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(
|
|
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<ScoreDetailsModel> fromJson(Map<String, dynamic?>? json) async {
|
|
final FirebaseStorage storage = FirebaseStorage.instance;
|
|
|
|
try {
|
|
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(
|
|
name,
|
|
avatarRef,
|
|
(json['puntaje'] is int) ? json['puntaje'].toDouble() : json['puntaje'],
|
|
json['comentario'] ?? "ISNULL",
|
|
);
|
|
} catch (e) {
|
|
print('XD $e');
|
|
return ScoreDetailsModel("", null, 0, "");
|
|
}
|
|
}
|
|
}
|