Changes into Rating Bar

dev_v3.13.6_voipcall
Aamir Muhammad 12 months ago
parent 8bdcfcb764
commit b4bc99369f

@ -79,7 +79,7 @@ android {
} }
release { release {
debuggable false debuggable false
signingConfig signingConfigs.release signingConfig signingConfigs.debug
minifyEnabled true minifyEnabled true
shrinkResources true shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

@ -20,8 +20,8 @@ var PACKAGES_ORDERS = '/api/orders';
var PACKAGES_ORDER_HISTORY = '/api/orders/items'; var PACKAGES_ORDER_HISTORY = '/api/orders/items';
var PACKAGES_TAMARA_OPT = '/api/orders/paymentoptions/tamara'; var PACKAGES_TAMARA_OPT = '/api/orders/paymentoptions/tamara';
// var BASE_URL = 'http://10.50.100.198:2018/'; // var BASE_URL = 'http://10.50.100.198:2018/';
var BASE_URL = 'https://uat.hmgwebservices.com/'; // var BASE_URL = 'https://uat.hmgwebservices.com/';
// var BASE_URL = 'https://hmgwebservices.com/'; var BASE_URL = 'https://hmgwebservices.com/';
// var BASE_URL = 'https://orash.cloudsolutions.com.sa/'; // var BASE_URL = 'https://orash.cloudsolutions.com.sa/';
// var BASE_URL = 'https://vidauat.cloudsolutions.com.sa/'; // var BASE_URL = 'https://vidauat.cloudsolutions.com.sa/';
// var BASE_URL = 'https://vidamergeuat.cloudsolutions.com.sa/'; // var BASE_URL = 'https://vidamergeuat.cloudsolutions.com.sa/';

@ -68,9 +68,10 @@ class _MyApp extends State<MyApp> {
//0537503378 //0537503378
//1231755 //1231755
//2466305493
//0567184134 mobile //0567184134 mobile
//2466305493
// checkForUpdate() { // checkForUpdate() {

@ -1,6 +1,7 @@
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HealthCalculator/DiseasesByClinic.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HealthCalculator/DiseasesByClinic.dart';
import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/health-calculator/Bariatrics-viewmodel.dart'; import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/health-calculator/Bariatrics-viewmodel.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
@ -102,11 +103,21 @@ class DoctorList extends StatelessWidget {
itemSize: 20, itemSize: 20,
ignoreGestures: true, ignoreGestures: true,
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon(Icons.star), full: Icon(
half: Icon(Icons.star_half), Icons.star,
empty: Icon(Icons.star), color: CustomColors.accentColor,
),
half: Icon(
Icons.star_half,
color: CustomColors.accentColor,
),
empty: Icon(
Icons.star,
color: CustomColors.accentColor,
),
), ),
tapOnlyMode: true, tapOnlyMode: true,
unratedColor: Colors.grey[500],
itemPadding: EdgeInsets.symmetric(horizontal: 4.0), itemPadding: EdgeInsets.symmetric(horizontal: 4.0),
onRatingUpdate: (rating) { onRatingUpdate: (rating) {
print(rating); print(rating);

@ -341,15 +341,15 @@ class _DoctorProfileState extends State<DoctorProfile> with TickerProviderStateM
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon( full: Icon(
Icons.star, Icons.star,
color: Color(0XFFD02127), color: CustomColors.accentColor,
), ),
half: Icon( half: Icon(
Icons.star_half, Icons.star_half,
color: Color(0XFFD02127), color: CustomColors.accentColor,
), ),
empty: Icon( empty: Icon(
Icons.star_border, Icons.star_border,
color: Color(0XFFD02127), color: CustomColors.accentColor,
), ),
), ),
onRatingUpdate: (double value) {}, onRatingUpdate: (double value) {},

@ -8,6 +8,7 @@ import 'package:diplomaticquarterapp/models/Clinics/ClinicListResponse.dart';
import 'package:diplomaticquarterapp/pages/BookAppointment/DentalComplaints.dart'; import 'package:diplomaticquarterapp/pages/BookAppointment/DentalComplaints.dart';
import 'package:diplomaticquarterapp/pages/ToDoList/ObGyne/ObGyne-TimeSlots.dart'; import 'package:diplomaticquarterapp/pages/ToDoList/ObGyne/ObGyne-TimeSlots.dart';
import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart';
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
@ -140,12 +141,13 @@ class DoctorView extends StatelessWidget {
itemSize: 20, itemSize: 20,
ignoreGestures: true, ignoreGestures: true,
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon(Icons.star), full: Icon(Icons.star, color: CustomColors.accentColor,),
half: Icon(Icons.star_half), half: Icon(Icons.star_half, color: CustomColors.accentColor,),
empty: Icon(Icons.star), empty: Icon(Icons.star, color: CustomColors.accentColor,),
), ),
tapOnlyMode: true, tapOnlyMode: true,
itemPadding: EdgeInsets.symmetric(horizontal: 4.0), itemPadding: EdgeInsets.symmetric(horizontal: 4.0),
unratedColor: Colors.grey[500],
onRatingUpdate: (rating) { onRatingUpdate: (rating) {
print(rating); print(rating);
}, },

@ -380,11 +380,12 @@ class _AppointmentDetailsState extends State<AppointmentDetails> with SingleTick
itemSize: 20, itemSize: 20,
ignoreGestures: true, ignoreGestures: true,
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon(Icons.star), full: Icon(Icons.star, color: CustomColors.accentColor,),
half: Icon(Icons.star_half), half: Icon(Icons.star_half, color: CustomColors.accentColor,),
empty: Icon(Icons.star), empty: Icon(Icons.star, color: CustomColors.accentColor,),
), ),
tapOnlyMode: true, tapOnlyMode: true,
unratedColor: Colors.grey[500],
itemPadding: EdgeInsets.symmetric(horizontal: 4.0), itemPadding: EdgeInsets.symmetric(horizontal: 4.0),
onRatingUpdate: (rating) { onRatingUpdate: (rating) {
print(rating); print(rating);

@ -2,6 +2,7 @@ import 'package:diplomaticquarterapp/analytics/google-analytics.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart';
import 'package:diplomaticquarterapp/pages/MyAppointments/models/AppointmentType.dart'; import 'package:diplomaticquarterapp/pages/MyAppointments/models/AppointmentType.dart';
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
@ -174,11 +175,12 @@ class _ApointmentCardState extends State<AppointmentCard> {
itemSize: 20, itemSize: 20,
ignoreGestures: true, ignoreGestures: true,
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon(Icons.star), full: Icon(Icons.star, color: CustomColors.accentColor,),
half: Icon(Icons.star_half), half: Icon(Icons.star_half, color: CustomColors.accentColor,),
empty: Icon(Icons.star), empty: Icon(Icons.star, color: CustomColors.accentColor,),
), ),
tapOnlyMode: true, tapOnlyMode: true,
unratedColor: Colors.grey[500],
itemPadding: EdgeInsets.symmetric(horizontal: 4.0), itemPadding: EdgeInsets.symmetric(horizontal: 4.0),
onRatingUpdate: (rating) { onRatingUpdate: (rating) {
print(rating); print(rating);

@ -54,7 +54,7 @@ class ToDo extends StatefulWidget {
late MyInAppBrowser browser; late MyInAppBrowser browser;
bool isShowAppBar = true; bool isShowAppBar = true;
Function()? onBackClick; Function()? onBackClick;
bool isFromMyAppointments; bool isFromMyAppointments;
AppoitmentAllHistoryResultList? appointment; AppoitmentAllHistoryResultList? appointment;
@ -67,7 +67,7 @@ class ToDo extends StatefulWidget {
class _ToDoState extends State<ToDo> with SingleTickerProviderStateMixin { class _ToDoState extends State<ToDo> with SingleTickerProviderStateMixin {
AppSharedPreferences sharedPref = AppSharedPreferences(); AppSharedPreferences sharedPref = AppSharedPreferences();
List<ImagesInfo> imagesInfo =[]; List<ImagesInfo> imagesInfo = [];
late ToDoCountProviderModel toDoProvider; late ToDoCountProviderModel toDoProvider;
late CountdownTimerController controller; late CountdownTimerController controller;
@ -318,15 +318,15 @@ class _ToDoState extends State<ToDo> with SingleTickerProviderStateMixin {
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon( full: Icon(
Icons.star, Icons.star,
color: Colors.yellow[700], color: CustomColors.accentColor,
), ),
half: Icon( half: Icon(
Icons.star_half, Icons.star_half,
color: Colors.yellow[700], color: CustomColors.accentColor,
), ),
empty: Icon( empty: Icon(
Icons.star_border, Icons.star_border,
color: Colors.grey[500], color: CustomColors.accentColor,
), ),
), ),
onRatingUpdate: (double value) {}, onRatingUpdate: (double value) {},
@ -858,7 +858,7 @@ class _ToDoState extends State<ToDo> with SingleTickerProviderStateMixin {
}); });
} }
dataLoaded = true; dataLoaded = true;
if(widget.isFromMyAppointments) { if (widget.isFromMyAppointments) {
getPatientShare(context, widget.appointment!); getPatientShare(context, widget.appointment!);
} }
}); });
@ -1025,23 +1025,29 @@ class _ToDoState extends State<ToDo> with SingleTickerProviderStateMixin {
openPaymentDialog(AppoitmentAllHistoryResultList appo, PatientShareResponse patientShareResponse) { openPaymentDialog(AppoitmentAllHistoryResultList appo, PatientShareResponse patientShareResponse) {
showGeneralDialog( showGeneralDialog(
barrierColor: Colors.black.withOpacity(0.5), barrierColor: Colors.black.withOpacity(0.5),
transitionBuilder: (context, a1, a2, widget) { transitionBuilder: (context, a1, a2, widget) {
final curvedValue = Curves.easeInOutBack.transform(a1.value) - 1.0; final curvedValue = Curves.easeInOutBack.transform(a1.value) - 1.0;
return Transform( return Transform(
transform: Matrix4.translationValues(0.0, curvedValue * 200, 0.0), transform: Matrix4.translationValues(0.0, curvedValue * 200, 0.0),
child: Opacity( child: Opacity(
opacity: a1.value, opacity: a1.value,
child: PaymentDialog(appo: appo, patientShareResponse: patientShareResponse, onPaymentMethodSelected: (){}, isCashPatient: isCash,), child: PaymentDialog(
), appo: appo,
); patientShareResponse: patientShareResponse,
}, onPaymentMethodSelected: () {},
transitionDuration: Duration(milliseconds: 500), isCashPatient: isCash,
barrierDismissible: false, ),
barrierLabel: '', ),
context: context, );
pageBuilder: (context, animation1, animation2) { return SizedBox();}) },
.then((value) { transitionDuration: Duration(milliseconds: 500),
barrierDismissible: false,
barrierLabel: '',
context: context,
pageBuilder: (context, animation1, animation2) {
return SizedBox();
}).then((value) {
if (value != null) { if (value != null) {
navigateToPaymentMethod(context, value as PatientShareResponse, appo); navigateToPaymentMethod(context, value as PatientShareResponse, appo);
projectViewModel.analytics.todoList.to_do_list_confirm_payment_details(appo); projectViewModel.analytics.todoList.to_do_list_confirm_payment_details(appo);

@ -119,11 +119,12 @@ class _TodoListCardState extends State<TodoListCard> {
itemSize: 20, itemSize: 20,
ignoreGestures: true, ignoreGestures: true,
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon(Icons.star), full: Icon(Icons.star, color: CustomColors.accentColor,),
half: Icon(Icons.star_half), half: Icon(Icons.star_half, color: CustomColors.accentColor,),
empty: Icon(Icons.star), empty: Icon(Icons.star, color: CustomColors.accentColor,),
), ),
tapOnlyMode: true, tapOnlyMode: true,
unratedColor: Colors.grey[500],
itemPadding: EdgeInsets.symmetric(horizontal: 4.0), itemPadding: EdgeInsets.symmetric(horizontal: 4.0),
onRatingUpdate: (rating) { onRatingUpdate: (rating) {
print(rating); print(rating);

@ -1,82 +1,82 @@
import 'dart:async'; // import 'dart:async';
import 'dart:core'; // import 'dart:core';
//
import 'package:diplomaticquarterapp/pages/conference/widgets/noise_box.dart'; // import 'package:diplomaticquarterapp/pages/conference/widgets/noise_box.dart';
import 'package:flutter/material.dart'; // import 'package:flutter/material.dart';
import 'package:flutter_webrtc/flutter_webrtc.dart'; // import 'package:flutter_webrtc/flutter_webrtc.dart';
//
import 'draggable_cam.dart'; // import 'draggable_cam.dart';
//
class CamViewWidget extends StatefulWidget { // class CamViewWidget extends StatefulWidget {
RTCVideoRenderer? localRenderer; // RTCVideoRenderer? localRenderer;
RTCVideoRenderer? remoteRenderer; // RTCVideoRenderer? remoteRenderer;
MediaStream? localStream; // MediaStream? localStream;
BoxConstraints? constraints; // BoxConstraints? constraints;
StreamController<bool>? onButtonBarVisibleStreamController; // StreamController<bool>? onButtonBarVisibleStreamController;
StreamController<double>? onButtonBarHeightStreamController; // StreamController<double>? onButtonBarHeightStreamController;
//
CamViewWidget({this.localRenderer, this.remoteRenderer, this.constraints, this.onButtonBarVisibleStreamController, this.onButtonBarHeightStreamController}); // CamViewWidget({this.localRenderer, this.remoteRenderer, this.constraints, this.onButtonBarVisibleStreamController, this.onButtonBarHeightStreamController});
//
@override // @override
_CamViewWidgetState createState() => _CamViewWidgetState(); // _CamViewWidgetState createState() => _CamViewWidgetState();
} // }
//
class _CamViewWidgetState extends State<CamViewWidget> { // class _CamViewWidgetState extends State<CamViewWidget> {
@override // @override
void initState() { // void initState() {
super.initState(); // super.initState();
} // }
//
@override // @override
Widget build(BuildContext context) { // Widget build(BuildContext context) {
return Container( // return Container(
width: double.infinity, // width: double.infinity,
height: double.infinity, // height: double.infinity,
child: Stack( // child: Stack(
children: [ // children: [
FractionallySizedBox( // FractionallySizedBox(
heightFactor: 1, widthFactor: 1, // heightFactor: 1, widthFactor: 1,
child: Container( // child: Container(
color: Colors.black87, // color: Colors.black87,
child: RTCVideoView(widget.remoteRenderer!, mirror: true,filterQuality: FilterQuality.medium,), // // child: RTCVideoView(widget.remoteRenderer!, mirror: true,filterQuality: FilterQuality.medium,),
), // ),
), // ),
//
if(widget.remoteRenderer!.srcObject == null) // if(widget.remoteRenderer!.srcObject == null)
Positioned.fill(child: _buildNoiseBox()), // Positioned.fill(child: _buildNoiseBox()),
//
Positioned.fill( // // Positioned.fill(
child: RTCVideoView(widget.remoteRenderer!) // // child: RTCVideoView(widget.remoteRenderer!)
), // // ),
//
DraggableCam( // // DraggableCam(
key: Key('publisher'), // // key: Key('publisher'),
onButtonBarHeight: widget.onButtonBarHeightStreamController!.stream, // // onButtonBarHeight: widget.onButtonBarHeightStreamController!.stream,
onButtonBarVisible: widget.onButtonBarVisibleStreamController!.stream, // // onButtonBarVisible: widget.onButtonBarVisibleStreamController!.stream,
availableScreenSize: widget.constraints!.biggest, // // availableScreenSize: widget.constraints!.biggest,
child: RTCVideoView(widget.localRenderer!) // // child: RTCVideoView(widget.localRenderer!)
), // // ),
//
if(widget.remoteRenderer!.srcObject == null) // if(widget.remoteRenderer!.srcObject == null)
Container( // Container(
margin: EdgeInsets.all(MediaQuery.of(context).size.width/8), // margin: EdgeInsets.all(MediaQuery.of(context).size.width/8),
child: Text( // child: Text(
'Waiting for another participant to connect to the call...', // 'Waiting for another participant to connect to the call...',
key: Key('text-wait'), // key: Key('text-wait'),
textAlign: TextAlign.center, // textAlign: TextAlign.center,
style: TextStyle(color: Colors.white), // style: TextStyle(color: Colors.white),
) // )
), // ),
], // ],
), // ),
); // );
} // }
//
//
Widget _buildNoiseBox() { // Widget _buildNoiseBox() {
return NoiseBox( // return NoiseBox(
density: NoiseBoxDensity.xHigh, // density: NoiseBoxDensity.xHigh,
backgroundColor: Colors.grey.shade900, // backgroundColor: Colors.grey.shade900,
); // );
} // }
} // }

@ -10,7 +10,7 @@ import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils.dart' as utils ; import 'package:diplomaticquarterapp/uitl/utils.dart' as utils;
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/StarRating.dart'; import 'package:diplomaticquarterapp/widgets/others/StarRating.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
@ -22,7 +22,6 @@ import 'package:provider/provider.dart';
import 'base/base_view.dart'; import 'base/base_view.dart';
dynamic languageID; dynamic languageID;
class FinalProductsPage extends StatefulWidget { class FinalProductsPage extends StatefulWidget {
@ -216,21 +215,19 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
Container( Container(
margin: EdgeInsets.fromLTRB(0, 16, 0, 0), margin: EdgeInsets.fromLTRB(0, 16, 0, 0),
alignment: Alignment.center, alignment: Alignment.center,
child: (model.finalProducts[index].images != null && child: (model.finalProducts[index].images != null && model.finalProducts[index].images!.length > 0)
model.finalProducts[index].images!.length > 0) ? Image.network(
? Image.network( model.finalProducts[index].images![0].src!,
model.finalProducts[index].images![0].src!, fit: BoxFit.cover,
fit: BoxFit.cover, height: 80,
height: 80, width: 80,
width: 80, )
: Image.asset(
) "assets/images/no_image.png",
: Image.asset( fit: BoxFit.cover,
"assets/images/no_image.png", height: 80,
fit: BoxFit.cover, width: 80,
height: 80, ),
width: 80,
),
// Image.network( // Image.network(
// model.finalProducts[index].images.isNotEmpty // model.finalProducts[index].images.isNotEmpty
// ? model.finalProducts[index].images[0].thumb // ? model.finalProducts[index].images[0].thumb
@ -245,12 +242,12 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
padding: EdgeInsets.all(4), padding: EdgeInsets.all(4),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Color(0xffb23838), color: Color(0xffb23838),
// borderRadius: BorderRadius.only(topLeft: Radius.circular(6) // borderRadius: BorderRadius.only(topLeft: Radius.circular(6)
// ), // ),
), ),
child: model.finalProducts[index].rxMessage != null child: model.finalProducts[index].rxMessage != null
? Texts( ? Texts(
projectProvider.isArabic ? model.finalProducts[index].rxMessagen : model.finalProducts[index].rxMessage, projectProvider.isArabic ? model.finalProducts[index].rxMessagen : model.finalProducts[index].rxMessage,
color: Colors.white, color: Colors.white,
regular: true, regular: true,
fontSize: 10, fontSize: 10,
@ -284,7 +281,8 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
), ),
), ),
), ),
Texts(projectViewModel.isArabic ? model.finalProducts[index].namen : model.finalProducts[index].name, Texts(
projectViewModel.isArabic ? model.finalProducts[index].namen : model.finalProducts[index].name,
// model.finalProducts[index].name, // model.finalProducts[index].name,
regular: true, regular: true,
fontSize: 12, fontSize: 12,
@ -305,7 +303,7 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
// ? (model.finalProducts[index].approvedRatingSum.toDouble() / model.finalProducts[index].approvedRatingSum.toDouble()).toDouble() // ? (model.finalProducts[index].approvedRatingSum.toDouble() / model.finalProducts[index].approvedRatingSum.toDouble()).toDouble()
// : 0, // : 0,
// forceStars: true), // forceStars: true),
RatingBar( RatingBar(
itemSize: 20.0, itemSize: 20.0,
allowHalfRating: true, allowHalfRating: true,
@ -313,15 +311,15 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon( full: Icon(
Icons.star, Icons.star,
color: Colors.yellow[700], color: CustomColors.accentColor,
), ),
half: Icon( half: Icon(
Icons.star_half, Icons.star_half,
color: Colors.yellow[700], color: CustomColors.accentColor,
), ),
empty: Icon( empty: Icon(
Icons.star_border, Icons.star_border,
color: Colors.grey[500], color: CustomColors.accentColor,
), ),
), ),
onRatingUpdate: (double value) {}, onRatingUpdate: (double value) {},
@ -330,7 +328,6 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
tapOnlyMode: false, tapOnlyMode: false,
), ),
Texts( Texts(
"(${model.finalProducts[index].approvedTotalReviews})", "(${model.finalProducts[index].approvedTotalReviews})",
regular: true, regular: true,
@ -409,21 +406,19 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
Container( Container(
margin: EdgeInsets.fromLTRB(0, 0, 0, 8), margin: EdgeInsets.fromLTRB(0, 0, 0, 8),
alignment: Alignment.center, alignment: Alignment.center,
child:(model.finalProducts[index].images != null && child: (model.finalProducts[index].images != null && model.finalProducts[index].images!.length > 0)
model.finalProducts[index].images!.length > 0)
? Image.network( ? Image.network(
model.finalProducts[index].images![0].src!, model.finalProducts[index].images![0].src!,
fit: BoxFit.cover, fit: BoxFit.cover,
height: 80, height: 80,
width: 80, width: 80,
)
)
: Image.asset( : Image.asset(
"assets/images/no_image.png", "assets/images/no_image.png",
fit: BoxFit.cover, fit: BoxFit.cover,
height: 80, height: 80,
width: 80, width: 80,
), ),
// Image.network( // Image.network(
// model.finalProducts[index].images.isNotEmpty // model.finalProducts[index].images.isNotEmpty
// ? model.finalProducts[index].images[0].thumb // ? model.finalProducts[index].images[0].thumb
@ -443,14 +438,14 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
color: Color(0xffb23838), color: Color(0xffb23838),
//borderRadius: BorderRadius.only(topLeft: Radius.circular(5)), //borderRadius: BorderRadius.only(topLeft: Radius.circular(5)),
), ),
child:model.finalProducts[index].rxMessage != null child: model.finalProducts[index].rxMessage != null
? Texts( ? Texts(
projectProvider.isArabic ? model.finalProducts[index].rxMessagen : model.finalProducts[index].rxMessage, projectProvider.isArabic ? model.finalProducts[index].rxMessagen : model.finalProducts[index].rxMessage,
color: Colors.white, color: Colors.white,
regular: true, regular: true,
fontSize: 8, fontSize: 8,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
) )
: Texts(""), : Texts(""),
// Texts( // Texts(
// model.finalProducts[index].rxMessage != null ? model.finalProducts[index].rxMessage : "", // model.finalProducts[index].rxMessage != null ? model.finalProducts[index].rxMessage : "",
@ -479,7 +474,8 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
), ),
Container( Container(
width: MediaQuery.of(context).size.width * 0.55, width: MediaQuery.of(context).size.width * 0.55,
child: Texts(projectViewModel.isArabic ? model.finalProducts[index].namen : model.finalProducts[index].name, child: Texts(
projectViewModel.isArabic ? model.finalProducts[index].namen : model.finalProducts[index].name,
// model.finalProducts[index].name, // model.finalProducts[index].name,
regular: true, regular: true,
fontSize: 13.2, fontSize: 13.2,
@ -510,15 +506,15 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon( full: Icon(
Icons.star, Icons.star,
color: Colors.yellow[700], color: CustomColors.accentColor,
), ),
half: Icon( half: Icon(
Icons.star_half, Icons.star_half,
color: Colors.yellow[700], color: CustomColors.accentColor,
), ),
empty: Icon( empty: Icon(
Icons.star_border, Icons.star_border,
color: Colors.grey[500], color: CustomColors.accentColor,
), ),
), ),
onRatingUpdate: (double value) {}, onRatingUpdate: (double value) {},
@ -527,8 +523,6 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
tapOnlyMode: false, tapOnlyMode: false,
), ),
Texts( Texts(
"(${model.finalProducts[index].approvedTotalReviews})", "(${model.finalProducts[index].approvedTotalReviews})",
regular: true, regular: true,
@ -555,8 +549,6 @@ class _FinalProductsPageState extends State<FinalProductsPage> {
GifLoaderDialogUtils.hideDialog(context); GifLoaderDialogUtils.hideDialog(context);
// Navigator.push(context, FadePage(page: CartOrderPage())); // Navigator.push(context, FadePage(page: CartOrderPage()));
utils.Utils.navigateToCartPage(); utils.Utils.navigateToCartPage();
} else { } else {
AppToast.showErrorToast(message: TranslationBase.of(context).needPrescription); AppToast.showErrorToast(message: TranslationBase.of(context).needPrescription);
} }

@ -435,7 +435,7 @@ class _LandingPageState extends State<LandingPage> with WidgetsBindingObserver {
String caller = callerId.split("*")[3]; String caller = callerId.split("*")[3];
String receiver = callerId.split("*")[4]; String receiver = callerId.split("*")[4];
String host = callerId.split("*")[5]; String host = callerId.split("*")[5];
await Navigator.push(context, MaterialPageRoute(builder: (context) => StartVideoCall(caller: caller, receiver: receiver, iAmCaller: false, host: host))); // await Navigator.push(context, MaterialPageRoute(builder: (context) => StartVideoCall(caller: caller, receiver: receiver, iAmCaller: false, host: host)));
} }
getNotificationCount(token) async { getNotificationCount(token) async {

@ -238,11 +238,12 @@ class _EyeHomePageState extends State<EyeHomePage> with SingleTickerProviderStat
allowHalfRating: true, allowHalfRating: true,
ignoreGestures: true, ignoreGestures: true,
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon(Icons.star), full: Icon(Icons.star, color: CustomColors.accentColor,),
half: Icon(Icons.star_half), half: Icon(Icons.star_half, color: CustomColors.accentColor,),
empty: Icon(Icons.star), empty: Icon(Icons.star, color: CustomColors.accentColor,),
), ),
tapOnlyMode: true, tapOnlyMode: true,
unratedColor: Colors.grey[500],
itemPadding: EdgeInsets.symmetric(horizontal: 4.0), itemPadding: EdgeInsets.symmetric(horizontal: 4.0),
onRatingUpdate: (rating) { onRatingUpdate: (rating) {
print(rating); print(rating);

@ -107,20 +107,20 @@ class ReportListWidget extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
RatingBar( RatingBar(
initialRating:report.actualDoctorRate == null ? 0.0: report.actualDoctorRate!.toDouble(), initialRating: report.actualDoctorRate == null ? 0.0 : report.actualDoctorRate!.toDouble(),
itemSize: 16, itemSize: 16,
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon( full: Icon(
Icons.star, Icons.star,
color: Colors.yellow[700], color: CustomColors.accentColor,
), ),
half: Icon( half: Icon(
Icons.star_half, Icons.star_half,
color: Colors.yellow[700], color: CustomColors.accentColor,
), ),
empty: Icon( empty: Icon(
Icons.star_border, Icons.star_border,
color: Colors.grey[500], color: CustomColors.accentColor,
), ),
), ),
onRatingUpdate: (double value) {}, onRatingUpdate: (double value) {},

@ -2,6 +2,7 @@ import 'package:diplomaticquarterapp/core/viewModels/medical/reports_view_model.
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/pages/feedback/appointment_history.dart'; import 'package:diplomaticquarterapp/pages/feedback/appointment_history.dart';
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils_new.dart'; import 'package:diplomaticquarterapp/uitl/utils_new.dart';
@ -114,15 +115,15 @@ class MedicalReports extends StatelessWidget {
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon( full: Icon(
Icons.star, Icons.star,
color: Colors.yellow[700], color: CustomColors.accentColor,
), ),
half: Icon( half: Icon(
Icons.star_half, Icons.star_half,
color: Colors.yellow[700], color: CustomColors.accentColor,
), ),
empty: Icon( empty: Icon(
Icons.star_border, Icons.star_border,
color: Colors.grey[500], color: CustomColors.accentColor,
), ),
), ),
onRatingUpdate: (double value) {}, onRatingUpdate: (double value) {},
@ -130,7 +131,6 @@ class MedicalReports extends StatelessWidget {
updateOnDrag: false, updateOnDrag: false,
tapOnlyMode: false, tapOnlyMode: false,
), ),
Icon(Icons.email, color: Color(0xff2B353E)) Icon(Icons.email, color: Color(0xff2B353E))
], ],
), ),

@ -1,5 +1,6 @@
import 'package:diplomaticquarterapp/core/viewModels/offers_Categorise_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/offers_Categorise_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/StarRating.dart'; import 'package:diplomaticquarterapp/widgets/others/StarRating.dart';
@ -343,15 +344,15 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon( full: Icon(
Icons.star, Icons.star,
color: Colors.yellow[700], color: CustomColors.accentColor,
), ),
half: Icon( half: Icon(
Icons.star_half, Icons.star_half,
color: Colors.yellow[700], color: CustomColors.accentColor,
), ),
empty: Icon( empty: Icon(
Icons.star_border, Icons.star_border,
color: Colors.grey[500], color: CustomColors.accentColor,
), ),
), ),
onRatingUpdate: (double value) {}, onRatingUpdate: (double value) {},
@ -539,15 +540,15 @@ class _OffersCategorisePageState extends State<OffersCategorisePage> {
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon( full: Icon(
Icons.star, Icons.star,
color: Colors.yellow[700], color: CustomColors.accentColor,
), ),
half: Icon( half: Icon(
Icons.star_half, Icons.star_half,
color: Colors.yellow[700], color: CustomColors.accentColor,
), ),
empty: Icon( empty: Icon(
Icons.star_border, Icons.star_border,
color: Colors.grey[500], color: CustomColors.accentColor,
), ),
), ),
onRatingUpdate: (double value) {}, onRatingUpdate: (double value) {},

@ -110,11 +110,12 @@ class OfferAndPackagesDetailState extends State<OfferAndPackagesDetail> {
itemSize: 20, itemSize: 20,
ignoreGestures: true, ignoreGestures: true,
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon(Icons.star), full: Icon(Icons.star, color: CustomColors.accentColor,),
half: Icon(Icons.star_half), half: Icon(Icons.star_half, color: CustomColors.accentColor,),
empty: Icon(Icons.star), empty: Icon(Icons.star, color: CustomColors.accentColor,),
), ),
tapOnlyMode: true, tapOnlyMode: true,
unratedColor: Colors.grey[500],
itemPadding: EdgeInsets.symmetric(horizontal: 4.0), itemPadding: EdgeInsets.symmetric(horizontal: 4.0),
onRatingUpdate: (rating) { onRatingUpdate: (rating) {
print(rating); print(rating);

@ -734,15 +734,15 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon( full: Icon(
Icons.star, Icons.star,
color: Colors.yellow[700], color: CustomColors.accentColor,
), ),
half: Icon( half: Icon(
Icons.star_half, Icons.star_half,
color: Colors.yellow[700], color: CustomColors.accentColor,
), ),
empty: Icon( empty: Icon(
Icons.star_border, Icons.star_border,
color: Colors.grey[500], color: CustomColors.accentColor,
), ),
), ),
onRatingUpdate: (double value) {}, onRatingUpdate: (double value) {},
@ -890,16 +890,13 @@ class _ParentCategorisePageState extends State<ParentCategorisePage> {
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon( full: Icon(
Icons.star, Icons.star,
color: Colors.yellow[700], color: CustomColors.accentColor, ),
),
half: Icon( half: Icon(
Icons.star_half, Icons.star_half,
color: Colors.yellow[700], color: CustomColors.accentColor, ),
),
empty: Icon( empty: Icon(
Icons.star_border, Icons.star_border,
color: Colors.grey[500], color: CustomColors.accentColor, ),
),
), ),
onRatingUpdate: (double value) {}, onRatingUpdate: (double value) {},
unratedColor: Colors.grey[500], unratedColor: Colors.grey[500],

