|
|
|
|
@ -1,9 +1,6 @@
|
|
|
|
|
import 'package:easy_localization/easy_localization.dart';
|
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
import 'package:flutter_rating_bar/flutter_rating_bar.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/core/utils/utils.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/theme/colors.dart';
|
|
|
|
|
@ -15,188 +12,289 @@ class DoctorRatingDetails extends StatelessWidget {
|
|
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
return Consumer<BookAppointmentsViewModel>(builder: (context, bookAppointmentsVM, child) {
|
|
|
|
|
return bookAppointmentsVM.isDoctorRatingDetailsLoading
|
|
|
|
|
? Utils.getLoadingWidget()
|
|
|
|
|
: Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
bookAppointmentsVM.doctorsProfileResponseModel.decimalDoctorRate!.toString().toText44(isBold: true, isEnglishOnly: true),
|
|
|
|
|
SizedBox(height: 4.h),
|
|
|
|
|
Row(
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
|
children: [
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
"${bookAppointmentsVM.doctorsProfileResponseModel.noOfPatientsRate} "
|
|
|
|
|
.toText16(weight: FontWeight.w500, color: AppColors.greyInfoTextColor, isEnglishOnly: true),
|
|
|
|
|
LocaleKeys.reviews.tr(context: context)
|
|
|
|
|
.toText16(weight: FontWeight.w500, color: AppColors.greyInfoTextColor,),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
if (bookAppointmentsVM.isDoctorRatingDetailsLoading) {
|
|
|
|
|
return Utils.getLoadingWidget();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
RatingBar(
|
|
|
|
|
initialRating: bookAppointmentsVM.doctorsProfileResponseModel.actualDoctorRate!.toDouble(),
|
|
|
|
|
direction: Axis.horizontal,
|
|
|
|
|
allowHalfRating: true,
|
|
|
|
|
itemCount: 5,
|
|
|
|
|
itemSize: 20.h,
|
|
|
|
|
ignoreGestures: true,
|
|
|
|
|
ratingWidget: RatingWidget(
|
|
|
|
|
full: Icon(
|
|
|
|
|
Icons.star,
|
|
|
|
|
color: AppColors.ratingColorYellow,
|
|
|
|
|
size: 24.h,
|
|
|
|
|
),
|
|
|
|
|
half: Icon(
|
|
|
|
|
Icons.star_half,
|
|
|
|
|
color: AppColors.ratingColorYellow,
|
|
|
|
|
),
|
|
|
|
|
empty: Icon(
|
|
|
|
|
Icons.star,
|
|
|
|
|
color: AppColors.ratingColorYellow,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
tapOnlyMode: true,
|
|
|
|
|
unratedColor: Colors.grey[500],
|
|
|
|
|
itemPadding: EdgeInsets.symmetric(horizontal: 4.0),
|
|
|
|
|
onRatingUpdate: (rating) {
|
|
|
|
|
print(rating);
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
SizedBox(height: 8.h),
|
|
|
|
|
Container(
|
|
|
|
|
margin: EdgeInsets.only(top: 10.0),
|
|
|
|
|
child: Row(
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
|
children: [
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
Container(
|
|
|
|
|
width: 100.0,
|
|
|
|
|
margin: EdgeInsets.only(top: 10.0, left: 15.0, right: 15.0),
|
|
|
|
|
child: Text(LocaleKeys.excellent.tr(context: context), style: TextStyle(fontSize: 13.0, color: AppColors.textColor, fontWeight: FontWeight.w600))),
|
|
|
|
|
getRatingLine(bookAppointmentsVM.doctorDetailsList[0].ratio, Colors.green[700]!),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
Container(
|
|
|
|
|
margin: EdgeInsets.only(top: 10.0, left: 10.0, right: 10.0),
|
|
|
|
|
child: Text("${getRatingWidth(bookAppointmentsVM.doctorDetailsList[0].ratio).round()}%", style: TextStyle(fontSize: 14.0, color: AppColors.textColor, fontWeight: FontWeight.w600, fontFamily: "Poppins")),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
final rating = bookAppointmentsVM.doctorsProfileResponseModel.decimalDoctorRate?.toDouble() ?? 0.0;
|
|
|
|
|
if (rating == 0 || rating == 0.0) {
|
|
|
|
|
return NoRatingDialog();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return DoctorRatingDialog(
|
|
|
|
|
averageRating: rating,
|
|
|
|
|
totalReviews: (bookAppointmentsVM.doctorsProfileResponseModel.noOfPatientsRate ?? 0).toInt(),
|
|
|
|
|
fiveStarPercent: bookAppointmentsVM.doctorDetailsList.isNotEmpty ? bookAppointmentsVM.doctorDetailsList[0].ratio.round() : 0,
|
|
|
|
|
fourStarPercent: bookAppointmentsVM.doctorDetailsList.length > 1 ? bookAppointmentsVM.doctorDetailsList[1].ratio.round() : 0,
|
|
|
|
|
threeStarPercent: bookAppointmentsVM.doctorDetailsList.length > 2 ? bookAppointmentsVM.doctorDetailsList[2].ratio.round() : 0,
|
|
|
|
|
twoStarPercent: bookAppointmentsVM.doctorDetailsList.length > 3 ? bookAppointmentsVM.doctorDetailsList[3].ratio.round() : 0,
|
|
|
|
|
oneStarPercent: bookAppointmentsVM.doctorDetailsList.length > 4 ? bookAppointmentsVM.doctorDetailsList[4].ratio.round() : 0,
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class DoctorRatingDialog extends StatelessWidget {
|
|
|
|
|
final double averageRating;
|
|
|
|
|
final int totalReviews;
|
|
|
|
|
final int fiveStarPercent;
|
|
|
|
|
final int fourStarPercent;
|
|
|
|
|
final int threeStarPercent;
|
|
|
|
|
final int twoStarPercent;
|
|
|
|
|
final int oneStarPercent;
|
|
|
|
|
|
|
|
|
|
const DoctorRatingDialog({
|
|
|
|
|
super.key,
|
|
|
|
|
required this.averageRating,
|
|
|
|
|
required this.totalReviews,
|
|
|
|
|
required this.fiveStarPercent,
|
|
|
|
|
required this.fourStarPercent,
|
|
|
|
|
required this.threeStarPercent,
|
|
|
|
|
required this.twoStarPercent,
|
|
|
|
|
required this.oneStarPercent,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
/// Returns the color for the rating badge and progress bar based on star level.
|
|
|
|
|
/// 5 stars -> bright green
|
|
|
|
|
/// 4 stars -> slightly darker green
|
|
|
|
|
/// 3 stars -> dark yellow / olive
|
|
|
|
|
/// 2 stars -> dark orange / brown-red
|
|
|
|
|
/// 1 star -> red
|
|
|
|
|
Color _getBarColor(int stars) {
|
|
|
|
|
switch (stars) {
|
|
|
|
|
case 5:
|
|
|
|
|
return AppColors.ratingFiveStarColor;
|
|
|
|
|
case 4:
|
|
|
|
|
return AppColors.ratingFourStarColor;
|
|
|
|
|
case 3:
|
|
|
|
|
return AppColors.ratingThreeStarColor;
|
|
|
|
|
case 2:
|
|
|
|
|
return AppColors.ratingTwoStarColor;
|
|
|
|
|
case 1:
|
|
|
|
|
return AppColors.ratingOneStarColor;
|
|
|
|
|
default:
|
|
|
|
|
return Colors.grey;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Returns the background color for the large rating badge based on the
|
|
|
|
|
/// overall average rating.
|
|
|
|
|
Color _getBadgeColor(double rating) {
|
|
|
|
|
if (rating == 0 || rating == 0.0) {
|
|
|
|
|
return AppColors.greyLightColor; // Grey color for no rating
|
|
|
|
|
} else if (rating >= 4.5) {
|
|
|
|
|
return AppColors.ratingFiveStarColor; // Bright green
|
|
|
|
|
} else if (rating >= 4.0) {
|
|
|
|
|
return AppColors.ratingBadgeFiveStarColor; // Green
|
|
|
|
|
} else if (rating >= 3.0) {
|
|
|
|
|
return AppColors.ratingThreeStarColor;
|
|
|
|
|
} else if (rating >= 2.0) {
|
|
|
|
|
return AppColors.ratingTwoStarColor;
|
|
|
|
|
} else {
|
|
|
|
|
return AppColors.ratingOneStarColor;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
final ratingRows = [
|
|
|
|
|
_RatingRowData(stars: 5, percent: fiveStarPercent),
|
|
|
|
|
_RatingRowData(stars: 4, percent: fourStarPercent),
|
|
|
|
|
_RatingRowData(stars: 3, percent: threeStarPercent),
|
|
|
|
|
_RatingRowData(stars: 2, percent: twoStarPercent),
|
|
|
|
|
_RatingRowData(stars: 1, percent: oneStarPercent),
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
return Container(
|
|
|
|
|
width: 420,
|
|
|
|
|
padding: const EdgeInsets.all(0),
|
|
|
|
|
child: Column(
|
|
|
|
|
mainAxisSize: MainAxisSize.min,
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
Row(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
Container(
|
|
|
|
|
width: 130,
|
|
|
|
|
height: 160,
|
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
|
color: _getBadgeColor(averageRating),
|
|
|
|
|
borderRadius: BorderRadius.circular(18),
|
|
|
|
|
),
|
|
|
|
|
Container(
|
|
|
|
|
child: Row(
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
|
children: [
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
Container(
|
|
|
|
|
width: 100.0,
|
|
|
|
|
margin: EdgeInsets.only(top: 10.0, left: 15.0, right: 15.0),
|
|
|
|
|
child: Text(LocaleKeys.vGood.tr(context: context), style: TextStyle(fontSize: 13.0, color: AppColors.textColor, fontWeight: FontWeight.w600))),
|
|
|
|
|
getRatingLine(bookAppointmentsVM.doctorDetailsList[1].ratio, Color(0xffB7B723)),
|
|
|
|
|
],
|
|
|
|
|
child: Column(
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
|
|
|
children: [
|
|
|
|
|
Text(
|
|
|
|
|
averageRating.toStringAsFixed(1),
|
|
|
|
|
style: TextStyle(
|
|
|
|
|
fontSize: 60,
|
|
|
|
|
fontWeight: FontWeight.w700,
|
|
|
|
|
color: averageRating == 0 || averageRating == 0.0 ? AppColors.textColor : AppColors.whiteColor,
|
|
|
|
|
height: 1.1,
|
|
|
|
|
),
|
|
|
|
|
Container(
|
|
|
|
|
margin: EdgeInsets.only(top: 10.0, left: 10.0, right: 10.0),
|
|
|
|
|
child: Text("${bookAppointmentsVM.doctorDetailsList[1].ratio.round()}%", style: TextStyle(fontSize: 14.0, color: AppColors.textColor, fontWeight: FontWeight.w600, fontFamily: "Poppins")),
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(height: 8),
|
|
|
|
|
Container(
|
|
|
|
|
padding: const EdgeInsets.symmetric(
|
|
|
|
|
horizontal: 16,
|
|
|
|
|
vertical: 6,
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
Container(
|
|
|
|
|
child: Row(
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
|
children: [
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
Container(
|
|
|
|
|
width: 100.0,
|
|
|
|
|
margin: EdgeInsets.only(top: 10.0, left: 15.0, right: 15.0),
|
|
|
|
|
child: Text(LocaleKeys.good.tr(context: context), style: TextStyle(fontSize: 13.0, color: AppColors.textColor, fontWeight: FontWeight.w600))),
|
|
|
|
|
getRatingLine(bookAppointmentsVM.doctorDetailsList[2].ratio, Color(0xffEBA727)),
|
|
|
|
|
],
|
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
|
color: averageRating == 0 || averageRating == 0.0 ? AppColors.greyF7Color : const Color.fromRGBO(0, 0, 0, 0.15),
|
|
|
|
|
borderRadius: BorderRadius.circular(8),
|
|
|
|
|
),
|
|
|
|
|
Container(
|
|
|
|
|
margin: EdgeInsets.only(top: 10.0, left: 10.0, right: 10.0),
|
|
|
|
|
child: Text("${bookAppointmentsVM.doctorDetailsList[2].ratio.round()}%", style: TextStyle(fontSize: 14.0, color: AppColors.textColor, fontWeight: FontWeight.w600, fontFamily: "Poppins")),
|
|
|
|
|
child: Text(
|
|
|
|
|
'$totalReviews Review',
|
|
|
|
|
style: TextStyle(
|
|
|
|
|
fontSize: 14,
|
|
|
|
|
fontWeight: FontWeight.w500,
|
|
|
|
|
color: averageRating == 0 || averageRating == 0.0 ? AppColors.textColor : AppColors.whiteColor,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
Container(
|
|
|
|
|
child: Row(
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
|
children: [
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
Container(
|
|
|
|
|
width: 100.0,
|
|
|
|
|
margin: EdgeInsets.only(top: 10.0, left: 15.0, right: 15.0),
|
|
|
|
|
child: Text(LocaleKeys.average.tr(context: context), style: TextStyle(fontSize: 13.0, color: AppColors.textColor, fontWeight: FontWeight.w600))),
|
|
|
|
|
getRatingLine(bookAppointmentsVM.doctorDetailsList[3].ratio, Color(0xffEB7227)),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
Container(
|
|
|
|
|
margin: EdgeInsets.only(top: 10.0, left: 10.0, right: 10.0),
|
|
|
|
|
child: Text("${bookAppointmentsVM.doctorDetailsList[3].ratio.round()}%", style: TextStyle(fontSize: 14.0, color: AppColors.textColor, fontWeight: FontWeight.w600, fontFamily: "Poppins")),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
const SizedBox(width: 16),
|
|
|
|
|
|
|
|
|
|
// ── Right: Star Breakdown ──
|
|
|
|
|
Expanded(
|
|
|
|
|
child: Column(
|
|
|
|
|
children: ratingRows
|
|
|
|
|
.map(
|
|
|
|
|
(row) => _buildRatingRow(row.stars, row.percent),
|
|
|
|
|
)
|
|
|
|
|
.toList(),
|
|
|
|
|
),
|
|
|
|
|
Container(
|
|
|
|
|
margin: EdgeInsets.only(bottom: 30.0),
|
|
|
|
|
child: Row(
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
|
children: [
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
Container(
|
|
|
|
|
width: 100.0,
|
|
|
|
|
margin: EdgeInsets.only(top: 10.0, left: 15.0, right: 15.0),
|
|
|
|
|
child: Text(LocaleKeys.average.tr(context: context), style: TextStyle(fontSize: 13.0, color: AppColors.textColor, fontWeight: FontWeight.w600))),
|
|
|
|
|
getRatingLine(bookAppointmentsVM.doctorDetailsList[4].ratio, Color(0xffE20C0C)),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
Container(
|
|
|
|
|
margin: EdgeInsets.only(top: 10.0, left: 10.0, right: 10.0),
|
|
|
|
|
child: Text("${bookAppointmentsVM.doctorDetailsList[4].ratio.round()}%", style: TextStyle(fontSize: 14.0, color: AppColors.textColor, fontWeight: FontWeight.w600, fontFamily: "Poppins")),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(height: 16),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Widget _buildRatingRow(int stars, int percent) {
|
|
|
|
|
return Padding(
|
|
|
|
|
padding: const EdgeInsets.symmetric(vertical: 5),
|
|
|
|
|
child: Row(
|
|
|
|
|
children: [
|
|
|
|
|
// Star icons
|
|
|
|
|
SizedBox(
|
|
|
|
|
width: 70,
|
|
|
|
|
child: Row(
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.start,
|
|
|
|
|
children: List.generate(
|
|
|
|
|
stars,
|
|
|
|
|
(_) => Icon(Icons.star, size: 14, color: AppColors.ratingStarIconColor),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
const SizedBox(width: 8),
|
|
|
|
|
Expanded(
|
|
|
|
|
child: ClipRRect(
|
|
|
|
|
borderRadius: BorderRadius.circular(6),
|
|
|
|
|
child: SizedBox(
|
|
|
|
|
height: 10,
|
|
|
|
|
child: LinearProgressIndicator(
|
|
|
|
|
value: percent / 100,
|
|
|
|
|
backgroundColor: AppColors.shimmerBaseColor,
|
|
|
|
|
valueColor: AlwaysStoppedAnimation<Color>(
|
|
|
|
|
_getBarColor(stars),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
double getRatingWidth(num patientNumber) {
|
|
|
|
|
var width = patientNumber;
|
|
|
|
|
return width.roundToDouble();
|
|
|
|
|
const SizedBox(width: 8),
|
|
|
|
|
|
|
|
|
|
// Percentage text
|
|
|
|
|
SizedBox(
|
|
|
|
|
width: 36,
|
|
|
|
|
child: Text(
|
|
|
|
|
'$percent%',
|
|
|
|
|
textAlign: TextAlign.right,
|
|
|
|
|
style: TextStyle(
|
|
|
|
|
fontSize: 14,
|
|
|
|
|
fontWeight: FontWeight.w600,
|
|
|
|
|
color: AppColors.ratingPercentageTextColor,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class _RatingRowData {
|
|
|
|
|
final int stars;
|
|
|
|
|
final int percent;
|
|
|
|
|
|
|
|
|
|
_RatingRowData({required this.stars, required this.percent});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class NoRatingDialog extends StatelessWidget {
|
|
|
|
|
const NoRatingDialog({super.key});
|
|
|
|
|
|
|
|
|
|
Widget getRatingLine(double patientNumber, Color color) {
|
|
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
return Container(
|
|
|
|
|
margin: EdgeInsets.only(top: 10.0),
|
|
|
|
|
child: Stack(children: [
|
|
|
|
|
SizedBox(
|
|
|
|
|
width: 150.0,
|
|
|
|
|
height: 7.h,
|
|
|
|
|
child: Container(
|
|
|
|
|
color: Colors.grey[300],
|
|
|
|
|
width: 420,
|
|
|
|
|
padding: const EdgeInsets.all(24),
|
|
|
|
|
child: Column(
|
|
|
|
|
mainAxisSize: MainAxisSize.min,
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
|
|
children: [
|
|
|
|
|
// Icon
|
|
|
|
|
Container(
|
|
|
|
|
width: 80,
|
|
|
|
|
height: 80,
|
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
|
color: AppColors.lightRedButtonColor,
|
|
|
|
|
borderRadius: BorderRadius.circular(24),
|
|
|
|
|
),
|
|
|
|
|
child: Icon(
|
|
|
|
|
Icons.star_border_rounded,
|
|
|
|
|
size: 48,
|
|
|
|
|
color: AppColors.primaryRedColor,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
const SizedBox(height: 20),
|
|
|
|
|
|
|
|
|
|
// Title
|
|
|
|
|
Text(
|
|
|
|
|
LocaleKeys.noRatingAvailable.tr(context: context),
|
|
|
|
|
style: TextStyle(
|
|
|
|
|
fontSize: 22,
|
|
|
|
|
fontWeight: FontWeight.w700,
|
|
|
|
|
color: AppColors.textColor,
|
|
|
|
|
),
|
|
|
|
|
textAlign: TextAlign.center,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
SizedBox(
|
|
|
|
|
width: patientNumber * 1.55,
|
|
|
|
|
height: 7.h,
|
|
|
|
|
child: Container(
|
|
|
|
|
color: color,
|
|
|
|
|
|
|
|
|
|
const SizedBox(height: 12),
|
|
|
|
|
|
|
|
|
|
// Description
|
|
|
|
|
Text(
|
|
|
|
|
LocaleKeys.doctorDoesNotHaveRating.tr(context: context),
|
|
|
|
|
style: TextStyle(
|
|
|
|
|
fontSize: 15,
|
|
|
|
|
fontWeight: FontWeight.w400,
|
|
|
|
|
color: AppColors.textColorLight,
|
|
|
|
|
),
|
|
|
|
|
textAlign: TextAlign.center,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
]),
|
|
|
|
|
|
|
|
|
|
const SizedBox(height: 8),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|