import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/model/rate/appointment_details.dart'; import 'package:diplomaticquarterapp/core/viewModels/appointment_rate_view_model.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/landing/landing_page.dart'; import 'package:diplomaticquarterapp/pages/rateAppointment/rate_appointment_clinic.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/avatar/large_avatar.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/drawer/app_drawer_widget.dart'; import 'package:diplomaticquarterapp/widgets/input/text_field.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:eva_icons_flutter/eva_icons_flutter.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; class RateAppointmentDoctor extends StatefulWidget { @override _RateAppointmentDoctorState createState() => _RateAppointmentDoctorState(); } class _RateAppointmentDoctorState extends State { final formKey = GlobalKey(); String note = ""; int rating = 0; @override Widget build(BuildContext context) { return BaseView( builder: (_, model, w) => AppScaffold( baseViewModel: model, body: Scaffold( backgroundColor: Colors.grey[200], appBar: AppBar( elevation: 0, textTheme: TextTheme( headline6: TextStyle(color: Colors.white, fontWeight: FontWeight.bold), ), title: Text(TranslationBase.of(context).rate), leading: Builder( builder: (BuildContext context) { return IconButton( icon: Icon(Icons.menu), color: Colors.white, onPressed: () => Scaffold.of(context).openDrawer(), ); }, ), centerTitle: true, ), drawer: SafeArea(child: AppDrawer()), body: FractionallySizedBox( widthFactor: 1, child: SingleChildScrollView( child: Container( padding: EdgeInsets.all(12), child: Column( children: [ SizedBox( height: 25, //5598 ), Texts( TranslationBase.of(context).lastVisit, bold: true, color: Colors.black, ), SizedBox( height: 25, ), Container( width: double.infinity, decoration: BoxDecoration( borderRadius: BorderRadius.circular(15), color: Colors.white, shape: BoxShape.rectangle, border: Border.all(color: Colors.white, width: 0.5), ), child: Column( children: [ SizedBox( height: 8, ), LargeAvatar( name: model.appointmentDetails.doctorName, url: model.appointmentDetails.doctorImageURL, width: 110, height: 110, ), SizedBox( height: 22, ), Texts( TranslationBase.of(context).dr + " " + model.appointmentDetails.doctorName, bold: true, ), SizedBox( height: 4, ), Texts( model.appointmentDetails.clinicName != null ? model.appointmentDetails.clinicName : "", bold: true, ), SizedBox( height: 8, ) ], ), ), SizedBox( height: 12, ), Center( child: Texts( TranslationBase.of(context).tapTitle, textAlign: TextAlign.center, )), SizedBox( height: 12, ), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ ...List.generate( 5, (index) => AnimatedSwitcher( duration: Duration(milliseconds: 1000), switchInCurve: Curves.elasticOut, switchOutCurve: Curves.elasticIn, transitionBuilder: (Widget child, Animation animation) { return ScaleTransition( child: child, scale: animation); }, child: Container( key: ValueKey(rating), child: IconButton( iconSize: 45.0, onPressed: () { setState(() { rating = index + 1; }); }, color: rating >= (index + 1) ? Color.fromRGBO(255, 186, 0, 1.0) : Colors.grey[400], // Theme.of(context).hintColor, icon: Icon(rating >= (index + 1) ? EvaIcons.star : EvaIcons.star)), ), ), ) ], ), SizedBox( height: 12, ), Form( key: formKey, child: TextFields( hintText: TranslationBase.of(context).notes, minLines: 4, maxLines: 4, // validator: (value) { // if (value.isEmpty) // return 'Please enter your note'; // else if (rating == 0) return 'Rating cannot be \"0\"'; // return null; // }, onChanged: (value) { setState(() { note = value; }); }, ), ), SizedBox( height: 12, ), Container( width: double.infinity, child: Column( children: [ Container( width: MediaQuery.of(context).size.width * 0.9, child: SecondaryButton( onTap: () async { final form = formKey.currentState; if (form.validate() && rating>0 ) { form.save(); Navigator.push( context, FadePage( page: RateAppointmentClinic( appointmentDetails: model.appointmentDetails, doctorNote: note, doctorRate: rating, ), ), ); } }, label: TranslationBase.of(context).next, disabled: (model.state == ViewState.BusyLocal || rating==0), loading: model.state == ViewState.BusyLocal, textColor: Theme.of(context).backgroundColor), ), SizedBox( height: 12, ), InkWell( onTap: () { Navigator.pushReplacement( context, FadePage( page: LandingPage(), ), ); }, child: Texts( TranslationBase.of(context).later, decoration: TextDecoration.underline, color: HexColor('#151DFE'), fontSize: 18, ), ) ], ), ) ], ), ), ), ), ), ), ); } }