@ -1,12 +1,12 @@
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/review_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/review_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_rating_bar/flutter_rating_bar.dart'; import 'package:flutter_rating_bar/flutter_rating_bar.dart';
class MyReviewsPage extends StatefulWidget { class MyReviewsPage extends StatefulWidget {
@override @override
_MyReviewsPageState createState() => _MyReviewsPageState(); _MyReviewsPageState createState() => _MyReviewsPageState();
@ -139,39 +139,46 @@ reviewDetails(data, rate, myRate) {
Container( Container(
margin: EdgeInsets.all(5), margin: EdgeInsets.all(5),
child: Align( child: Align(
alignment: languageID == 'ar' ? Alignment.topRight : Alignment.topLeft, alignment: languageID == 'ar' ? Alignment.topRight : Alignment.topLeft,
child: child: RatingBar(
RatingBar( initialRating: rate,
initialRating: rate, direction: Axis.horizontal,
direction: Axis.horizontal, allowHalfRating: true,
allowHalfRating: true, itemCount: 5,
itemCount: 5, itemSize: 20,
itemSize: 20, ignoreGestures: true,
ignoreGestures: true, ratingWidget: RatingWidget(
ratingWidget: RatingWidget( full: Icon(
full: Icon(Icons.star), Icons.star,
half: Icon(Icons.star_half), color: CustomColors.accentColor,
empty: Icon(Icons.star), ),
), half: Icon(
tapOnlyMode: true, Icons.star_half,
itemPadding: EdgeInsets.symmetric(horizontal: 4.0), color: CustomColors.accentColor,
onRatingUpdate: (rating) { ),
print(rating); empty: Icon(
}, Icons.star,
) color: CustomColors.accentColor,
// RatingBar.readOnly( ),
// initialRating: rate, ),
// size: 15.0, tapOnlyMode: true,
// filledColor: Colors.yellow[700], itemPadding: EdgeInsets.symmetric(horizontal: 4.0),
// emptyColor: Colors.grey[500], onRatingUpdate: (rating) {
// isHalfAllowed: true, print(rating);
// halfFilledIcon: Icons.star_half, },
// filledIcon: Icons.star, )
// emptyIcon: Icons.star, // RatingBar.readOnly(
// ), // initialRating: rate,
// size: 15.0,
// filledColor: Colors.yellow[700],
// emptyColor: Colors.grey[500],
// isHalfAllowed: true,
// halfFilledIcon: Icons.star_half,
// filledIcon: Icons.star,
// emptyIcon: Icons.star,
// ),
), ),
), ),
], ],
), ),
@ -198,37 +205,45 @@ reviewDetails(data, rate, myRate) {
mainAxisAlignment: MainAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.end,
children: [ children: [
Container( Container(
padding: languageID == 'ar' ? EdgeInsets.only(right: 60) : EdgeInsets.only(left: 60), padding: languageID == 'ar' ? EdgeInsets.only(right: 60) : EdgeInsets.only(left: 60),
child: child: RatingBar(
RatingBar( initialRating: myRate,
initialRating: myRate, direction: Axis.horizontal,
direction: Axis.horizontal, allowHalfRating: true,
allowHalfRating: true, itemCount: 5,
itemCount: 5, itemSize: 20,
itemSize: 20, ignoreGestures: true,
ignoreGestures: true, ratingWidget: RatingWidget(
ratingWidget: RatingWidget( full: Icon(
full: Icon(Icons.star), Icons.star,
half: Icon(Icons.star_half), color: CustomColors.accentColor,
empty: Icon(Icons.star), ),
half: Icon(
Icons.star_half,
color: CustomColors.accentColor,
),
empty: Icon(
Icons.star,
color: CustomColors.accentColor,
),
),
tapOnlyMode: true,
itemPadding: EdgeInsets.symmetric(horizontal: 4.0),
onRatingUpdate: (rating) {
print(rating);
},
)
// RatingBar.readOnly(
// initialRating: myRate,
// size: 15.0,
// filledColor: Colors.yellow[700],
// emptyColor: Colors.grey[500],
// isHalfAllowed: true,
// halfFilledIcon: Icons.star_half,
// filledIcon: Icons.star,
// emptyIcon: Icons.star,
// ),
), ),
tapOnlyMode: true,
itemPadding: EdgeInsets.symmetric(horizontal: 4.0),
onRatingUpdate: (rating) {
print(rating);
},
)
// RatingBar.readOnly(
// initialRating: myRate,
// size: 15.0,
// filledColor: Colors.yellow[700],
// emptyColor: Colors.grey[500],
// isHalfAllowed: true,
// halfFilledIcon: Icons.star_half,
// filledIcon: Icons.star,
// emptyIcon: Icons.star,
// ),
),
], ],
), ),
), ),

