puntaje pro y cliente

This commit is contained in:
Juan Felipe Duarte
2023-04-26 17:26:31 -05:00
parent c1747a45b9
commit ad40b16933
7 changed files with 41 additions and 101 deletions
+10 -7
View File
@@ -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<DrawerMenu> {
final uid = AuthenticationRepository.instance.getCurrentUserUid();
UserModel? user;
ScoresModel? scoresModel;
@override
void initState() {
@@ -27,6 +29,12 @@ class _DrawerMenuState extends State<DrawerMenu> {
(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<DrawerMenu> {
},
),
);
// 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<DrawerMenu> {
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<DrawerMenu> {
),
const SizedBox(width: 5),
Text(
'(${user?.score?.total.toString()}) ${user?.score?.average.toString()}'),
'(${scoresModel?.total.toString()}) ${scoresModel?.average.toString()}'),
],
),
),
+11 -6
View File
@@ -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<DrawerProfessional> createState() => _DrawerProfessionalState();
@@ -23,6 +21,7 @@ class DrawerProfessional extends StatefulWidget {
class _DrawerProfessionalState extends State<DrawerProfessional> {
final uid = AuthenticationRepository.instance.getCurrentUserUid();
UserModel? user;
ScoresModel? scoresModel;
@override
void initState() {
@@ -33,6 +32,12 @@ class _DrawerProfessionalState extends State<DrawerProfessional> {
(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<DrawerProfessional> {
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<DrawerProfessional> {
),
const SizedBox(width: 5),
Text(
'(${user?.score?.total.toString()}) ${user?.score?.average.toString()}'),
'(${scoresModel?.total.toString()}) ${scoresModel?.average.toString()}'),
],
),
),
-72
View File
@@ -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<ScoreDetailsModel> details;
ScoreModel(this.total, this.average, this.details);
static Future<ScoreModel> fromJson(
Map<String, dynamic>? json, bool requiredDetails) async {
try {
if (json == null) return ScoreModel(0, 0, []);
List<ScoreDetailsModel> list = [];
if (requiredDetails) {
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, "");
}
}
}
+7 -9
View File
@@ -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<UserModel> fromJson(Map<String, dynamic>? json) async {
static Future<UserModel> fromJson(
Map<String, dynamic>? 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<String, dynamic>? 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);
}
}
}
+9 -2
View File
@@ -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<CitaScreen> {
@override
String nombre = '';
Reference? ref_photo;
ScoresModel? scoresModel;
@override
void initState() {
@@ -31,6 +33,11 @@ class _CitaScreenState extends State<CitaScreen> {
(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<CitaScreen> {
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<CitaScreen> {
),
const SizedBox(width: 5),
Text(
'(${user?.score?.total.toString()}) ${user?.score?.average.toString()}'),
'(${scoresModel?.total.toString()}) ${scoresModel?.average.toString()}'),
],
),
),
-1
View File
@@ -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';
+4 -4
View File
@@ -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<Widget> _scoresList(List<ScoreDetailsModel> list) {
List<Widget> _scoresList(List<ScoreModel2> list) {
return list.map((e) => _scoreItem(e)).toList();
}
Widget _scoreItem(ScoreDetailsModel scoreDetails) {
Widget _scoreItem(ScoreModel2 scoreDetails) {
return ListTile(
onTap: () {},
leading: ReferencePhoto(