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 createState() => _ReputationScreenState(); } class _ReputationScreenState extends State { 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 _scoresList(List 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), ), ], ), ), ), ], )); } }