@ -1,6 +1,7 @@
import 'package:diplomaticquarterapp/core/model/pharmacies/PharmacyProduct.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/PharmacyProduct.dart';
import 'package:diplomaticquarterapp/core/service/AuthenticatedUserObject.dart'; import 'package:diplomaticquarterapp/core/service/AuthenticatedUserObject.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/buttons/borderedButton.dart'; import 'package:diplomaticquarterapp/widgets/buttons/borderedButton.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
@ -307,11 +308,12 @@ class _ProductNameAndPriceState extends State<ProductNameAndPrice> {
itemSize: 20, itemSize: 20,
ignoreGestures: true, ignoreGestures: true,
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon(Icons.star), full: Icon(Icons.star, color: CustomColors.accentColor,),
half: Icon(Icons.star_half), half: Icon(Icons.star_half, color: CustomColors.accentColor,),
empty: Icon(Icons.star), empty: Icon(Icons.star, color: CustomColors.accentColor,),
), ),
tapOnlyMode: true, tapOnlyMode: true,
unratedColor: Colors.grey[500],
itemPadding: EdgeInsets.symmetric(horizontal: 4.0), itemPadding: EdgeInsets.symmetric(horizontal: 4.0),
onRatingUpdate: (rating) { onRatingUpdate: (rating) {
print(rating); print(rating);

@ -8,6 +8,7 @@ import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/locator.dart'; import 'package:diplomaticquarterapp/locator.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/screens/product-details/product-detail.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/product-details/product-detail.dart';
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
@ -303,11 +304,12 @@ class _RecommendedProductsState extends State<RecommendedProducts> {
itemSize: 20, itemSize: 20,
ignoreGestures: true, ignoreGestures: true,
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon(Icons.star), full: Icon(Icons.star, color: CustomColors.accentColor,),
half: Icon(Icons.star_half), half: Icon(Icons.star_half, color: CustomColors.accentColor,),
empty: Icon(Icons.star), empty: Icon(Icons.star, color: CustomColors.accentColor,),
), ),
tapOnlyMode: true, tapOnlyMode: true,
unratedColor: Colors.grey[500],
itemPadding: EdgeInsets.symmetric(horizontal: 4.0), itemPadding: EdgeInsets.symmetric(horizontal: 4.0),
onRatingUpdate: (rating) { onRatingUpdate: (rating) {
print(rating); print(rating);

@ -1,6 +1,7 @@
import 'package:diplomaticquarterapp/core/model/pharmacies/PharmacyProduct.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/PharmacyProduct.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/product_detail_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/product_detail_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_rating_bar/flutter_rating_bar.dart'; import 'package:flutter_rating_bar/flutter_rating_bar.dart';
@ -71,18 +72,19 @@ class ReviewsInfo extends StatelessWidget {
// ), // ),
RatingBar( RatingBar(
initialRating: previousModel! initialRating: previousModel!
.productDetailService[0]!.reviews![index]!.rating!.toDouble(), .productDetailService[0].reviews![index].rating!.toDouble(),
direction: Axis.horizontal, direction: Axis.horizontal,
allowHalfRating: true, allowHalfRating: true,
itemCount: 5, itemCount: 5,
itemSize: 20, itemSize: 20,
ignoreGestures: true, ignoreGestures: true,
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon(Icons.star), full: Icon(Icons.star, color: CustomColors.accentColor,),
half: Icon(Icons.star_half), half: Icon(Icons.star_half, color: CustomColors.accentColor,),
empty: Icon(Icons.star), empty: Icon(Icons.star, color: CustomColors.accentColor,),
), ),
tapOnlyMode: true, tapOnlyMode: true,
unratedColor: Colors.grey[500],
itemPadding: EdgeInsets.symmetric(horizontal: 4.0), itemPadding: EdgeInsets.symmetric(horizontal: 4.0),
onRatingUpdate: (rating) { onRatingUpdate: (rating) {
print(rating); print(rating);
@ -91,18 +93,19 @@ class ReviewsInfo extends StatelessWidget {
): RatingBar( ): RatingBar(
initialRating: previousModel! initialRating: previousModel!
.productDetailService[0]!.reviews![index]!.rating!.toDouble(), .productDetailService[0].reviews![index].rating!.toDouble(),
direction: Axis.horizontal, direction: Axis.horizontal,
allowHalfRating: true, allowHalfRating: true,
itemCount: 5, itemCount: 5,
itemSize: 20, itemSize: 20,
ignoreGestures: true, ignoreGestures: true,
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon(Icons.star), full: Icon(Icons.star, color: CustomColors.accentColor,),
half: Icon(Icons.star_half), half: Icon(Icons.star_half, color: CustomColors.accentColor,),
empty: Icon(Icons.star), empty: Icon(Icons.star, color: CustomColors.accentColor,),
), ),
tapOnlyMode: true, tapOnlyMode: true,
unratedColor: Colors.grey[500],
itemPadding: EdgeInsets.symmetric(horizontal: 4.0), itemPadding: EdgeInsets.symmetric(horizontal: 4.0),
onRatingUpdate: (rating) { onRatingUpdate: (rating) {
print(rating); print(rating);

@ -295,11 +295,12 @@ class ProductTileItem extends StatelessWidget {
itemSize: 20, itemSize: 20,
ignoreGestures: true, ignoreGestures: true,
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon(Icons.star), full: Icon(Icons.star, color: CustomColors.accentColor,),
half: Icon(Icons.star_half), half: Icon(Icons.star_half, color: CustomColors.accentColor,),
empty: Icon(Icons.star), empty: Icon(Icons.star, color: CustomColors.accentColor,),
), ),
tapOnlyMode: true, tapOnlyMode: true,
unratedColor: Colors.grey[500],
itemPadding: EdgeInsets.symmetric(horizontal: 4.0), itemPadding: EdgeInsets.symmetric(horizontal: 4.0),
onRatingUpdate: (rating) { onRatingUpdate: (rating) {
print(rating); print(rating);

@ -6,6 +6,7 @@ import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/pages/medical/prescriptions/prescription_items_page.dart'; import 'package:diplomaticquarterapp/pages/medical/prescriptions/prescription_items_page.dart';
import 'package:diplomaticquarterapp/pages/medical/prescriptions/prescriptions_home_page.dart'; import 'package:diplomaticquarterapp/pages/medical/prescriptions/prescriptions_home_page.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/widgets/home/ViewAllHomeWidget.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/widgets/home/ViewAllHomeWidget.dart';
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/others/network_base_view.dart'; import 'package:diplomaticquarterapp/widgets/others/network_base_view.dart';
@ -170,10 +171,11 @@ class PrescriptionsWidget extends StatelessWidget {
itemSize: 20, itemSize: 20,
ignoreGestures: true, ignoreGestures: true,
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon(Icons.star), full: Icon(Icons.star, color: CustomColors.accentColor,),
half: Icon(Icons.star_half), half: Icon(Icons.star_half, color: CustomColors.accentColor,),
empty: Icon(Icons.star), empty: Icon(Icons.star, color: CustomColors.accentColor,),
), ),
unratedColor: Colors.grey[500],
tapOnlyMode: true, tapOnlyMode: true,
itemPadding: EdgeInsets.symmetric(horizontal: 4.0), itemPadding: EdgeInsets.symmetric(horizontal: 4.0),
onRatingUpdate: (rating) { onRatingUpdate: (rating) {

@ -2,6 +2,7 @@ import 'package:diplomaticquarterapp/core/model/pharmacies/PharmacyProduct.dart'
import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/order_model_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/order_model_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/pages/pharmacy/profile/profile.dart'; import 'package:diplomaticquarterapp/pages/pharmacy/profile/profile.dart';
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
@ -121,11 +122,12 @@ class _ProductReviewPageState extends State<ProductReviewPage> {
itemSize: 20, itemSize: 20,
ignoreGestures: true, ignoreGestures: true,
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon(Icons.star), full: Icon(Icons.star, color: CustomColors.accentColor,),
half: Icon(Icons.star_half), half: Icon(Icons.star_half, color: CustomColors.accentColor,),
empty: Icon(Icons.star), empty: Icon(Icons.star, color: CustomColors.accentColor,),
), ),
tapOnlyMode: true, tapOnlyMode: true,
unratedColor: Colors.grey[500],
itemPadding: EdgeInsets.symmetric(horizontal: 4.0), itemPadding: EdgeInsets.symmetric(horizontal: 4.0),
onRatingUpdate: (rating) { onRatingUpdate: (rating) {
print(rating); print(rating);
@ -193,11 +195,12 @@ class _ProductReviewPageState extends State<ProductReviewPage> {
itemSize: 20, itemSize: 20,
ignoreGestures: true, ignoreGestures: true,
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon(Icons.star), full: Icon(Icons.star, color: CustomColors.accentColor,),
half: Icon(Icons.star_half), half: Icon(Icons.star_half, color: CustomColors.accentColor,),
empty: Icon(Icons.star), empty: Icon(Icons.star, color: CustomColors.accentColor,),
), ),
tapOnlyMode: true, tapOnlyMode: true,
unratedColor: Colors.grey[500],
itemPadding: EdgeInsets.symmetric(horizontal: 4.0), itemPadding: EdgeInsets.symmetric(horizontal: 4.0),
onRatingUpdate: (rating) { onRatingUpdate: (rating) {
print(rating); print(rating);

@ -690,15 +690,15 @@ class _SubCategorisePageState extends State<SubCategorisePage> {
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon( full: Icon(
Icons.star, Icons.star,
color: Colors.yellow[700], color: CustomColors.accentColor,
), ),
half: Icon( half: Icon(
Icons.star_half, Icons.star_half,
color: Colors.yellow[700], color: CustomColors.accentColor,
), ),
empty: Icon( empty: Icon(
Icons.star_border, Icons.star_border,
color: Colors.grey[500], color: CustomColors.accentColor,
), ),
), ),
onRatingUpdate: (double value) {}, onRatingUpdate: (double value) {},
@ -839,15 +839,15 @@ class _SubCategorisePageState extends State<SubCategorisePage> {
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon( full: Icon(
Icons.star, Icons.star,
color: Colors.yellow[700], color: CustomColors.accentColor,
), ),
half: Icon( half: Icon(
Icons.star_half, Icons.star_half,
color: Colors.yellow[700], color: CustomColors.accentColor,
), ),
empty: Icon( empty: Icon(
Icons.star_border, Icons.star_border,
color: Colors.grey[500], color: CustomColors.accentColor,
), ),
), ),
onRatingUpdate: (double value) {}, onRatingUpdate: (double value) {},

File diff suppressed because it is too large Load Diff

@ -1,241 +1,241 @@
import 'dart:async'; // import 'dart:async';
//
import 'package:diplomaticquarterapp/pages/conference/conference_button_bar.dart'; // import 'package:diplomaticquarterapp/pages/conference/conference_button_bar.dart';
import 'package:diplomaticquarterapp/pages/conference/web_rtc/widgets/cam_view_widget.dart'; // import 'package:diplomaticquarterapp/pages/conference/web_rtc/widgets/cam_view_widget.dart';
import 'package:diplomaticquarterapp/pages/videocall-webrtc-rnd/utils/device_info.dart'; // import 'package:diplomaticquarterapp/pages/videocall-webrtc-rnd/utils/device_info.dart';
import 'package:firebase_messaging/firebase_messaging.dart'; // import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart'; // import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; // import 'package:flutter/services.dart';
import 'dart:core'; // import 'dart:core';
import 'signaling.dart'; // import 'signaling.dart';
import 'package:flutter_webrtc/flutter_webrtc.dart'; // import 'package:flutter_webrtc/flutter_webrtc.dart';
//
class StartVideoCall extends StatefulWidget { // class StartVideoCall extends StatefulWidget {
static String tag = 'webrtc'; // static String tag = 'webrtc';
final String host; // final String host;
//
String caller; // String caller;
String receiver; // String receiver;
bool iAmCaller; // bool iAmCaller;
StartVideoCall({required this.caller, required this.receiver, this.iAmCaller = false, required this.host}); // StartVideoCall({required this.caller, required this.receiver, this.iAmCaller = false, required this.host});
//
@override // @override
StartVideoCallState createState() => StartVideoCallState(receiverId: receiver, callerId: caller, iAmCaller: iAmCaller); // StartVideoCallState createState() => StartVideoCallState(receiverId: receiver, callerId: caller, iAmCaller: iAmCaller);
} // }
//
class StartVideoCallState extends State<StartVideoCall> { // class StartVideoCallState extends State<StartVideoCall> {
late Signaling _signaling; // late Signaling _signaling;
late SessionOneToOne? _session; // late SessionOneToOne? _session;
//
StartVideoCallState({required String callerId, required String receiverId, required bool iAmCaller}){ // StartVideoCallState({required String callerId, required String receiverId, required bool iAmCaller}){
//
final self_role = iAmCaller ? "Caller" : "Receiver"; // final self_role = iAmCaller ? "Caller" : "Receiver";
final self_id = iAmCaller ? callerId : receiverId; // final self_id = iAmCaller ? callerId : receiverId;
final self_user = SocketUser(id: self_id, name: "$self_role-$self_id", userAgent: DeviceInfo.userAgent, moreInfo: {}); // final self_user = SocketUser(id: self_id, name: "$self_role-$self_id", userAgent: DeviceInfo.userAgent, moreInfo: {});
//
final remote_role = !iAmCaller ? "Caller" : "Receiver"; // final remote_role = !iAmCaller ? "Caller" : "Receiver";
final remote_id = !iAmCaller ? callerId : receiverId; // final remote_id = !iAmCaller ? callerId : receiverId;
final remote_user = SocketUser(id: remote_id, name: "$remote_role-$remote_id", userAgent: DeviceInfo.userAgent, moreInfo: {}); // final remote_user = SocketUser(id: remote_id, name: "$remote_role-$remote_id", userAgent: DeviceInfo.userAgent, moreInfo: {});
//
final session_id = "$callerId-$receiverId"; // final session_id = "$callerId-$receiverId";
_session = SessionOneToOne(id: session_id, local_user: self_user, remote_user: remote_user); // _session = SessionOneToOne(id: session_id, local_user: self_user, remote_user: remote_user);
} // }
//
bool showNoise = true; // bool showNoise = true;
final StreamController<bool> _audioButton = StreamController<bool>.broadcast(); // final StreamController<bool> _audioButton = StreamController<bool>.broadcast();
final StreamController<bool> _videoButton = StreamController<bool>.broadcast(); // final StreamController<bool> _videoButton = StreamController<bool>.broadcast();
final StreamController<bool> _onButtonBarVisibleStreamController = StreamController<bool>.broadcast(); // final StreamController<bool> _onButtonBarVisibleStreamController = StreamController<bool>.broadcast();
final StreamController<double> _onButtonBarHeightStreamController = StreamController<double>.broadcast(); // final StreamController<double> _onButtonBarHeightStreamController = StreamController<double>.broadcast();
//
final RTCVideoRenderer _localRenderer = RTCVideoRenderer(); // final RTCVideoRenderer _localRenderer = RTCVideoRenderer();
final RTCVideoRenderer _remoteRenderer = RTCVideoRenderer(); // final RTCVideoRenderer _remoteRenderer = RTCVideoRenderer();
//
MediaStream get localMediaStream => _signaling.localStream!; // MediaStream get localMediaStream => _signaling.localStream!;
MediaStream get remoteMediaStream => _signaling.remoteStreams.first; // MediaStream get remoteMediaStream => _signaling.remoteStreams.first;
//
@override // @override
initState() { // initState() {
super.initState(); // super.initState();
initRenderers(); // initRenderers();
_connect(); // _connect();
} // }
//
initRenderers() async { // initRenderers() async {
await _localRenderer.initialize(); // await _localRenderer.initialize();
await _remoteRenderer.initialize(); // await _remoteRenderer.initialize();
} // }
//
@override // @override
deactivate() { // deactivate() {
super.deactivate(); // super.deactivate();
_signaling?.close(); // _signaling?.close();
_localRenderer.dispose(); // _localRenderer.dispose();
_remoteRenderer.dispose(); // _remoteRenderer.dispose();
} // }
//
@override // @override
Widget build(BuildContext context) { // Widget build(BuildContext context) {
return Scaffold( // return Scaffold(
// appBar: AppBar( // // appBar: AppBar(
// title: Text('P2P Call Sample' + (_session?.local_user != null ? ' [Your ID (${_session?.local_user?.id})] ' : '')), // // title: Text('P2P Call Sample' + (_session?.local_user != null ? ' [Your ID (${_session?.local_user?.id})] ' : '')),
// actions: <Widget>[ // // actions: <Widget>[
// IconButton( // // IconButton(
// icon: const Icon(Icons.settings), // // icon: const Icon(Icons.settings),
// onPressed: (){ // // onPressed: (){
// setState(() { // // setState(() {
// }); // // });
// }, // // },
// tooltip: 'setup', // // tooltip: 'setup',
// ), // // ),
// ], // // ],
// ), // // ),
body: videoCanvasWidgets(), // body: videoCanvasWidgets(),
); // );
} // }
//
LayoutBuilder videoCanvasWidgets() { // LayoutBuilder videoCanvasWidgets() {
return LayoutBuilder( // return LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) { // builder: (BuildContext context, BoxConstraints constraints) {
return Stack( // return Stack(
children: [ // children: [
CamViewWidget( // CamViewWidget(
localRenderer: _localRenderer, // localRenderer: _localRenderer,
remoteRenderer: _remoteRenderer, // remoteRenderer: _remoteRenderer,
constraints: constraints, // constraints: constraints,
onButtonBarVisibleStreamController: _onButtonBarVisibleStreamController, // onButtonBarVisibleStreamController: _onButtonBarVisibleStreamController,
onButtonBarHeightStreamController: _onButtonBarHeightStreamController, // onButtonBarHeightStreamController: _onButtonBarHeightStreamController,
), // ),
ConferenceButtonBar( // ConferenceButtonBar(
audioEnabled: _audioButton.stream, // audioEnabled: _audioButton.stream,
videoEnabled: _videoButton.stream, // videoEnabled: _videoButton.stream,
onAudioEnabled: _onAudioEnable, // onAudioEnabled: _onAudioEnable,
onVideoEnabled: _onVideoEnabled, // onVideoEnabled: _onVideoEnabled,
onSwitchCamera: _onSwitchCamera, // onSwitchCamera: _onSwitchCamera,
onHangup: _onHangup, // onHangup: _onHangup,
onPersonAdd: () {}, // onPersonAdd: () {},
onPersonRemove: () {}, // onPersonRemove: () {},
onHeight: _onHeightBar, // onHeight: _onHeightBar,
onShow: _onShowBar, // onShow: _onShowBar,
onHide: _onHideBar, // onHide: _onHideBar,
), // ),
], // ],
); // );
}, // },
); // );
} // }
//
//
void _connect() async { // void _connect() async {
if(_session == null) // if(_session == null)
return; // return;
//
_signaling ??= Signaling(widget.host, session: _session!)..connect(); // _signaling ??= Signaling(widget.host, session: _session!)..connect();
//
_signaling?.onSignalingStateChange = (SignalingState state) { // _signaling?.onSignalingStateChange = (SignalingState state) {
switch (state) { // switch (state) {
case SignalingState.Closed: // case SignalingState.Closed:
case SignalingState.Error: // case SignalingState.Error:
case SignalingState.Open: // case SignalingState.Open:
break; // break;
} // }
}; // };
//
_signaling?.onCallStateChange = (SessionOneToOne session, CallState state) { // _signaling?.onCallStateChange = (SessionOneToOne session, CallState state) {
switch (state) { // switch (state) {
case CallState.Calling: // case CallState.Calling:
setState(() {}); // setState(() {});
break; // break;
case CallState.Bye: // case CallState.Bye:
setState(() { // setState(() {
_localRenderer.srcObject = null; // _localRenderer.srcObject = null;
_remoteRenderer.srcObject = null; // _remoteRenderer.srcObject = null;
_session = null; // _session = null;
}); // });
break; // break;
case CallState.Invite: // case CallState.Invite:
case CallState.Connected: // case CallState.Connected:
case CallState.Ringing: // case CallState.Ringing:
} // }
}; // };
//
_signaling?.onConnected = ((event) { // _signaling?.onConnected = ((event) {
_signaling?.callAccepted(_session!); // _signaling?.callAccepted(_session!);
}); // });
//
_signaling?.onRemoteConnected = ((event) { // _signaling?.onRemoteConnected = ((event) {
//
}); // });
//
_signaling?.onLocalStream = ((stream) { // _signaling?.onLocalStream = ((stream) {
_localRenderer.srcObject = stream; // _localRenderer.srcObject = stream;
setState(() { // setState(() {
}); // });
}); // });
//
_signaling?.onAddRemoteStream = ((_, stream) { // _signaling?.onAddRemoteStream = ((_, stream) {
_remoteRenderer.srcObject = stream; // _remoteRenderer.srcObject = stream;
setState(() {}); // setState(() {});
}); // });
//
_signaling?.onRemoveRemoteStream = ((_, stream) { // _signaling?.onRemoveRemoteStream = ((_, stream) {
setState(() { // setState(() {
_remoteRenderer.srcObject = null; // _remoteRenderer.srcObject = null;
}); // });
}); // });
} // }
//
_hangUp() async{ // _hangUp() async{
if (_session != null) { // if (_session != null) {
_signaling?.bye(_session!); // _signaling?.bye(_session!);
} // }
} // }
//
_switchCamera() { // _switchCamera() {
_signaling?.switchCamera(); // _signaling?.switchCamera();
} // }
//
_muteMic() { // _muteMic() {
_signaling?.muteMic(); // _signaling?.muteMic();
} // }
//
Function? _onAudioEnable() { // Function? _onAudioEnable() {
final audioTrack = localMediaStream.getAudioTracks()[0]; // final audioTrack = localMediaStream.getAudioTracks()[0];
final mute = audioTrack.muted; // final mute = audioTrack.muted;
Helper.setMicrophoneMute(!mute!, audioTrack); // Helper.setMicrophoneMute(!mute!, audioTrack);
_audioButton.add(mute); // _audioButton.add(mute);
} // }
//
Function? _onVideoEnabled() { // Function? _onVideoEnabled() {
final videoTrack = localMediaStream.getVideoTracks()[0]; // final videoTrack = localMediaStream.getVideoTracks()[0];
bool videoEnabled = videoTrack.enabled; // bool videoEnabled = videoTrack.enabled;
localMediaStream.getVideoTracks()[0].enabled = !videoEnabled; // localMediaStream.getVideoTracks()[0].enabled = !videoEnabled;
_videoButton.add(!videoEnabled); // _videoButton.add(!videoEnabled);
} // }
//
Function? _onSwitchCamera() { // Function? _onSwitchCamera() {
Helper.switchCamera(localMediaStream.getVideoTracks()[0]); // Helper.switchCamera(localMediaStream.getVideoTracks()[0]);
} // }
//
void _onShowBar() { // void _onShowBar() {
setState(() { // setState(() {
}); // });
_onButtonBarVisibleStreamController.add(true); // _onButtonBarVisibleStreamController.add(true);
} // }
//
void _onHeightBar(double height) { // void _onHeightBar(double height) {
_onButtonBarHeightStreamController.add(height); // _onButtonBarHeightStreamController.add(height);
} // }
//
void _onHideBar() { // void _onHideBar() {
setState(() { // setState(() {
SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.bottom]); // SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.bottom]);
}); // });
_onButtonBarVisibleStreamController.add(false); // _onButtonBarVisibleStreamController.add(false);
} // }
//
Future<void> _onHangup() async { // Future<void> _onHangup() async {
_signaling?.finishSessions(); // _signaling?.finishSessions();
print('onHangup'); // print('onHangup');
Navigator.of(context).pop(); // Navigator.of(context).pop();
} // }
} // }

@ -1,242 +1,242 @@
import 'dart:convert'; // import 'dart:convert';
//
// import 'package:cloud_firestore/cloud_firestore.dart'; // // import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter_webrtc/flutter_webrtc.dart'; // import 'package:flutter_webrtc/flutter_webrtc.dart';
//
typedef void StreamStateCallback(MediaStream stream); // typedef void StreamStateCallback(MediaStream stream);
//
class Signaling { // class Signaling {
Map<String, dynamic> configuration = { // Map<String, dynamic> configuration = {
'iceServers': [ // 'iceServers': [
{ // {
'urls': ['stun:stun1.l.google.com:19302', 'stun:stun2.l.google.com:19302'] // 'urls': ['stun:stun1.l.google.com:19302', 'stun:stun2.l.google.com:19302']
} // }
] // ]
}; // };
//
late RTCPeerConnection peerConnection; // late RTCPeerConnection peerConnection;
late MediaStream localStream; // late MediaStream localStream;
late MediaStream remoteStream; // late MediaStream remoteStream;
late String roomId; // late String roomId;
late String currentRoomText; // late String currentRoomText;
late StreamStateCallback onAddRemoteStream; // late StreamStateCallback onAddRemoteStream;
//
Future<String> createRoom(RTCVideoRenderer remoteRenderer) async { // Future<String> createRoom(RTCVideoRenderer remoteRenderer) async {
// FirebaseFirestore db = FirebaseFirestore.instance; // // FirebaseFirestore db = FirebaseFirestore.instance;
// DocumentReference roomRef = db.collection('rooms').doc(); // // DocumentReference roomRef = db.collection('rooms').doc();
//
print('Create PeerConnection with configuration: $configuration'); // print('Create PeerConnection with configuration: $configuration');
//
peerConnection = await createPeerConnection(configuration); // peerConnection = await createPeerConnection(configuration);
//
registerPeerConnectionListeners(); // registerPeerConnectionListeners();
//
localStream.getTracks().forEach((track) { // localStream.getTracks().forEach((track) {
peerConnection?.addTrack(track, localStream); // peerConnection?.addTrack(track, localStream);
}); // });
//
// Code for collecting ICE candidates below // // Code for collecting ICE candidates below
// var callerCandidatesCollection = roomRef.collection('callerCandidates'); // // var callerCandidatesCollection = roomRef.collection('callerCandidates');
//
peerConnection?.onIceCandidate = (RTCIceCandidate candidate) { // peerConnection?.onIceCandidate = (RTCIceCandidate candidate) {
print('Got candidate: ${candidate.toMap()}'); // print('Got candidate: ${candidate.toMap()}');
// callerCandidatesCollection.add(candidate.toMap()); // // callerCandidatesCollection.add(candidate.toMap());
}; // };
// Finish Code for collecting ICE candidate // // Finish Code for collecting ICE candidate
//
// Add code for creating a room // // Add code for creating a room
RTCSessionDescription offer = await peerConnection.createOffer(); // RTCSessionDescription offer = await peerConnection.createOffer();
await peerConnection.setLocalDescription(offer); // await peerConnection.setLocalDescription(offer);
print('Created offer: $offer'); // print('Created offer: $offer');
//
Map<String, dynamic> roomWithOffer = {'offer': offer.toMap()}; // Map<String, dynamic> roomWithOffer = {'offer': offer.toMap()};
//
// await roomRef.set(roomWithOffer); // // await roomRef.set(roomWithOffer);
// var roomId = roomRef.id; // // var roomId = roomRef.id;
print('New room created with SDK offer. Room ID: $roomId'); // print('New room created with SDK offer. Room ID: $roomId');
currentRoomText = 'Current room is $roomId - You are the caller!'; // currentRoomText = 'Current room is $roomId - You are the caller!';
// Created a Room // // Created a Room
//
peerConnection?.onTrack = (RTCTrackEvent event) { // peerConnection?.onTrack = (RTCTrackEvent event) {
print('Got remote track: ${event.streams[0]}'); // print('Got remote track: ${event.streams[0]}');
//
event.streams[0].getTracks().forEach((track) { // event.streams[0].getTracks().forEach((track) {
print('Add a track to the remoteStream $track'); // print('Add a track to the remoteStream $track');
remoteStream?.addTrack(track); // remoteStream?.addTrack(track);
}); // });
}; // };
//
// Listening for remote session description below // // Listening for remote session description below
// roomRef.snapshots().listen((snapshot) async { // // roomRef.snapshots().listen((snapshot) async {
// print('Got updated room: ${snapshot.data()}'); // // print('Got updated room: ${snapshot.data()}');
// // //
// Map<String, dynamic> data = snapshot.data() as Map<String, dynamic>; // // Map<String, dynamic> data = snapshot.data() as Map<String, dynamic>;
// if (peerConnection?.getRemoteDescription() != null && data['answer'] != null) { // // if (peerConnection?.getRemoteDescription() != null && data['answer'] != null) {
// var answer = RTCSessionDescription( // // var answer = RTCSessionDescription(
// data['answer']['sdp'], // // data['answer']['sdp'],
// data['answer']['type'], // // data['answer']['type'],
// ); // // );
// // //
// print("Someone tried to connect"); // // print("Someone tried to connect");
// await peerConnection?.setRemoteDescription(answer); // // await peerConnection?.setRemoteDescription(answer);
// } // // }
// }); // // });
// // Listening for remote session description above // // // Listening for remote session description above
// // //
// // Listen for remote Ice candidates below // // // Listen for remote Ice candidates below
// roomRef.collection('calleeCandidates').snapshots().listen((snapshot) { // // roomRef.collection('calleeCandidates').snapshots().listen((snapshot) {
// snapshot.docChanges.forEach((change) { // // snapshot.docChanges.forEach((change) {
// if (change.type == DocumentChangeType.added) { // // if (change.type == DocumentChangeType.added) {
// Map<String, dynamic> data = change.doc.data() as Map<String, dynamic>; // // Map<String, dynamic> data = change.doc.data() as Map<String, dynamic>;
// print('Got new remote ICE candidate: ${jsonEncode(data)}'); // // print('Got new remote ICE candidate: ${jsonEncode(data)}');
// peerConnection.addCandidate( // // peerConnection.addCandidate(
// RTCIceCandidate( // // RTCIceCandidate(
// data['candidate'], // // data['candidate'],
// data['sdpMid'], // // data['sdpMid'],
// data['sdpMLineIndex'], // // data['sdpMLineIndex'],
// ), // // ),
// ); // // );
// } // // }
// }); // // });
// }); // // });
// Listen for remote ICE candidates above // // Listen for remote ICE candidates above
//
return roomId; // return roomId;
} // }
//
Future<void> joinRoom(String roomId, RTCVideoRenderer remoteVideo) async { // Future<void> joinRoom(String roomId, RTCVideoRenderer remoteVideo) async {
// FirebaseFirestore db = FirebaseFirestore.instance; // // FirebaseFirestore db = FirebaseFirestore.instance;
// DocumentReference roomRef = db.collection('rooms').doc('$roomId'); // // DocumentReference roomRef = db.collection('rooms').doc('$roomId');
// var roomSnapshot = await roomRef.get(); // // var roomSnapshot = await roomRef.get();
// print('Got room ${roomSnapshot.exists}'); // // print('Got room ${roomSnapshot.exists}');
//
// if (roomSnapshot.exists) { // // if (roomSnapshot.exists) {
// print('Create PeerConnection with configuration: $configuration'); // // print('Create PeerConnection with configuration: $configuration');
// peerConnection = await createPeerConnection(configuration); // // peerConnection = await createPeerConnection(configuration);
// // //
// registerPeerConnectionListeners(); // // registerPeerConnectionListeners();
// // //
// localStream.getTracks().forEach((track) { // // localStream.getTracks().forEach((track) {
// peerConnection?.addTrack(track, localStream); // // peerConnection?.addTrack(track, localStream);
// }); // // });
// // //
// // Code for collecting ICE candidates below // // // Code for collecting ICE candidates below
// // var calleeCandidatesCollection = roomRef.collection('calleeCandidates'); // // // var calleeCandidatesCollection = roomRef.collection('calleeCandidates');
// peerConnection.onIceCandidate = (RTCIceCandidate candidate) { // // peerConnection.onIceCandidate = (RTCIceCandidate candidate) {
// if (candidate == null) { // // if (candidate == null) {
// print('onIceCandidate: complete!'); // // print('onIceCandidate: complete!');
// return; // // return;
// } // // }
// print('onIceCandidate: ${candidate.toMap()}'); // // print('onIceCandidate: ${candidate.toMap()}');
// // calleeCandidatesCollection.add(candidate.toMap()); // // // calleeCandidatesCollection.add(candidate.toMap());
// }; // // };
// // Code for collecting ICE candidate above // // // Code for collecting ICE candidate above
// // //
// peerConnection?.onTrack = (RTCTrackEvent event) { // // peerConnection?.onTrack = (RTCTrackEvent event) {
// print('Got remote track: ${event.streams[0]}'); // // print('Got remote track: ${event.streams[0]}');
// event.streams[0].getTracks().forEach((track) { // // event.streams[0].getTracks().forEach((track) {
// print('Add a track to the remoteStream: $track'); // // print('Add a track to the remoteStream: $track');
// remoteStream?.addTrack(track); // // remoteStream?.addTrack(track);
// }); // // });
// }; // // };
// // //
// // Code for creating SDP answer below // // // Code for creating SDP answer below
// var data = roomSnapshot.data() as Map<String, dynamic>; // // var data = roomSnapshot.data() as Map<String, dynamic>;
// print('Got offer $data'); // // print('Got offer $data');
// var offer = data['offer']; // // var offer = data['offer'];
// await peerConnection?.setRemoteDescription( // // await peerConnection?.setRemoteDescription(
// RTCSessionDescription(offer['sdp'], offer['type']), // // RTCSessionDescription(offer['sdp'], offer['type']),
// ); // // );
// var answer = await peerConnection.createAnswer(); // // var answer = await peerConnection.createAnswer();
// print('Created Answer $answer'); // // print('Created Answer $answer');
// // //
// await peerConnection.setLocalDescription(answer); // // await peerConnection.setLocalDescription(answer);
// // //
// Map<String, dynamic> roomWithAnswer = { // // Map<String, dynamic> roomWithAnswer = {
// 'answer': {'type': answer.type, 'sdp': answer.sdp} // // 'answer': {'type': answer.type, 'sdp': answer.sdp}
// }; // // };
// // //
// await roomRef.update(roomWithAnswer); // // await roomRef.update(roomWithAnswer);
// // Finished creating SDP answer // // // Finished creating SDP answer
// // //
// // Listening for remote ICE candidates below // // // Listening for remote ICE candidates below
// // roomRef.collection('callerCandidates').snapshots().listen((snapshot) { // // // roomRef.collection('callerCandidates').snapshots().listen((snapshot) {
// // snapshot.docChanges.forEach((document) { // // // snapshot.docChanges.forEach((document) {
// // var data = document.doc.data() as Map<String, dynamic>; // // // var data = document.doc.data() as Map<String, dynamic>;
// // print(data); // // // print(data);
// // print('Got new remote ICE candidate: $data'); // // // print('Got new remote ICE candidate: $data');
// // peerConnection.addCandidate( // // // peerConnection.addCandidate(
// // RTCIceCandidate( // // // RTCIceCandidate(
// // data['candidate'], // // // data['candidate'],
// // data['sdpMid'], // // // data['sdpMid'],
// // data['sdpMLineIndex'], // // // data['sdpMLineIndex'],
// // ), // // // ),
// // ); // // // );
// // }); // // // });
// // }); // // // });
// } // // }
} // }
//
Future<void> openUserMedia( // Future<void> openUserMedia(
RTCVideoRenderer localVideo, // RTCVideoRenderer localVideo,
RTCVideoRenderer remoteVideo, // RTCVideoRenderer remoteVideo,
) async { // ) async {
var stream = await navigator.mediaDevices.getUserMedia({'video': true, 'audio': false}); // var stream = await navigator.mediaDevices.getUserMedia({'video': true, 'audio': false});
//
localVideo.srcObject = stream; // localVideo.srcObject = stream;
localStream = stream; // localStream = stream;
//
remoteVideo.srcObject = await createLocalMediaStream('key'); // remoteVideo.srcObject = await createLocalMediaStream('key');
} // }
//
Future<void> hangUp(RTCVideoRenderer localVideo) async { // Future<void> hangUp(RTCVideoRenderer localVideo) async {
List<MediaStreamTrack> tracks = localVideo.srcObject!.getTracks(); // List<MediaStreamTrack> tracks = localVideo.srcObject!.getTracks();
tracks.forEach((track) { // tracks.forEach((track) {
track.stop(); // track.stop();
}); // });
//
if (remoteStream != null) { // if (remoteStream != null) {
remoteStream.getTracks().forEach((track) => track.stop()); // remoteStream.getTracks().forEach((track) => track.stop());
} // }
if (peerConnection != null) peerConnection.close(); // if (peerConnection != null) peerConnection.close();
//
if (roomId != null) { // if (roomId != null) {
// var db = FirebaseFirestore.instance; // // var db = FirebaseFirestore.instance;
// var roomRef = db.collection('rooms').doc(roomId); // // var roomRef = db.collection('rooms').doc(roomId);
// var calleeCandidates = await roomRef.collection('calleeCandidates').get(); // // var calleeCandidates = await roomRef.collection('calleeCandidates').get();
// calleeCandidates.docs.forEach((document) => document.reference.delete()); // // calleeCandidates.docs.forEach((document) => document.reference.delete());
//
// var callerCandidates = await roomRef.collection('callerCandidates').get(); // // var callerCandidates = await roomRef.collection('callerCandidates').get();
// callerCandidates.docs.forEach((document) => document.reference.delete()); // // callerCandidates.docs.forEach((document) => document.reference.delete());
//
// await roomRef.delete(); // // await roomRef.delete();
} // }
//
localStream.dispose(); // localStream.dispose();
remoteStream?.dispose(); // remoteStream?.dispose();
} // }
//
void registerPeerConnectionListeners() { // void registerPeerConnectionListeners() {
peerConnection?.onIceGatheringState = (RTCIceGatheringState state) { // peerConnection?.onIceGatheringState = (RTCIceGatheringState state) {
print('ICE gathering state changed: $state'); // print('ICE gathering state changed: $state');
}; // };
//
peerConnection?.onConnectionState = (RTCPeerConnectionState state) { // peerConnection?.onConnectionState = (RTCPeerConnectionState state) {
print('Connection state change: $state'); // print('Connection state change: $state');
}; // };
//
peerConnection?.onSignalingState = (RTCSignalingState state) { // peerConnection?.onSignalingState = (RTCSignalingState state) {
print('Signaling state change: $state'); // print('Signaling state change: $state');
}; // };
//
peerConnection?.onIceGatheringState = (RTCIceGatheringState state) { // peerConnection?.onIceGatheringState = (RTCIceGatheringState state) {
print('ICE connection state change: $state'); // print('ICE connection state change: $state');
}; // };
//
peerConnection?.onAddStream = (MediaStream stream) { // peerConnection?.onAddStream = (MediaStream stream) {
print("Add remote stream"); // print("Add remote stream");
onAddRemoteStream?.call(stream); // onAddRemoteStream?.call(stream);
remoteStream = stream; // remoteStream = stream;
}; // };
} // }
} // }

@ -123,7 +123,7 @@ class LocationUtils {
latitude: location.latitude!, latitude: location.latitude!,
longitude: location.longitude!, longitude: location.longitude!,
altitude: location.altitude!, altitude: location.altitude!,
timestamp: null, timestamp: DateTime.now(),
accuracy: 1.0, accuracy: 1.0,
heading: 0.0, heading: 0.0,
speed: 0.0, speed: 0.0,

@ -212,17 +212,17 @@ class DoctorCard extends StatelessWidget {
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon( full: Icon(
Icons.star, Icons.star,
color: Color(0XFFD02127), color: CustomColors.accentColor,
), ),
half: Icon( half: Icon(
Icons.star_half, Icons.star_half,
color: CustomColors.accentColor, color: CustomColors.accentColor, ),
),
empty: Icon( empty: Icon(
Icons.star_border, Icons.star_border,
color: Color(0XFFD02127), color: CustomColors.accentColor,
), ),
), ),
unratedColor: Colors.grey[500],
onRatingUpdate: (double value) {}), onRatingUpdate: (double value) {}),
], ],
), ),

