108 lines
3.0 KiB
Dart
108 lines
3.0 KiB
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/components/pop_appbar.dart';
|
|
import 'package:prosappco/src/models/scores_model.dart';
|
|
|
|
class ReputationScreen extends StatefulWidget {
|
|
const ReputationScreen({
|
|
super.key,
|
|
});
|
|
|
|
@override
|
|
State<ReputationScreen> createState() => _ReputationScreenState();
|
|
}
|
|
|
|
class _ReputationScreenState extends State<ReputationScreen> {
|
|
ScoresModel? scoresModel;
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
final uid = AuthenticationRepository.instance.getCurrentUserUid();
|
|
|
|
if (scoresModel == null) {
|
|
ScoresModel.scoreTo(uid.toString(), false, true).then(
|
|
(ScoresModel s) => setState(() => scoresModel = s),
|
|
);
|
|
}
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
appBar: PopAppbar(
|
|
onPressed: () {
|
|
Navigator.pop(context);
|
|
},
|
|
label: 'Reputación'),
|
|
body: SingleChildScrollView(
|
|
child: Column(
|
|
children: [
|
|
..._scoresList(scoresModel?.details ?? []),
|
|
],
|
|
)),
|
|
);
|
|
}
|
|
|
|
List<Widget> _scoresList(List<ScoreDetailModel> list) {
|
|
return list.map((e) => _scoreItem(e)).toList();
|
|
}
|
|
|
|
Widget _scoreItem(ScoreDetailModel scoreDetails) {
|
|
return ListTile(
|
|
onTap: () {},
|
|
leading: ReferencePhoto(
|
|
ref: scoreDetails.avatar,
|
|
size: 50,
|
|
sizeCircle: 50,
|
|
sizeIcon: 35,
|
|
),
|
|
title: Row(
|
|
children: [
|
|
RatingBar.builder(
|
|
initialRating: scoreDetails.score,
|
|
minRating: 1,
|
|
direction: Axis.horizontal,
|
|
allowHalfRating: true,
|
|
itemCount: 5,
|
|
itemSize: 22,
|
|
maxRating: 5,
|
|
itemPadding: const EdgeInsets.symmetric(horizontal: 0),
|
|
itemBuilder: (context, _) => const Icon(
|
|
Icons.star,
|
|
color: Color(0xFF2BA4EC),
|
|
),
|
|
onRatingUpdate: (rating) {},
|
|
ignoreGestures: true,
|
|
),
|
|
Text(
|
|
' (${scoreDetails.score})',
|
|
style: const TextStyle(color: Colors.black54, fontSize: 13),
|
|
)
|
|
],
|
|
),
|
|
subtitle: Row(
|
|
children: [
|
|
Expanded(
|
|
child: Text.rich(
|
|
TextSpan(
|
|
children: [
|
|
TextSpan(
|
|
text: '${scoreDetails.name}, ',
|
|
style: const TextStyle(fontSize: 15, color: Colors.black),
|
|
),
|
|
TextSpan(
|
|
text: '"${scoreDetails.comment}"',
|
|
style: const TextStyle(fontSize: 15, color: Colors.grey),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
],
|
|
));
|
|
}
|
|
}
|