diff --git a/lib/core/model/rate/appointment_details.dart b/lib/core/model/rate/appointment_details.dart index 30280b4a..77d759db 100644 --- a/lib/core/model/rate/appointment_details.dart +++ b/lib/core/model/rate/appointment_details.dart @@ -5,13 +5,13 @@ class AppointmentDetails { int appointmentNo; int clinicID; int doctorID; - String startTime; - String endTime; - String appointmentDate; - String clinicName; - String doctorImageURL; - String doctorName; - String projectName; + dynamic startTime; + dynamic endTime; + dynamic appointmentDate; + dynamic clinicName; + dynamic doctorImageURL; + dynamic doctorName; + dynamic projectName; AppointmentDetails( {this.setupID, diff --git a/lib/main.dart b/lib/main.dart index 7438de94..bd310dbc 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -52,6 +52,7 @@ class MyApp extends StatelessWidget { TranslationBaseDelegate(), GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, ], supportedLocales: [ const Locale('ar', ''), // Arabic diff --git a/lib/models/Appointments/toDoCountProviderModel.dart b/lib/models/Appointments/toDoCountProviderModel.dart index 5c74cfb5..0fd83491 100644 --- a/lib/models/Appointments/toDoCountProviderModel.dart +++ b/lib/models/Appointments/toDoCountProviderModel.dart @@ -3,7 +3,7 @@ import 'package:flutter/cupertino.dart'; class ToDoCountProviderModel with ChangeNotifier { int _count; - int get count => _count; + int get count => _count == null ? 0 : _count; void setState(int count) { _count = count; diff --git a/lib/pages/AlHabibMedicalService/all_habib_medical_service_page.dart b/lib/pages/AlHabibMedicalService/all_habib_medical_service_page.dart index 2b9e698b..05919209 100644 --- a/lib/pages/AlHabibMedicalService/all_habib_medical_service_page.dart +++ b/lib/pages/AlHabibMedicalService/all_habib_medical_service_page.dart @@ -10,6 +10,7 @@ import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/parking_page.da import 'package:diplomaticquarterapp/pages/Blood/blood_donation.dart'; import 'package:diplomaticquarterapp/pages/BookAppointment/BookingOptions.dart'; import 'package:diplomaticquarterapp/pages/ChildVaccines/child_vaccines_page.dart'; +import 'package:diplomaticquarterapp/pages/ContactUs/findus/findus_page.dart'; import 'package:diplomaticquarterapp/pages/ErService/ErOptions.dart'; import 'package:diplomaticquarterapp/pages/ToDoList/ToDo.dart'; import 'package:diplomaticquarterapp/pages/family/my-family.dart'; @@ -317,7 +318,7 @@ class _AllHabibMedicalServiceState extends State { onTap: () => Navigator.push( context, FadePage( - page: ParkingPage(), + page: FindUsPage(), ), ), imageLocation: 'assets/images/new-design/find_us_icon.png', diff --git a/lib/pages/BookAppointment/BookConfirm.dart b/lib/pages/BookAppointment/BookConfirm.dart index 144fc2a1..507d7ec1 100644 --- a/lib/pages/BookAppointment/BookConfirm.dart +++ b/lib/pages/BookAppointment/BookConfirm.dart @@ -101,7 +101,7 @@ class _BookConfirmState extends State { fit: BoxFit.fill, height: 70.0, width: 70.0), ), Container( - width: MediaQuery.of(context).size.width * 0.6, + width: MediaQuery.of(context).size.width * 0.58, margin: EdgeInsets.fromLTRB(20.0, 5.0, 10.0, 5.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -303,7 +303,7 @@ class _BookConfirmState extends State { width: 60.0), ), Container( - width: MediaQuery.of(context).size.width * 0.6, + width: MediaQuery.of(context).size.width * 0.58, margin: EdgeInsets.fromLTRB(10.0, 5.0, 10.0, 5.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/lib/pages/BookAppointment/BookSuccess.dart b/lib/pages/BookAppointment/BookSuccess.dart index 85aae542..a070d38d 100644 --- a/lib/pages/BookAppointment/BookSuccess.dart +++ b/lib/pages/BookAppointment/BookSuccess.dart @@ -12,6 +12,7 @@ import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'package:smart_progress_bar/smart_progress_bar.dart'; import 'QRCode.dart'; @@ -21,6 +22,8 @@ class BookSuccess extends StatefulWidget { DoctorList docObject; MyInAppBrowser browser; + final ChromeSafariBrowser chromeBrowser = + new MyChromeSafariBrowser(new MyInAppBrowser()); String appoDateFormatted; String appoTimeFormatted; @@ -78,12 +81,14 @@ class _BookSuccessState extends State { width: 80.0), ), Container( + width: MediaQuery.of(context).size.width * 0.62, margin: EdgeInsets.fromLTRB(10.0, 5.0, 10.0, 5.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.max, children: [ Text(widget.docObject.projectName, + overflow: TextOverflow.clip, style: _getTextStyling()), Container( margin: EdgeInsets.only(top: 5.0), @@ -93,6 +98,7 @@ class _BookSuccessState extends State { Container( margin: EdgeInsets.only(top: 5.0, bottom: 3.0), child: Text(widget.docObject.clinicName, + overflow: TextOverflow.clip, style: _getTextStyling()), ), Container( @@ -101,6 +107,7 @@ class _BookSuccessState extends State { widget.appoDateFormatted + ", " + widget.appoTimeFormatted, + overflow: TextOverflow.clip, style: _getTextStyling()), ), Container( @@ -110,7 +117,7 @@ class _BookSuccessState extends State { widget.docObject.doctorTitle + " " + widget.docObject.name, - overflow: TextOverflow.ellipsis, + overflow: TextOverflow.clip, style: _getTextStyling()), ), ], @@ -295,7 +302,8 @@ class _BookSuccessState extends State { appo.appointmentNo = widget.patientShareResponse.appointmentNo; appo.serviceID = widget.patientShareResponse.serviceID; - appo.isLiveCareAppointment = widget.patientShareResponse.isLiveCareAppointment; + appo.isLiveCareAppointment = + widget.patientShareResponse.isLiveCareAppointment; appo.doctorID = widget.patientShareResponse.doctorID; confirmAppointment(appo); }, @@ -341,8 +349,8 @@ class _BookSuccessState extends State { confirmAppointment(AppoitmentAllHistoryResultList appo) { DoctorsListService service = new DoctorsListService(); service - .confirmAppointment( - appo.appointmentNo, appo.clinicID, appo.projectID, appo.isLiveCareAppointment, context) + .confirmAppointment(appo.appointmentNo, appo.clinicID, appo.projectID, + appo.isLiveCareAppointment, context) .then((res) { if (res['MessageStatus'] == 1) { AppToast.showSuccessToast(message: res['ErrorEndUserMessage']); @@ -542,22 +550,31 @@ class _BookSuccessState extends State { AuthenticatedUser authenticatedUser, double amount, PatientShareResponse patientShareResponse, - AppoitmentAllHistoryResultList appo) { - widget.browser = new MyInAppBrowser( - onExitCallback: onBrowserExit, - appo: appo, - onLoadStartCallback: onBrowserLoadStart); - - widget.browser.openPaymentBrowser( - amount, - "Appointment check in", - Utils.getAppointmentTransID( - appo.projectID, appo.clinicID, appo.appointmentNo), - appo.projectID.toString(), - authenticatedUser.emailAddress, - paymentMethod, - authenticatedUser, - widget.browser); + AppoitmentAllHistoryResultList appo) async { + if (paymentMethod == "ApplePay") { + await widget.chromeBrowser.open( + url: "https://flutter.dev/", + options: ChromeSafariBrowserClassOptions( + android: AndroidChromeCustomTabsOptions( + addDefaultShareMenuItem: false), + ios: IOSSafariOptions(barCollapsingEnabled: true))); + } else { + widget.browser = new MyInAppBrowser( + onExitCallback: onBrowserExit, + appo: appo, + onLoadStartCallback: onBrowserLoadStart); + + widget.browser.openPaymentBrowser( + amount, + "Appointment check in", + Utils.getAppointmentTransID( + appo.projectID, appo.clinicID, appo.appointmentNo), + appo.projectID.toString(), + authenticatedUser.emailAddress, + paymentMethod, + authenticatedUser, + widget.browser); + } } onBrowserLoadStart(String url) { @@ -608,6 +625,28 @@ class _BookSuccessState extends State { text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6)); } + getApplePayAPQ(AppoitmentAllHistoryResultList appo) { + DoctorsListService service = new DoctorsListService(); + service + .checkPaymentStatus( + Utils.getAppointmentTransID( + appo.projectID, appo.clinicID, appo.appointmentNo), + context) + .then((res) { + print("Printing Payment Status Reponse!!!!"); + print(res); + String paymentInfo = res['Response_Message']; + if (paymentInfo == 'Success') { + createAdvancePayment(res, appo); + } else { + AppToast.showErrorToast(message: res['Response_Message']); + } + }).catchError((err) { + print(err); + }).showProgressBar( + text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6)); + } + createAdvancePayment(res, AppoitmentAllHistoryResultList appo) { DoctorsListService service = new DoctorsListService(); String paymentReference = res['Fort_id'].toString(); diff --git a/lib/pages/ToDoList/payment_method_select.dart b/lib/pages/ToDoList/payment_method_select.dart index a6936083..a189128a 100644 --- a/lib/pages/ToDoList/payment_method_select.dart +++ b/lib/pages/ToDoList/payment_method_select.dart @@ -1,6 +1,7 @@ import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; class PaymentMethod extends StatefulWidget { @override @@ -93,35 +94,6 @@ class _PaymentMethodState extends State { ), ), ), -// Expanded( -// child: Container( -// child: InkWell( -// onTap: () { -// updateSelectedPaymentMethod("SADAD"); -// }, -// child: Card( -// elevation: 3.0, -// margin: EdgeInsets.fromLTRB(8.0, 16.0, 8.0, 8.0), -// color: Colors.white, -// shape: RoundedRectangleBorder( -// borderRadius: BorderRadius.circular(10), -// side: selectedPaymentMethod == "SADAD" -// ? BorderSide( -// color: Colors.green, width: 5.0) -// : BorderSide( -// color: Colors.transparent, width: 0.0), -// ), -// child: Container( -// height: 120.0, -// padding: EdgeInsets.all(7.0), -// width: MediaQuery.of(context).size.width * 0.45, -// child: Image.asset( -// "assets/images/new-design/sadad.png"), -// ), -// ), -// ), -// ), -// ), ], ), ), @@ -195,9 +167,44 @@ class _PaymentMethodState extends State { margin: EdgeInsets.only(top: 25.0), child: Flex( direction: Axis.horizontal, - children: [], + children: [ + Expanded( + child: Container( + child: InkWell( + onTap: () { + updateSelectedPaymentMethod("ApplePay"); + }, + child: Card( + elevation: 3.0, + margin: EdgeInsets.fromLTRB(8.0, 16.0, 8.0, 8.0), + color: Colors.white, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), + side: selectedPaymentMethod == "ApplePay" + ? BorderSide( + color: Colors.green, width: 5.0) + : BorderSide( + color: Colors.transparent, width: 0.0), + ), + child: Container( + height: 120.0, + padding: EdgeInsets.all(20.0), + child: SvgPicture.asset( + "assets/images/new-design/applepay.svg"), + ), + ), + ), + ), + ), + Expanded( + child: Container(), + ), + ], ), ), + SizedBox( + height: 150.0, + ), ], ), ), diff --git a/lib/pages/family/add-family-member.dart b/lib/pages/family/add-family-member.dart index f1742141..98df5f88 100644 --- a/lib/pages/family/add-family-member.dart +++ b/lib/pages/family/add-family-member.dart @@ -179,8 +179,7 @@ class _AddMember extends State { request.regionID = 1; } loading(true); - this - .familyFileProvider + familyFileProvider .insertNewMember(request) .then((value) => sendActivationCode(value)); } @@ -189,8 +188,7 @@ class _AddMember extends State { // var request = this.getCommonRequest(); loading(true); patientShareRequestID = result['PatientShareRequestID']; - this - .familyFileProvider + familyFileProvider .sendActivationCode(mobileNo, countryCode, nationalIDorFile.text) .then((result) => { if (result != null && result['isSMSSent'] == true) @@ -203,11 +201,13 @@ class _AddMember extends State { startSMSService(type, result) { loading(false); - new SMSOTP( + SMSOTP( context, type, - this.mobileNo, - (value) => {this.checkActivationCode(value, result)}, + mobileNo, + (value) { + this.checkActivationCode(value, result); + }, () => { print('Faild..'), }, @@ -215,8 +215,7 @@ class _AddMember extends State { } checkActivationCode(value, result) { - this - .familyFileProvider + familyFileProvider .checkActivationCode( result['LogInTokenID'], value, nationalIDorFile.text, mobileNo) .then((result) => { @@ -226,8 +225,7 @@ class _AddMember extends State { } handleFamilyRequests(id, stauts) { - this - .familyFileProvider + familyFileProvider .acceptAndRejectRecievedRequests(id, stauts) .then((result) => { sharedPref.remove(FAMILY_FILE), diff --git a/lib/pages/insurance/insurance_card_screen.dart b/lib/pages/insurance/insurance_card_screen.dart index 6483b6b2..55100497 100644 --- a/lib/pages/insurance/insurance_card_screen.dart +++ b/lib/pages/insurance/insurance_card_screen.dart @@ -19,7 +19,7 @@ class InsuranceCard extends StatefulWidget { @override _InsuranceCardState createState() => _InsuranceCardState(); } - +//TODO fix it class _InsuranceCardState extends State { @override Widget build(BuildContext context) { @@ -29,6 +29,7 @@ class _InsuranceCardState extends State { AppScaffold( isShowAppBar: true, baseViewModel: model, + image: 'assets/images/medical/insurance_card_icon.png', appBarTitle: TranslationBase.of(context).insuranceCards, body: Container( margin: EdgeInsets.only( diff --git a/lib/pages/landing/landing_page.dart b/lib/pages/landing/landing_page.dart index bb3589d9..8df464ed 100644 --- a/lib/pages/landing/landing_page.dart +++ b/lib/pages/landing/landing_page.dart @@ -12,27 +12,21 @@ import 'package:diplomaticquarterapp/pages/BookAppointment/BookingOptions.dart'; import 'package:diplomaticquarterapp/pages/ToDoList/ToDo.dart'; import 'package:diplomaticquarterapp/pages/livecare/incoming_call.dart'; import 'package:diplomaticquarterapp/pages/medical/medical_profile_page.dart'; -import 'package:diplomaticquarterapp/pages/medical/my_admissions_page.dart'; import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart'; import 'package:diplomaticquarterapp/services/robo_search/event_provider.dart'; import 'package:diplomaticquarterapp/uitl/CalendarUtils.dart'; import 'package:diplomaticquarterapp/uitl/LocalNotification.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/bottom_navigation/bottom_nav_bar.dart'; -import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; import 'package:diplomaticquarterapp/widgets/buttons/floatingActionButton.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart'; import 'package:diplomaticquarterapp/widgets/drawer/app_drawer_widget.dart'; -import 'package:diplomaticquarterapp/widgets/transitions/slide_up_page.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; -import 'package:flutter_svg/svg.dart'; import 'package:permission_handler/permission_handler.dart'; -import 'package:provider/provider.dart'; -import 'package:rxdart/rxdart.dart'; import '../../locator.dart'; import 'home_page.dart'; @@ -52,7 +46,8 @@ class _LandingPageState extends State with WidgetsBindingObserver { ProjectViewModel projectProvider; ///inject the user data - AuthenticatedUserObject authenticatedUserObject = locator(); + AuthenticatedUserObject authenticatedUserObject = + locator(); final FirebaseMessaging _firebaseMessaging = FirebaseMessaging(); final authService = new AuthProvider(); @@ -134,21 +129,22 @@ class _LandingPageState extends State with WidgetsBindingObserver { }); _requestIOSPermissions(); pageController = PageController(keepPage: true); - // _firebaseMessaging.setAutoInitEnabled(true); - // - // if (Platform.isIOS) { - // _firebaseMessaging.requestNotificationPermissions(); - // } - // - // _firebaseMessaging.getToken().then((String token) { - // sharedPref.setString(PUSH_TOKEN, token); - // if (token != null) { - // checkUserStatus(token); - // } - // requestPermissions(); - // }).catchError((err) { - // print(err); - // }); + _firebaseMessaging.setAutoInitEnabled(true); + + if (Platform.isIOS) { + _firebaseMessaging.requestNotificationPermissions(); + } + + _firebaseMessaging.getToken().then((String token) { + print(token); + sharedPref.setString(PUSH_TOKEN, token); + if (token != null) { + checkUserStatus(token); + } + requestPermissions(); + }).catchError((err) { + print(err); + }); //_firebase Background message handler // _firebaseMessaging.configure( @@ -345,7 +341,11 @@ class _LandingPageState extends State with WidgetsBindingObserver { headline6: TextStyle(color: Colors.white, fontWeight: FontWeight.bold), ), - title: Texts(getText(currentTab).toUpperCase(),bold: true,color: Colors.white,), + title: Texts( + getText(currentTab).toUpperCase(), + bold: true, + color: Colors.white, + ), leading: Builder( builder: (BuildContext context) { return IconButton( @@ -373,7 +373,11 @@ class _LandingPageState extends State with WidgetsBindingObserver { physics: NeverScrollableScrollPhysics(), controller: pageController, children: [ - HomePage(goToMyProfile: () {_changeCurrentTab(1);},), + HomePage( + goToMyProfile: () { + _changeCurrentTab(1); + }, + ), MedicalProfilePage(), BookingOptions(), Container(), diff --git a/lib/pages/login/confirm-login.dart b/lib/pages/login/confirm-login.dart index 940db01c..bfde20d7 100644 --- a/lib/pages/login/confirm-login.dart +++ b/lib/pages/login/confirm-login.dart @@ -9,6 +9,7 @@ import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart' import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; +import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; import 'package:diplomaticquarterapp/widgets/card/rounded_container.dart'; @@ -72,173 +73,165 @@ class _ConfirmLogin extends State { @override Widget build(BuildContext context) { return AppScaffold( - appBarTitle: TranslationBase.of(context).confirm, - isShowAppBar: true, - isShowDecPage: false, - body: SingleChildScrollView( - child: Container( - padding: EdgeInsets.all(20), - height: SizeConfig.realScreenHeight * .9, - width: SizeConfig.realScreenWidth, - child: Column( - children: [ - Expanded( - flex: 3, - child: user != null && isMoreOption == false - ? Column( - mainAxisAlignment: - MainAxisAlignment.spaceEvenly, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Image.asset( - 'assets/images/DQ/dq_logo_icon.png', - height: 90, - width: 90, - ), - AppText( - TranslationBase.of(context).welcomeBack + - ' ' + - user.name, - fontSize: SizeConfig.textMultiplier * 3.5, - ), - AppText( - TranslationBase.of(context).accountInfo, - fontSize: SizeConfig.textMultiplier * 2.5, - ), - Card( - color: Colors.grey[300], - child: Row( - children: [ - Expanded( - child: ListTile( - title: Text( - TranslationBase.of(context) - .lastLoginAt, - textAlign: TextAlign.center, - ), - subtitle: Text( - user.editedOn != null - ? formatDate(DateUtil - .convertStringToDate( - user.editedOn)) - : '--', - textAlign: TextAlign.center), - )), - Expanded( - child: ListTile( - title: Text( - TranslationBase.of(context) - .lastLoginWith, - textAlign: TextAlign.center), - subtitle: Text( - getType( - user.logInType, context), - textAlign: TextAlign.center), - )) - ], - )) - ], - ) - : Column( - mainAxisAlignment: - MainAxisAlignment.spaceEvenly, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Image.asset( - 'assets/images/DQ/dq_logo_icon.png', - height: 90, - width: 90, + appBarTitle: TranslationBase.of(context).confirm, + isShowAppBar: true, + isShowDecPage: false, + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.all(20), + height: SizeConfig.realScreenHeight * .9, + width: SizeConfig.realScreenWidth, + child: Column( + children: [ + Expanded( + flex: 3, + child: user != null && isMoreOption == false + ? Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image.asset( + 'assets/images/DQ/dq_logo_icon.png', + height: 90, + width: 90, + ), + AppText( + TranslationBase.of(context).welcomeBack + + ' ' + + user.name, + fontSize: SizeConfig.textMultiplier * 3.5, + ), + AppText( + TranslationBase.of(context).accountInfo, + fontSize: SizeConfig.textMultiplier * 2.5, + ), + Card( + color: Colors.grey[300], + child: Row( + children: [ + Expanded( + child: ListTile( + title: Text( + TranslationBase.of(context).lastLoginAt, + textAlign: TextAlign.center, + ), + subtitle: Text( + user.editedOn != null + ? formatDate( + DateUtil.convertStringToDate( + user.editedOn)) + : '--', + textAlign: TextAlign.center), + )), + Expanded( + child: ListTile( + title: Text( + TranslationBase.of(context) + .lastLoginWith, + textAlign: TextAlign.center), + subtitle: Text( + getType(user.logInType, context), + textAlign: TextAlign.center), + )) + ], + )) + ], + ) + : Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image.asset( + 'assets/images/DQ/dq_logo_icon.png', + height: 90, + width: 90, + ), + this.onlySMSBox == false + ? AppText( + TranslationBase.of(context) + .verifyLoginWith, + fontSize: SizeConfig.textMultiplier * 3.5, + textAlign: TextAlign.left, + ) + : AppText( + TranslationBase.of(context) + .verifyFingerprint2, + fontSize: SizeConfig.textMultiplier * 2.5, + textAlign: TextAlign.start, ), - this.onlySMSBox == false - ? AppText( - TranslationBase.of(context) - .verifyLoginWith, - fontSize: - SizeConfig.textMultiplier * 3.5, - textAlign: TextAlign.left, - ) - : AppText( - TranslationBase.of(context) - .verifyFingerprint2, - fontSize: - SizeConfig.textMultiplier * 2.5, - textAlign: TextAlign.start, - ), - ])), - user != null && isMoreOption == false - ? Expanded( - flex: 2, - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - mainAxisAlignment: - MainAxisAlignment.center, - children: [ - Expanded( - child: InkWell( - onTap: () => { - authenticateUser( - 3, - BiometricType - .face.index) - }, - child: - getButton(user.logInType))), - Expanded(child: getButton(5)) - ]) - ])) - : Expanded( - flex: 4, - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, + ])), + user != null && isMoreOption == false + ? Expanded( + flex: 2, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.center, children: [ - onlySMSBox == false - ? Row( - mainAxisAlignment: - MainAxisAlignment.center, - children: [ - Expanded(child: getButton(3)), - Expanded(child: getButton(2)) - ], - ) - : SizedBox(), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Expanded(child: getButton(1)), - Expanded(child: getButton(4)) - ], - ), - ]), - ), - Expanded( - flex: 1, - child: Column( - mainAxisAlignment: MainAxisAlignment.end, + Expanded( + child: InkWell( + onTap: () => { + authenticateUser( + 3, BiometricType.face.index) + }, + child: getButton(user.logInType))), + Expanded(child: getButton(5)) + ]) + ])) + : Expanded( + flex: 4, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, children: [ - user != null + onlySMSBox == false ? Row( + mainAxisAlignment: MainAxisAlignment.center, children: [ - Expanded( - child: DefaultButton( - TranslationBase.of(context) - .useAnotherAccount, - () => { - Navigator.of(context).pushNamed( - LOGIN_TYPE, - ) - }, - )), + Expanded(child: getButton(3)), + Expanded(child: getButton(2)) ], ) : SizedBox(), - ], - )) + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Expanded(child: getButton(1)), + Expanded(child: getButton(4)) + ], + ), + ]), + ), + Expanded( + flex: 1, + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + user != null + ? Row( + children: [ + Expanded( + child: DefaultButton( + TranslationBase.of(context).useAnotherAccount, + () => { + Navigator.of(context).pushNamed( + LOGIN_TYPE, + ) + }, + )), + ], + ) + : SizedBox(), ], - )))); + ), + ) + ], + ), + ), + ), + ); } Future _getAvailableBiometrics() async { @@ -300,11 +293,13 @@ class _ConfirmLogin extends State { showLoader(true); var req = getCommonRequest(); var request = CheckPatientAuthenticationReq.fromJson(req.toJson()); + GifLoaderDialogUtils.showMyDialog(context); sharedPref.setObject(REGISTER_DATA_FOR_REGISTER, request); authService .checkPatientAuthentication(request) .then((value) => { + GifLoaderDialogUtils.hideDialog(context), if (value['isSMSSent']) { sharedPref.setString(LOGIN_TOKEN_ID, value['LogInTokenID']), @@ -321,20 +316,21 @@ class _ConfirmLogin extends State { }) .catchError((err) { print(err); - }).showProgressBar( - text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6)); + GifLoaderDialogUtils.hideDialog(context); + }); } sendActivationCode(type) async { var request = this.getCommonRequest(); - // loading(true); - - await this.authService.sendActivationCode(request).then((result) => { - if (result != null && result['isSMSSent'] == true) - {this.startSMSService(type), print(result)} - }); - - // SMSOTP.showLoadingDialog(context, false), + GifLoaderDialogUtils.showMyDialog(context); + await this.authService.sendActivationCode(request).then((result) { + GifLoaderDialogUtils.hideDialog(context); + if (result != null && result['isSMSSent'] == true) { + this.startSMSService(type); + } + }).catchError((r) { + GifLoaderDialogUtils.hideDialog(context); + }); } startSMSService(type) { @@ -479,11 +475,10 @@ class _ConfirmLogin extends State { } checkActivationCode({value}) async { - SMSOTP.showLoadingDialog(context, true); + GifLoaderDialogUtils.showMyDialog(context); var request = this.getCommonRequest().toJson(); - this - .authService + authService .checkActivationCode(request, value) .then((result) => { if (result is Map) @@ -498,25 +493,19 @@ class _ConfirmLogin extends State { } else { - this.userData = result - .list, //AuthenticatedUser.fromJson(result['List'][0]), - this.sharedPref.setObject(USER_PROFILE, result.list), - this.loginTokenID = result.logInTokenID, - this - .sharedPref - .setObject(LOGIN_TOKEN_ID, result.logInTokenID), - this - .sharedPref - .setString(TOKEN, result.authenticationTokenID), - this.checkIfUserAgreedBefore(result), - // Navigator.of(context).pop(), - SMSOTP.showLoadingDialog(context, false), + userData = result.list, + //AuthenticatedUser.fromJson(result['List'][0]), + sharedPref.setObject(USER_PROFILE, result.list), + loginTokenID = result.logInTokenID, + sharedPref.setObject(LOGIN_TOKEN_ID, result.logInTokenID), + sharedPref.setString(TOKEN, result.authenticationTokenID), + checkIfUserAgreedBefore(result), } } else { // Navigator.of(context).pop(), - SMSOTP.showLoadingDialog(context, false), + GifLoaderDialogUtils.hideDialog(context), Future.delayed(Duration(seconds: 1), () { AppToast.showErrorToast(message: result); }), @@ -524,8 +513,8 @@ class _ConfirmLogin extends State { }) .catchError((err) { print(err); - }).showProgressBar( - text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6)); + GifLoaderDialogUtils.hideDialog(context); + }); } checkIfUserAgreedBefore(CheckActivationCode result) { diff --git a/lib/pages/login/login.dart b/lib/pages/login/login.dart index 9e9ae12c..91d356de 100644 --- a/lib/pages/login/login.dart +++ b/lib/pages/login/login.dart @@ -11,7 +11,6 @@ import 'package:diplomaticquarterapp/pages/rateAppointment/rate_appointment_doct import 'package:diplomaticquarterapp/routes.dart'; import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; -import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart'; @@ -19,10 +18,12 @@ import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart'; import 'package:diplomaticquarterapp/widgets/input/text_field.dart'; import 'package:diplomaticquarterapp/widgets/mobile-no/mobile_no.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:diplomaticquarterapp/widgets/progress_indicator/app_circular_progress_Indeicator.dart'; import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:smart_progress_bar/smart_progress_bar.dart'; class Login extends StatefulWidget { @override @@ -60,72 +61,76 @@ class _Login extends State { @override Widget build(BuildContext context) { return AppScaffold( - appBarTitle: TranslationBase.of(context).login, - isShowAppBar: true, - isShowDecPage: false, - body: SingleChildScrollView( - child: Container( + appBarTitle: TranslationBase.of(context).login, + isShowAppBar: true, + isShowDecPage: false, + body: SingleChildScrollView( + child: Container( padding: EdgeInsets.only(top: 10, left: 20, right: 20, bottom: 30), height: SizeConfig.realScreenHeight * .9, width: SizeConfig.realScreenWidth, - child: Column(children: [ - Expanded( - flex: 2, - child: AppText( - TranslationBase.of(context).enterNationalId, - fontSize: SizeConfig.textMultiplier * 3.5, - textAlign: TextAlign.start, - )), - Expanded( - flex: 3, - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - MobileNo( - onNumberChange: (value) => - {mobileNo = value, validateForm()}, - onCountryChange: (value) => countryCode = value), - Container( - child: TextFields( - fontWeight: FontWeight.normal, - controller: nationalIDorFile, - onChanged: (value) => {validateForm()}, - prefixIcon: Icon( - loginType == 1 - ? Icons.chrome_reader_mode - : Icons.receipt, - color: Color(0xFF40ACC9)), - padding: EdgeInsets.only( - top: 20, bottom: 20, left: 10, right: 10), - hintText: loginType == 1 - ? TranslationBase.of(context).nationalID - : TranslationBase.of(context).fileNo, - )) - ], - ), - ), - Expanded( + child: Column( + children: [ + Expanded( + flex: 2, + child: AppText( + TranslationBase.of(context).enterNationalId, + fontSize: SizeConfig.textMultiplier * 3.5, + textAlign: TextAlign.start, + )), + Expanded( flex: 3, child: Column( - mainAxisAlignment: MainAxisAlignment.end, + mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - Row( - children: [ - Expanded( - child: DefaultButton( - TranslationBase.of(context).login, - () => {this.startLogin()}, - color: isButtonDisabled == true - ? Colors.grey - : Colors.grey[900], - textColor: Colors.white, - )) - ], - ), + MobileNo( + onNumberChange: (value) => + {mobileNo = value, validateForm()}, + onCountryChange: (value) => countryCode = value), + Container( + child: TextFields( + fontWeight: FontWeight.normal, + controller: nationalIDorFile, + onChanged: (value) => {validateForm()}, + prefixIcon: Icon( + loginType == 1 + ? Icons.chrome_reader_mode + : Icons.receipt, + color: Color(0xFF40ACC9)), + padding: EdgeInsets.only( + top: 20, bottom: 20, left: 10, right: 10), + hintText: loginType == 1 + ? TranslationBase.of(context).nationalID + : TranslationBase.of(context).fileNo, + )) ], - )) - ]), - ))); + ), + ), + Expanded( + flex: 3, + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Row( + children: [ + Expanded( + child: DefaultButton( + TranslationBase.of(context).login, + () => {this.startLogin()}, + color: isButtonDisabled == true + ? Colors.grey + : Colors.grey[900], + textColor: Colors.white, + )) + ], + ), + ], + )) + ], + ), + ), + ), + ); } startLogin() { @@ -136,8 +141,10 @@ class _Login extends State { void validateForm() { //TODO fix login - if (util.validateIDBox(nationalIDorFile.text, loginType) == true && - mobileNo.length >= 9 && + if (util.validateIDBox(nationalIDorFile.text, loginType) == + true /*&& + mobileNo.length >= 9 */ + && util.isSAUDIIDValid(nationalIDorFile.text, loginType) == true) { setState(() { isButtonDisabled = false; @@ -151,7 +158,6 @@ class _Login extends State { checkUserAuthentication() { // showLoader(true); - GifLoaderDialogUtils.showMyDialog(context); var request = CheckPatientAuthenticationReq(); request.isRegister = false; request.patientMobileNumber = int.parse(mobileNo); @@ -166,15 +172,16 @@ class _Login extends State { request.patientID = int.parse(nationalIDorFile.text); } sharedPref.setObject(REGISTER_DATA_FOR_REGISTER, request); + GifLoaderDialogUtils.showMyDialog(context); authService .checkPatientAuthentication(request) .then((value) => { //showLoader(false), - GifLoaderDialogUtils.hideDialog(context), if (value['isSMSSent']) { sharedPref.setString(LOGIN_TOKEN_ID, value['LogInTokenID']), sharedPref.setObject(REGISTER_DATA_FOR_LOGIIN, request), + GifLoaderDialogUtils.hideDialog(context), Navigator.of(context).pushNamed(CONFIRM_LOGIN) } else @@ -183,10 +190,10 @@ class _Login extends State { } }) .catchError((err) { - GifLoaderDialogUtils.hideDialog(context); print(err); - AppToast.showErrorToast(message: err); + GifLoaderDialogUtils.hideDialog(context); }); + // SMSOTP.showLoadingDialog(context, false), } checkActivationCode({code}) async { @@ -207,7 +214,6 @@ class _Login extends State { request['PatientIdentificationID'] = ''; request['PatientID'] = int.parse(nationalIDorFile.text); } - GifLoaderDialogUtils.showMyDialog(context); // request.isRegister = false; this.authService.checkActivationCode(request, code).then((result) => { result = CheckActivationCode.fromJson(result), @@ -215,15 +221,11 @@ class _Login extends State { this.sharedPref.setObject(USER_PROFILE, result.list), this.sharedPref.setObject(LOGIN_TOKEN_ID, result.logInTokenID), this.sharedPref.setString(TOKEN, result.authenticationTokenID), - GifLoaderDialogUtils.hideDialog(context), - //this.checkIfUserAgreedBefore(result), - Navigator.of(context).pushNamed( - HOME, - ), - //showLoader(false), + appointmentRateViewModel .getIsLastAppointmentRatedList() .then((value) => { + GifLoaderDialogUtils.hideDialog(context), if (appointmentRateViewModel.isHaveAppointmentNotRate) { Navigator.pushReplacement( @@ -244,10 +246,10 @@ class _Login extends State { } }) .catchError((err) { - GifLoaderDialogUtils.hideDialog(context); print(err); - AppToast.showErrorToast(message: err); - }) + GifLoaderDialogUtils.hideDialog(context); + }), + // SMSOTP.showLoadingDialog(context, false), }); } diff --git a/lib/services/family_files/family_files_provider.dart b/lib/services/family_files/family_files_provider.dart index f5a06df9..b80ce22e 100644 --- a/lib/services/family_files/family_files_provider.dart +++ b/lib/services/family_files/family_files_provider.dart @@ -172,7 +172,7 @@ class FamilyFilesProvider with ChangeNotifier { throw error; } } - + //TODO Future checkActivationCode( loginTokenID, activationCode, indentification, mobileNo) async { try { diff --git a/lib/widgets/Loader/gif_loader_container.dart b/lib/widgets/Loader/gif_loader_container.dart index 2d3d1cdb..06c151c9 100644 --- a/lib/widgets/Loader/gif_loader_container.dart +++ b/lib/widgets/Loader/gif_loader_container.dart @@ -16,7 +16,7 @@ class _GifLoaderContainerState extends State WidgetsBinding.instance.addPostFrameCallback((_) { controller1.repeat( - min: 0, max: 12, period: Duration(milliseconds: 750), reverse: true); + min: 0, max: 11, period: Duration(milliseconds: 750), reverse: true); }); super.initState(); } diff --git a/lib/widgets/in_app_browser/InAppBrowser.dart b/lib/widgets/in_app_browser/InAppBrowser.dart index 6722971d..68f15add 100644 --- a/lib/widgets/in_app_browser/InAppBrowser.dart +++ b/lib/widgets/in_app_browser/InAppBrowser.dart @@ -229,3 +229,22 @@ class MyInAppBrowser extends InAppBrowser { ''; } } + +class MyChromeSafariBrowser extends ChromeSafariBrowser { + MyChromeSafariBrowser(browserFallback) : super(bFallback: browserFallback); + + @override + void onOpened() { + print("ChromeSafari browser opened"); + } + + @override + void onCompletedInitialLoad() { + print("ChromeSafari browser initial load completed"); + } + + @override + void onClosed() { + print("ChromeSafari browser closed"); + } +} diff --git a/lib/widgets/input/text_field.dart b/lib/widgets/input/text_field.dart index 7cfba5e6..6e740fc8 100644 --- a/lib/widgets/input/text_field.dart +++ b/lib/widgets/input/text_field.dart @@ -243,7 +243,7 @@ class _TextFieldsState extends State { onSaved: widget.onSaved, style: Theme.of(context) .textTheme - .body2 + .bodyText1 .copyWith(fontSize: widget.fontSize, fontWeight: widget.fontWeight), inputFormatters: widget.keyboardType == TextInputType.phone diff --git a/lib/widgets/others/app_scaffold_widget.dart b/lib/widgets/others/app_scaffold_widget.dart index 15727972..5eb76c9f 100644 --- a/lib/widgets/others/app_scaffold_widget.dart +++ b/lib/widgets/others/app_scaffold_widget.dart @@ -1,4 +1,5 @@ import 'package:diplomaticquarterapp/config/config.dart'; +import 'package:diplomaticquarterapp/config/size_config.dart'; import 'package:diplomaticquarterapp/core/service/AuthenticatedUserObject.dart'; import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; @@ -35,6 +36,7 @@ class AppScaffold extends StatelessWidget { final Widget floatingActionButton; final String title; final String description; + final String image; final bool isShowDecPage; AuthenticatedUserObject authenticatedUserObject = @@ -52,7 +54,7 @@ class AppScaffold extends StatelessWidget { this.title, this.description, this.isShowDecPage = true, - this.isBottomBar}); + this.isBottomBar, this.image}); @override Widget build(BuildContext context) { @@ -71,14 +73,24 @@ class AppScaffold extends StatelessWidget { title: Texts(authenticatedUserObject.isLogin || !isShowDecPage ? appBarTitle.toUpperCase() : TranslationBase.of(context).serviceInformationTitle,color: Colors.white,bold: true,), - leading: Builder( + leading:Builder( builder: (BuildContext context) { return ArrowBack(); }, ), centerTitle: true, actions: [ - IconButton( + image!=null? InkWell( + onTap: ()=> Navigator.pop(context), + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Image.asset( + image, + height: SizeConfig.heightMultiplier * 5, + width: SizeConfig.heightMultiplier * 5, + color: Colors.white, + ), + ),): IconButton( icon: Icon(FontAwesomeIcons.home), color: Colors.white, onPressed: () { diff --git a/lib/widgets/otp/sms-popup.dart b/lib/widgets/otp/sms-popup.dart index 1a67ae8f..8400cca3 100644 --- a/lib/widgets/otp/sms-popup.dart +++ b/lib/widgets/otp/sms-popup.dart @@ -29,6 +29,13 @@ class SMSOTP { this.onFailure, ); + final verifyAccountForm = GlobalKey(); + + TextEditingController digit1 = TextEditingController(text: ""); + TextEditingController digit2 = TextEditingController(text: ""); + TextEditingController digit3 = TextEditingController(text: ""); + TextEditingController digit4 = TextEditingController(text: ""); + Map verifyAccountFormValue = { 'digit1': '', 'digit2': '', @@ -42,6 +49,7 @@ class SMSOTP { String errorMsg; String displayTime = ''; + displayDialog(BuildContext context) async { return showDialog( context: context, @@ -83,65 +91,47 @@ class SMSOTP { .substring(mobileNo.toString().length - 3), textAlign: TextAlign.center, )), - Padding( - padding: EdgeInsets.only(top: 20), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Container( - width: SizeConfig.realScreenWidth * 0.15, - child: TextFormField( - textInputAction: TextInputAction.next, - style: buildTextStyle(), - autofocus: true, - maxLength: 1, - textAlign: TextAlign.center, - keyboardType: TextInputType.number, - decoration: buildInputDecoration(context), - onSaved: (val) {}, - validator: validateCodeDigit, - onFieldSubmitted: (_) { - FocusScope.of(context).requestFocus(focusD2); - }, - onChanged: (val) { - if (val.length == 1) { - FocusScope.of(context).requestFocus(focusD2); - verifyAccountFormValue['digit1'] = val.trim(); - checkValue(); - } - }, - ), - ), - Container( - width: SizeConfig.realScreenWidth * 0.15, - child: TextFormField( - focusNode: focusD2, + Form( + key: verifyAccountForm, + child: Padding( + padding: EdgeInsets.only(top: 20), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Container( + width: SizeConfig.realScreenWidth * 0.15, + child: TextFormField( textInputAction: TextInputAction.next, + style: buildTextStyle(), + autofocus: true, maxLength: 1, + controller: digit1, textAlign: TextAlign.center, - style: buildTextStyle(), keyboardType: TextInputType.number, decoration: buildInputDecoration(context), onSaved: (val) {}, + validator: validateCodeDigit, onFieldSubmitted: (_) { - FocusScope.of(context).requestFocus(focusD3); + FocusScope.of(context).requestFocus(focusD2); }, onChanged: (val) { if (val.length == 1) { FocusScope.of(context) - .requestFocus(focusD3); - verifyAccountFormValue['digit2'] = val.trim(); + .requestFocus(focusD2); + verifyAccountFormValue['digit1'] = + val.trim(); checkValue(); } }, - validator: validateCodeDigit), - ), - Container( + ), + ), + Container( width: SizeConfig.realScreenWidth * 0.15, child: TextFormField( - focusNode: focusD3, + focusNode: focusD2, textInputAction: TextInputAction.next, maxLength: 1, + controller: digit2, textAlign: TextAlign.center, style: buildTextStyle(), keyboardType: TextInputType.number, @@ -149,38 +139,69 @@ class SMSOTP { onSaved: (val) {}, onFieldSubmitted: (_) { FocusScope.of(context) - .requestFocus(focusD4); + .requestFocus(focusD3); }, onChanged: (val) { if (val.length == 1) { FocusScope.of(context) - .requestFocus(focusD4); - verifyAccountFormValue['digit3'] = val.trim(); - checkValue(); - } - }, - validator: validateCodeDigit)), - Container( - width: SizeConfig.realScreenWidth * 0.15, - child: TextFormField( - focusNode: focusD4, - maxLength: 1, - textAlign: TextAlign.center, - style: buildTextStyle(), - keyboardType: TextInputType.number, - decoration: buildInputDecoration(context), - onFieldSubmitted: (_) { - FocusScope.of(context) - .requestFocus(focusD4); - }, - onChanged: (val) { - if (val.length == 1) { - verifyAccountFormValue['digit4'] = val.trim(); + .requestFocus(focusD3); + verifyAccountFormValue['digit2'] = + val.trim(); checkValue(); } }, - validator: validateCodeDigit)), - ], + validator: validateCodeDigit), + ), + Container( + width: SizeConfig.realScreenWidth * 0.15, + child: TextFormField( + focusNode: focusD3, + textInputAction: TextInputAction.next, + maxLength: 1, + controller: digit3, + textAlign: TextAlign.center, + style: buildTextStyle(), + keyboardType: TextInputType.number, + decoration: buildInputDecoration(context), + onSaved: (val) {}, + onFieldSubmitted: (_) { + FocusScope.of(context) + .requestFocus(focusD4); + }, + onChanged: (val) { + if (val.length == 1) { + FocusScope.of(context) + .requestFocus(focusD4); + verifyAccountFormValue['digit3'] = + val.trim(); + checkValue(); + } + }, + validator: validateCodeDigit)), + Container( + width: SizeConfig.realScreenWidth * 0.15, + child: TextFormField( + focusNode: focusD4, + maxLength: 1, + textAlign: TextAlign.center, + style: buildTextStyle(), + controller: digit4, + keyboardType: TextInputType.number, + decoration: buildInputDecoration(context), + onFieldSubmitted: (_) { + FocusScope.of(context) + .requestFocus(focusD4); + }, + onChanged: (val) { + if (val.length == 1) { + verifyAccountFormValue['digit4'] = + val.trim(); + checkValue(); + } + }, + validator: validateCodeDigit)), + ], + ), ), ), Padding( @@ -231,7 +252,7 @@ class SMSOTP { String validateCodeDigit(value) { if (value.isEmpty) { - return 'Please enter your Password'; + return ' '; } else if (value.length == 3) { print(value); } else { @@ -241,15 +262,10 @@ class SMSOTP { checkValue() { //print(verifyAccountFormValue); - if (verifyAccountFormValue['digit1'] != ''&& - verifyAccountFormValue['digit2'] != '' && - verifyAccountFormValue['digit3'] != '' && - verifyAccountFormValue['digit4'] != '') { - onSuccess(verifyAccountFormValue['digit1'] + - verifyAccountFormValue['digit2'] + - verifyAccountFormValue['digit3'] + - verifyAccountFormValue['digit4']); + if (verifyAccountForm.currentState.validate()) { + onSuccess(digit1.text.toString()+digit2.text.toString()+digit3.text.toString()+digit4.text.toString()); } + } getSecondsAsDigitalClock(int inputSeconds) {