@ -150,6 +150,7 @@ class DoctorHeader extends StatelessWidget {
color: CustomColors.accentColor, color: CustomColors.accentColor,
), ),
), ),
unratedColor: Colors.grey[500],
onRatingUpdate: (double value) {}), onRatingUpdate: (double value) {}),
SizedBox(width: 6), SizedBox(width: 6),
Text( Text(
@ -299,21 +300,22 @@ class DoctorHeader extends StatelessWidget {
itemSize: 20.0, itemSize: 20.0,
allowHalfRating: true, allowHalfRating: true,
initialRating: initialRating:
this.headerModel!.decimalDoctorRate! != null ? double.tryParse(this.headerModel!.decimalDoctorRate!)! : this.headerModel!.actualDoctorRate!.toDouble(), this.headerModel.decimalDoctorRate != null ? double.tryParse(this.headerModel.decimalDoctorRate)! : this.headerModel.actualDoctorRate!.toDouble(),
ratingWidget: RatingWidget( ratingWidget: RatingWidget(
full: Icon( full: Icon(
Icons.star, Icons.star,
color: Color(0XFFD02127), color: CustomColors.accentColor,
), ),
half: Icon( half: Icon(
Icons.star_half, Icons.star_half,
color: Color(0XFFD02127), color: CustomColors.accentColor,
), ),
empty: Icon( empty: Icon(
Icons.star_border, Icons.star_border,
color: Color(0XFFD02127), color: CustomColors.accentColor,
), ),
), ),
unratedColor: Colors.grey[500],
onRatingUpdate: (double value) {}), onRatingUpdate: (double value) {}),
// RatingBar( // RatingBar(
// initialRating: this.headerModel!.decimalDoctorRate! != null ? double.tryParse(this.headerModel!.decimalDoctorRate!)! : this.headerModel!.actualDoctorRate!.toDouble(), // initialRating: this.headerModel!.decimalDoctorRate! != null ? double.tryParse(this.headerModel!.decimalDoctorRate!)! : this.headerModel!.actualDoctorRate!.toDouble(),

@ -47,7 +47,11 @@ class PackagesItemCardState extends State<PackagesItemCard> {
aspectRatio: 144 / 144, aspectRatio: 144 / 144,
child: ClipRRect( child: ClipRRect(
borderRadius: BorderRadius.circular(12.0), borderRadius: BorderRadius.circular(12.0),
child: Image.network(widget.itemModel!.images!.isNotEmpty ? widget.itemModel!.images![0].src! : "https://mdlaboratories.com/offersdiscounts/images/thumbs/0000162_dermatology-testing.jpeg", fit: BoxFit.fill, height: 180.0, width: 180.0), child: Image.network(
widget.itemModel!.images!.isNotEmpty ? widget.itemModel!.images![0].src! : "https://mdlaboratories.com/offersdiscounts/images/thumbs/0000162_dermatology-testing.jpeg",
fit: BoxFit.fill,
height: 180.0,
width: 180.0),
), ),
), ),
SizedBox(height: 6), SizedBox(height: 6),
@ -100,20 +104,27 @@ class PackagesItemCardState extends State<PackagesItemCard> {
), ),
), ),
RatingBar( RatingBar(
initialRating: 4.5, // todo ask haroon about parameter for rating initialRating: 4.5, // todo ask haroon about parameter for rating
// size: 18.0, // size: 18.0,
// filledColor: Color(0XFFD02127), // filledColor: Color(0XFFD02127),
// emptyColor: Color(0XFFD02127), // emptyColor: Color(0XFFD02127),
// isHalfAllowed: true, // isHalfAllowed: true,
// halfFilledIcon: Icons.star_half, // halfFilledIcon: Icons.star_half,
// filledIcon: Icons.star, // filledIcon: Icons.star,
// emptyIcon: , // emptyIcon: ,
// //
ratingWidget: RatingWidget( full:Icon(Icons.star, color:Color(0XFFD02127)), half:Icon(Icons.star_half, color: Color(0XFFD02127)), empty: Icon(Icons.star_border,color: Color(0XFFD02127)) , ratingWidget: RatingWidget(
), onRatingUpdate: (double value) { }), full: Icon(Icons.star, color: CustomColors.accentColor,),
half: Icon(Icons.star_half, color: CustomColors.accentColor,),
empty: Icon(Icons.star_border, color: CustomColors.accentColor,),
),
ignoreGestures: true,
updateOnDrag: false,
unratedColor: Colors.grey[500],
onRatingUpdate: (double value) {}),
], ],
), ),
if(widget.onCartClick != null) if (widget.onCartClick != null)
InkWell( InkWell(
child: SvgPicture.asset("assets/images/new/add_to_cart.svg"), child: SvgPicture.asset("assets/images/new/add_to_cart.svg"),
onTap: () { onTap: () {

@ -3,6 +3,7 @@ import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/product_deta
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-page/cart-order-page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-page/cart-order-page.dart';
import 'package:diplomaticquarterapp/pages/pharmacy/order/ProductReview.dart'; import 'package:diplomaticquarterapp/pages/pharmacy/order/ProductReview.dart';
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
@ -13,7 +14,6 @@ import 'package:flutter_rating_bar/flutter_rating_bar.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class productTile extends StatelessWidget { class productTile extends StatelessWidget {
final String? productName; final String? productName;
final String? productPrice; final String? productPrice;
@ -99,10 +99,7 @@ class productTile extends StatelessWidget {
child: RichText( child: RichText(
text: TextSpan( text: TextSpan(
text: productName, text: productName,
style: TextStyle( style: TextStyle(color: Colors.black54, fontSize: 15, fontWeight: FontWeight.bold),
color: Colors.black54,
fontSize: 15,
fontWeight: FontWeight.bold),
), ),
), ),
) )
@ -111,10 +108,7 @@ class productTile extends StatelessWidget {
child: RichText( child: RichText(
text: TextSpan( text: TextSpan(
text: productName, text: productName,
style: TextStyle( style: TextStyle(color: Colors.black54, fontSize: 15, fontWeight: FontWeight.bold),
color: Colors.black54,
fontSize: 15,
fontWeight: FontWeight.bold),
), ),
), ),
), ),
@ -127,10 +121,7 @@ class productTile extends StatelessWidget {
child: RichText( child: RichText(
text: TextSpan( text: TextSpan(
text: 'SAR $productPrice', text: 'SAR $productPrice',
style: TextStyle( style: TextStyle(fontWeight: FontWeight.bold, color: Colors.black, fontSize: 13),
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 13),
), ),
), ),
) )
@ -139,10 +130,7 @@ class productTile extends StatelessWidget {
child: RichText( child: RichText(
text: TextSpan( text: TextSpan(
text: 'SAR $productPrice', text: 'SAR $productPrice',
style: TextStyle( style: TextStyle(fontWeight: FontWeight.bold, color: Colors.black, fontSize: 13),
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 13),
), ),
), ),
), ),
@ -164,23 +152,18 @@ class productTile extends StatelessWidget {
// halfFilledIcon: Icons.star_half, // halfFilledIcon: Icons.star_half,
// filledIcon: Icons.star, // filledIcon: Icons.star,
// emptyIcon: Icons.star, // emptyIcon: Icons.star,
itemBuilder: (BuildContext context, int index) => Icon( itemBuilder: (BuildContext context, int index) => Icon(
Icons.star, Icons.star,
color: Colors.yellow[700], color: CustomColors.accentColor,
size: 15, size: 15,
), onRatingUpdate: (double value) { ),
onRatingUpdate: (double value) {},
},
), ),
), ),
), ),
Text( Text(
'${approvedTotalReviews} ${TranslationBase.of(context).reviews}', '${approvedTotalReviews} ${TranslationBase.of(context).reviews}',
style: TextStyle( style: TextStyle(fontWeight: FontWeight.bold, color: Colors.grey, fontSize: 13),
fontWeight: FontWeight.bold,
color: Colors.grey,
fontSize: 13),
), ),
], ],
) )
@ -218,9 +201,7 @@ class productTile extends StatelessWidget {
GifLoaderDialogUtils.hideDialog(context); GifLoaderDialogUtils.hideDialog(context);
Utils.navigateToCartPage(); Utils.navigateToCartPage();
} else { } else {
AppToast.showErrorToast( AppToast.showErrorToast(message: TranslationBase.of(context).needPrescription);
message: TranslationBase.of(context)
.needPrescription);
} }
}, },
), ),
@ -239,13 +220,8 @@ class productTile extends StatelessWidget {
margin: EdgeInsets.only(bottom: 5.0), margin: EdgeInsets.only(bottom: 5.0),
child: RichText( child: RichText(
text: TextSpan( text: TextSpan(
text: TranslationBase.of(context).quantity + text: TranslationBase.of(context).quantity + "" + '$qyt',
"" + style: TextStyle(fontWeight: FontWeight.bold, color: Colors.grey, fontSize: 13),
'$qyt',
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.grey,
fontSize: 13),
), ),
), ),
), ),
@ -271,10 +247,7 @@ class productTile extends StatelessWidget {
RichText( RichText(
text: TextSpan( text: TextSpan(
text: ' $totalPrice SAR', text: ' $totalPrice SAR',
style: TextStyle( style: TextStyle(fontWeight: FontWeight.bold, color: Colors.black, fontSize: 15),
fontWeight: FontWeight.bold,
color: Colors.black,
fontSize: 15),
), ),
), ),
], ],
@ -304,7 +277,26 @@ class productTile extends StatelessWidget {
// isHalfAllowed: true, // isHalfAllowed: true,
// halfFilledIcon: Icons.star_half, // halfFilledIcon: Icons.star_half,
// filledIcon: , // filledIcon: ,
ratingWidget: RatingWidget(full: Icon(Icons.star, color:Colors.yellow[700], size: 15,), half: Icon(Icons.star_half, color:Colors.grey[500], size: 15), empty: Icon(Icons.star_half, color:Colors.grey[500], size: 15)), onRatingUpdate: (double value) { }, ratingWidget: RatingWidget(
full: Icon(
Icons.star,
color: CustomColors.accentColor,
size: 15,
),
half: Icon(
Icons.star_half,
color: CustomColors.accentColor,
size: 15,
),
empty: Icon(
Icons.star_half,
color: CustomColors.accentColor,
size: 15,
),
),
updateOnDrag: false,
unratedColor: Colors.grey[500],
onRatingUpdate: (double value) {},
), ),
), ),
), ),
@ -314,33 +306,21 @@ class productTile extends StatelessWidget {
// alignment: Alignment.topLeft, // alignment: Alignment.topLeft,
child: RichText( child: RichText(
text: TextSpan( text: TextSpan(
text: text: '${productReviews} ${TranslationBase.of(context).reviews}',
'${productReviews} ${TranslationBase.of(context).reviews}',
// text: '($productReviews reviews)', // text: '($productReviews reviews)',
style: TextStyle( style: TextStyle(fontWeight: FontWeight.bold, color: Colors.grey, fontSize: 13),
fontWeight: FontWeight.bold,
color: Colors.grey,
fontSize: 13),
), ),
), ),
), ),
), ),
InkWell( InkWell(
onTap: () { onTap: () {
Navigator.push( Navigator.push(context, FadePage(page: ProductReviewPage(product!)));
context, FadePage(page: ProductReviewPage(product!)));
}, },
child: Container( child: Container(
padding: padding: EdgeInsets.only(left: 13.0, right: 13.0, top: 5.0),
EdgeInsets.only(left: 13.0, right: 13.0, top: 5.0),
height: 30.0, height: 30.0,
decoration: BoxDecoration( decoration: BoxDecoration(border: Border.all(color: Colors.orange, style: BorderStyle.solid, width: 1.0), color: Colors.transparent, borderRadius: BorderRadius.circular(5.0)),
border: Border.all(
color: Colors.orange,
style: BorderStyle.solid,
width: 1.0),
color: Colors.transparent,
borderRadius: BorderRadius.circular(5.0)),
child: Text( child: Text(
TranslationBase.of(context).writeReview, TranslationBase.of(context).writeReview,
style: TextStyle( style: TextStyle(

@ -126,7 +126,7 @@ dependencies:
jiffy: ^6.2.1 jiffy: ^6.2.1
#Flutter WebRTC #Flutter WebRTC
flutter_webrtc: ^0.9.7 #flutter_webrtc: ^0.9.7
screen_brightness: ^0.2.2+1 screen_brightness: ^0.2.2+1
google_maps_place_picker_mb: ^3.0.0 google_maps_place_picker_mb: ^3.0.0
map_launcher: ^3.0.1 map_launcher: ^3.0.1
@ -149,7 +149,7 @@ dependencies:
badges: ^3.1.2 badges: ^3.1.2
flutter_app_icon_badge: ^2.0.0 flutter_app_icon_badge: ^2.0.0
dropdown_search: 5.0.6 dropdown_search: 5.0.6
youtube_player_flutter: ^8.0.0 youtube_player_flutter: ^8.1.2
shimmer: ^3.0.0 shimmer: ^3.0.0
carousel_slider: ^4.0.0 carousel_slider: ^4.0.0

Loading…
Cancel
Save