diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb new file mode 100644 index 0000000..a85a053 --- /dev/null +++ b/lib/l10n/intl_en.arb @@ -0,0 +1,202 @@ +{ + "b83ac7e5c93e97387c489386a49c7bbf": "b83ac7e5c93e97387c489386a49c7bbf", + "मेराAadhar": "मेरा Aadhar", + "surabhiMishra": "Surabhi Mishra", + "45": "4.5", + "niceOp": "nice op", + "goodOperator": "good operator", + "badOperator": "bad operator", + "averageOperatorGg": "average operator gg", + "bhb": "bhb", + "bookOperator": "Book operator", + "operators": "Operators", + "morning": "morning", + "evening": "evening", + "pleaseSelectAnyOptionToContinue": "Please select any option to continue", + "selectDateAndTime": "Select Date and Time", + "morningSlots": "Morning Slots", + "eveningSlots": "Evening Slots", + "keepWithYourself": "Keep With yourself", + "dart:ffi": "dart:ffi", + "proofOfIdentity": "Proof of Identity", + "proofOfAddress": "Proof of Address", + "proofOfRelationship": "Proof of Relationship", + "dateOfBirth": "Date of Birth", + "clickHereForMoreInformationAboutTheDocumentNeeded": "Click here for more information about the document needed.", + "pleaseCheckAllTheDocumentsToContinue": "Please check all the documents to continue", + "myMap": "My Map", + "searchLocation": "Search Location", + "currentLocation": "Current Location", + "b116HostelCThaparUniversityPatiala": "B-116 Hostel C, Thapar University Patiala", + "lookUpTheMap": "Look up the map", + "finish": "Finish", + "yourDetailsHaveBeenCollected": "Your details have been collected", + "checkYourApplicationStatusUsingAppointmentId:": "Check your application status using appointment ID :", + "xxxxxxxxx": "XXX-XXX-XXX", + "giveFeedback": "Give Feedback", + "click": "CLICK", + "welcomePage": "Welcome Page", + "opfinishPage": "Op-Finish Page", + "opwelcomeScreen": "Op-welcome screen", + "opmap": "Op-map", + "welcomeSliders": "Welcome Sliders", + "documentCheckPage": "Document Check Page", + "mapIntroductionPage": "Map Introduction Page", + "editAddressPage": "Edit Address Page", + "clickMap": "CLICK MAP", + "logout": "Logout", + "operatorBooked": "Operator Booked", + "finishPage": "finish page", + "modeSelectionPage": "Mode Selection Page", + "serviceSelectionPage": "Service Selection Page", + "testFirebase": "Test Firebase", + "datePage": "Date page", + "slotPage": "Slot page", + "operatorSelectionPage": "Operator selection page", + "bookOperatorPage": "book operator page", + "modeselectionpagedart": "modeSelectionPage.dart", + "serviceselectionpagedart": "serviceSelectionPage.dart", + "onboardingpagedart": "onBoardingPage.dart", + "loadingpagedart": "loadingPage.dart", + "documentcheckpagedart": "documentCheckPage.dart", + "mapintroductionpagedart": "MapIntroductionPage.dart", + "editaddresspagedart": "editAddressPage.dart", + "welcomepagedart": "welcomePage.dart", + "dart:async": "dart:async", + "pleaseSelectAnySlotToContinue": "Please select any slot to continue", + "selectaLanguage": "Select a language", + "useHelpline": "Use Helpline", + "selfUpdate": "Self Update", + "getting": "Getting...", + "addOrUpdateLocationMarker": "Add or update location marker", + "position:${locationpositiontostring}Speed:${locationspeed}Altitude:${locationaltitude}": "Position: ${location.position.toString()}, Speed: ${location.speed}, Altitude: ${location.altitude}", + "amHereForSure": "Am here for sure", + "notSure": "Not sure", + "dart:convert": "dart:convert", + "mobileNumber:9305895903": "Mobile Number: 9305895903", + "confirmLocation": "Confirm Location", + "editLocation": "Edit Location", + "awwSnapsLoadingData": "Aww snaps, loading data", + "home": "Home", + "thisIsaMapThatIsShowing": "This is a map that is showing", + "${currentlatlnglatitude}${currentlatlnglongitude}": "(${currentLatLng.latitude}, ${currentLatLng.longitude}).", + "errorOccuredWhileAcquiringLocationErrorMessage:": "Error occured while acquiring location. Error Message :", + "inLiveUpdateModeOnlyZoomAndRotationAreEnable": "In live update mode only zoom and rotation are enable", + "tel:1947": "tel:1947", + "skip>>": "SKIP >>", + "aadharUpdationOrEnrollmentAtYourHome": "Aadhar updation or Enrollment at your home", + "selectYourOwnTimeSlot": "Select your own Time Slot", + "reviewYourAppointments": "Review your appointments", + "getStarted": "Get Started", + "yourOperator": "Your Operator", + "aadharUpdation": "Aadhar Updation", + "aadharEnrollment": "Aadhar Enrollment", + "confirmationOtp": "Confirmation OTP", + "cancel": "Cancel", + "loadingData": "Loading data...", + "icon": "icon", + "iconhigh": "iconhigh", + "showOp${odataoperatorid}WithLatlon${latlngtojson}": "Show op ${odata.operatorId!} with latlon ${latlng.toJson()}", + "receivedData:${datatojson}": "received data: ${data.toJson()}", + "errorInMultistream": "Error in multistream", + "platformExceeeeeeeeeeption0": "Platform exceeeeeeeeeeption0", + "clickedOpId${symbolidtooperatorid[symbolid]}WithName${opclickname}": "Clicked op id ${symbolIdToOperatorId[symbol.id]} with name ${opclick.name}", + "operatorSuccessfullyBooked": "Operator successfully booked!", + "widgetFinallyRebuild": "Widget finally rebuild", + "dart:math": "dart:math", + "123456789": "123456789", + "streamClosed": "Stream closed!", + "\\[\\d+\\d+\\d+\\d+\\]": "\\[(\\d+.\\d+), (\\d+.\\d+)\\]", + "mobileNumber:${providerofcontextListen:Falsebookinguserdataphoneno}": "Mobile Number: ${Provider.of(context, listen: false).booking.userdata!.phoneNo}", + "selectAnOperatorForYourself": "Select an operator for yourself", + "youAreAllDone": "You are all done!", + "completedBookingForId:": "Completed Booking for ID :", + "xxxxxxx92": "XXX-XXX-X92", + "nextBooking": "Next Booking", + "updation:Slot:1pm2pm": "Updation: Slot:1pm-2pm", + "b169CHostelThaparUniversitypatialaPunjab": "B-169, C Hostel Thapar University,Patiala, Punjab", + "update": "update", + "senior": "senior", + "phydisabled": "phydisabled", + "new": "new", + "newApplication": "New Application", + "updateInformation": "Update Information", + "chooseIfYouAreaSeniorCitizenOrDifferentlyAbledOtherwiseGoAhead": "Choose if you are a senior citizen or differently abled, otherwise go ahead.", + "seniorCitizen": "Senior Citizen", + "differentlyAbled": "Differently Abled", + "didntGetOtp": "Didnt get OTP?", + "signature$value": "signature - $value", + "yourApplicationReceiveCode$code": "Your Application receive code - $code", + "\\d{6}": "(\\d{6})", + "mobileVerification": "MOBILE VERIFICATION", + "verifyYourAccount": "VERIFY YOUR ACCOUNT", + "login": "Login", + "enterOtp": "Enter OTP", + "pleaseEnterYourMobileNumber": "Please enter your mobile number.", + "enterTheOtpReceivedOnYourPhone": "Enter the OTP received on your phone.", + "[09]": "[0-9]", + "phoneNumber": "Phone Number", + "in": "IN", + "resend": "Resend", + "requestOtp": "Request OTP", + "unknown": "Unknown", + "operatorLoggedIn": "Operator Logged In!", + "usernotfound": "user-not-found", + "noUserFoundForThatEmail": "No user found for that email.", + "wrongpassword": "wrong-password", + "wrongPasswordProvidedForThatUser": "Wrong password provided for that user.", + "operatorLoggedOut": "Operator Logged Out!", + "elonmusk": "ELONMUSK", + "userAdded": "User Added", + "failedToAddUser:$error": "Failed to add user: $error", + "users": "users", + "exist": "exist", + "fcmtokens": "fcmtokens", + "loggedIn": "Logged In!", + "theOtpEnteredIsInvalidKindlyEnterAgain": "The OTP entered is invalid. Kindly enter again.", + "+91$mobilenumber": "+91$mobileNumber", + "verificationcompleted": "verificationCompleted", + "verificationcompleted\\n": "verificationCompleted\\n", + "verificationfailed": "verificationFailed", + "verificationFailedEitherTheEnteredNumberIsWrongOrThereIsSomeTechnicalErrorPleaseTryAgain": "Verification failed! Either the entered number is wrong or there is some technical error. Please try again", + "codesent": "codeSent", + "otpSent": "OTP SENT!", + "codeautoretrievaltimeout": "codeAutoRetrievalTimeout", + "codeautoretrievaltimeout\\n": "codeAutoRetrievalTimeout\\n", + "loggedOut": "Logged Out!", + "pleaseSelectaPhoto": "Please select a photo!", + "multistreamOperatorDataUpdate": "Multistream operator data update", + "yayBaby": "yay baby", + "30360001": "30.360001", + "76452232": "76.452232", + "addDummyBookingForPh8872276957": "Add dummy booking for ph 8872276957", + "initNwoDummy": "init nwo dummy", + "successfullyAddedBooking": "Successfully added booking!", + "getCurrentBookin": "Get current bookin", + "what": "What!", + "installSurabhiAsOperator": "install surabhi as operator", + "addedSurabhi": "Added surabhi", + "3166525645232554126": "31.66525645-23.2554126", + "lengthLst": "Length lst", + "getOperatorFromOperatorId": "get operator from operator id", + "abcdefgh": "abcdefgh", + "yeaSurab": "Yea surab!", + "getNearbyAadharCentersFromFastapi": "get nearby aadhar centers from fastapi", + "dummyUpdateOperatorLocDataRealtimeDatabase": "Dummy update operator loc data (realtime database)", + "subscribeOperatorLiveLocationStream": "Subscribe operator live location (stream)", + "loginOperatorProvider": "login operator provider", + "test1@testcom": "test1@test.com", + "logoutProvider": "logout provider", + "popupForaMarker": "Popup for a marker!", + "position:${widgetmarkerpointlatitude}${widgetmarkerpointlongitude}": "Position: ${widget.marker.point.latitude}, ${widget.marker.point.longitude}", + "markerSize:${widgetmarkerwidth}${widgetmarkerheight}": "Marker size: ${widget.marker.width}, ${widget.marker.height}", + "rated$rating⭐": "Rated $rating⭐", + "call": "Call", + "task:$task": "Task: $task", + "time:$time": "Time: $time", + "noReviewsYet": "No reviews yet", + "error": "Error", + "${reviewskeyselementati}:": "${reviews.keys.elementAt(i)}:", + "@@locale": "en", + "@@last_modified": "2022-08-25T18:16:18.534899" +} \ No newline at end of file diff --git a/lib/language_handler.dart b/lib/language_handler.dart new file mode 100644 index 0000000..935b89d --- /dev/null +++ b/lib/language_handler.dart @@ -0,0 +1,231 @@ +import 'package:flutter/cupertino.dart'; +import 'package:mera_aadhar/provider/booking.dart'; +import 'package:provider/provider.dart'; +import 'package:translator/translator.dart'; + +Map translatedStrings = {}; +Map strings = { + "aadharUpdationOrEnrollmentAtYourHome": + "Aadhar updation or Enrollment at your home", + "selectYourOwnTimeSlot": "Select your own Time Slot", + // "b83ac7e5c93e97387c489386a49c7bbf": "b83ac7e5c93e97387c489386a49c7bbf", + // "मेराAadhar": "मेरा Aadhar", + // "surabhiMishra": "Surabhi Mishra", + // "45": "4.5", + // "niceOp": "nice op", + // "goodOperator": "good operator", + // "badOperator": "bad operator", + // "averageOperatorGg": "average operator gg", + // "bhb": "bhb", + // "bookOperator": "Book operator", + // "operators": "Operators", + // "morning": "morning", + // "evening": "evening", + // "pleaseSelectAnyOptionToContinue": "Please select any option to continue", + // "selectDateAndTime": "Select Date and Time", + // "morningSlots": "Morning Slots", + // "eveningSlots": "Evening Slots", + // "keepWithYourself": "Keep With yourself", + // "dart:ffi": "dart:ffi", + // "proofOfIdentity": "Proof of Identity", + // "proofOfAddress": "Proof of Address", + // "proofOfRelationship": "Proof of Relationship", + // "dateOfBirth": "Date of Birth", + // "clickHereForMoreInformationAboutTheDocumentNeeded": + // "Click here for more information about the document needed.", + // "pleaseCheckAllTheDocumentsToContinue": + // "Please check all the documents to continue", + // "myMap": "My Map", + // "searchLocation": "Search Location", + // "currentLocation": "Current Location", + // "b116HostelCThaparUniversityPatiala": + // "B-116 Hostel C, Thapar University Patiala", + // "lookUpTheMap": "Look up the map", + // "finish": "Finish", + // "yourDetailsHaveBeenCollected": "Your details have been collected", + // "checkYourApplicationStatusUsingAppointmentId:": + // "Check your application status using appointment ID :", + // "xxxxxxxxx": "XXX-XXX-XXX", + // "giveFeedback": "Give Feedback", + // "click": "CLICK", + // "welcomePage": "Welcome Page", + // "opfinishPage": "Op-Finish Page", + // "opwelcomeScreen": "Op-welcome screen", + // "opmap": "Op-map", + // "welcomeSliders": "Welcome Sliders", + // "documentCheckPage": "Document Check Page", + // "mapIntroductionPage": "Map Introduction Page", + // "editAddressPage": "Edit Address Page", + // "clickMap": "CLICK MAP", + // "logout": "Logout", + // "operatorBooked": "Operator Booked", + // "finishPage": "finish page", + // "modeSelectionPage": "Mode Selection Page", + // "serviceSelectionPage": "Service Selection Page", + // "testFirebase": "Test Firebase", + // "datePage": "Date page", + // "slotPage": "Slot page", + // "operatorSelectionPage": "Operator selection page", + // "bookOperatorPage": "book operator page", + // "modeselectionpagedart": "modeSelectionPage.dart", + // "serviceselectionpagedart": "serviceSelectionPage.dart", + // "onboardingpagedart": "onBoardingPage.dart", + // "loadingpagedart": "loadingPage.dart", + // "documentcheckpagedart": "documentCheckPage.dart", + // "mapintroductionpagedart": "MapIntroductionPage.dart", + // "editaddresspagedart": "editAddressPage.dart", + // "welcomepagedart": "welcomePage.dart", + // "dart:async": "dart:async", + // "pleaseSelectAnySlotToContinue": "Please select any slot to continue", + // "selectaLanguage": "Select a language", + // "useHelpline": "Use Helpline", + // "selfUpdate": "Self Update", + // "getting": "Getting...", + // "addOrUpdateLocationMarker": "Add or update location marker", + // "amHereForSure": "Am here for sure", + // "notSure": "Not sure", + // "dart:convert": "dart:convert", + // "mobileNumber:9305895903": "Mobile Number: 9305895903", + // "confirmLocation": "Confirm Location", + // "editLocation": "Edit Location", + // "awwSnapsLoadingData": "Aww snaps, loading data", + // "home": "Home", + // "thisIsaMapThatIsShowing": "This is a map that is showing", + // "errorOccuredWhileAcquiringLocationErrorMessage:": + // "Error occured while acquiring location. Error Message :", + // "inLiveUpdateModeOnlyZoomAndRotationAreEnable": + // "In live update mode only zoom and rotation are enable", + // "tel:1947": "tel:1947", + // "skip>>": "SKIP >>", + // "aadharUpdationOrEnrollmentAtYourHome": + // "Aadhar updation or Enrollment at your home", + // "selectYourOwnTimeSlot": "Select your own Time Slot", + // "reviewYourAppointments": "Review your appointments", + // "getStarted": "Get Started", + // "yourOperator": "Your Operator", + // "aadharUpdation": "Aadhar Updation", + // "aadharEnrollment": "Aadhar Enrollment", + // "confirmationOtp": "Confirmation OTP", + // "cancel": "Cancel", + // "loadingData": "Loading data...", + // "icon": "icon", + // "iconhigh": "iconhigh", + // "errorInMultistream": "Error in multistream", + // "platformExceeeeeeeeeeption0": "Platform exceeeeeeeeeeption0", + // "operatorSuccessfullyBooked": "Operator successfully booked!", + // "widgetFinallyRebuild": "Widget finally rebuild", + // "123456789": "123456789", + // "streamClosed": "Stream closed!", + // "selectAnOperatorForYourself": "Select an operator for yourself", + // "youAreAllDone": "You are all done!", + // "completedBookingForId:": "Completed Booking for ID :", + // "xxxxxxx92": "XXX-XXX-X92", + // "nextBooking": "Next Booking", + // "updation:Slot:1pm2pm": "Updation: Slot:1pm-2pm", + // "b169CHostelThaparUniversitypatialaPunjab": + // "B-169, C Hostel Thapar University,Patiala, Punjab", + // "update": "update", + // "senior": "senior", + // "phydisabled": "phydisabled", + // "new": "new", + // "newApplication": "New Application", + // "updateInformation": "Update Information", + // "chooseIfYouAreaSeniorCitizenOrDifferentlyAbledOtherwiseGoAhead": + // "Choose if you are a senior citizen or differently abled, otherwise go ahead.", + // "seniorCitizen": "Senior Citizen", + // "differentlyAbled": "Differently Abled", + // "didntGetOtp": "Didnt get OTP?", + // "\\d{6}": "(\\d{6})", + // "mobileVerification": "MOBILE VERIFICATION", + // "verifyYourAccount": "VERIFY YOUR ACCOUNT", + // "login": "Login", + // "enterOtp": "Enter OTP", + // "pleaseEnterYourMobileNumber": "Please enter your mobile number.", + // "enterTheOtpReceivedOnYourPhone": "Enter the OTP received on your phone.", + // "[09]": "[0-9]", + // "phoneNumber": "Phone Number", + // "in": "IN", + // "resend": "Resend", + // "requestOtp": "Request OTP", + // "unknown": "Unknown", + // "operatorLoggedIn": "Operator Logged In!", + // "usernotfound": "user-not-found", + // "noUserFoundForThatEmail": "No user found for that email.", + // "wrongpassword": "wrong-password", + // "wrongPasswordProvidedForThatUser": "Wrong password provided for that user.", + // "operatorLoggedOut": "Operator Logged Out!", + // "elonmusk": "ELONMUSK", + // "userAdded": "User Added", + // "users": "users", + // "exist": "exist", + // "fcmtokens": "fcmtokens", + // "loggedIn": "Logged In!", + // "theOtpEnteredIsInvalidKindlyEnterAgain": + // "The OTP entered is invalid. Kindly enter again.", + // "verificationcompleted": "verificationCompleted", + // "verificationcompleted\\n": "verificationCompleted\\n", + // "verificationfailed": "verificationFailed", + // "verificationFailedEitherTheEnteredNumberIsWrongOrThereIsSomeTechnicalErrorPleaseTryAgain": + // "Verification failed! Either the entered number is wrong or there is some technical error. Please try again", + // "codesent": "codeSent", + // "otpSent": "OTP SENT!", + // "codeautoretrievaltimeout": "codeAutoRetrievalTimeout", + // "codeautoretrievaltimeout\\n": "codeAutoRetrievalTimeout\\n", + // "loggedOut": "Logged Out!", + // "pleaseSelectaPhoto": "Please select a photo!", + // "multistreamOperatorDataUpdate": "Multistream operator data update", + // "yayBaby": "yay baby", + // "30360001": "30.360001", + // "76452232": "76.452232", + // "addDummyBookingForPh8872276957": "Add dummy booking for ph 8872276957", + // "initNwoDummy": "init nwo dummy", + // "successfullyAddedBooking": "Successfully added booking!", + // "getCurrentBookin": "Get current bookin", + // "what": "What!", + // "installSurabhiAsOperator": "install surabhi as operator", + // "addedSurabhi": "Added surabhi", + // "3166525645232554126": "31.66525645-23.2554126", + // "lengthLst": "Length lst", + // "getOperatorFromOperatorId": "get operator from operator id", + // "abcdefgh": "abcdefgh", + // "yeaSurab": "Yea surab!", + // "getNearbyAadharCentersFromFastapi": "get nearby aadhar centers from fastapi", + // "dummyUpdateOperatorLocDataRealtimeDatabase": + // "Dummy update operator loc data (realtime database)", + // "subscribeOperatorLiveLocationStream": + // "Subscribe operator live location (stream)", + // "loginOperatorProvider": "login operator provider", + // "test1@testcom": "test1@test.com", + // "logoutProvider": "logout provider", + // "popupForaMarker": "Popup for a marker!", + // "call": "Call", + // "noReviewsYet": "No reviews yet", + // "error": "Error", + // "@@locale": "en", + // "@@last_modified": "2022-08-25T18:16:18.534899" +}; + +void superTranslate(BuildContext context) async { + final translator = GoogleTranslator(); + + final input = "Здравствуйте. Ты в порядке?"; + String? conv = Provider.of(context, listen: false) + .languageToCode[ + Provider.of(context, listen: false).selectedLanguage]; + print(Provider.of(context, listen: false).selectedLanguage); + translator.translate(input, from: 'ru', to: 'en').then(print); + print(conv); + strings.forEach((key, value) async { + await translator.translate(value, from: 'en', to: conv!).then((val) { + translatedStrings[key] = value; + }); + }); + + // prints Hello. Are you okay? + + // var translation = await translator.translate("Dart is very cool!", to: 'pl'); + // print(translation); + // // prints Dart jest bardzo fajny! + + // print(await "example".translate(to: 'pt')); +} diff --git a/lib/provider/booking.dart b/lib/provider/booking.dart index 04d5a04..804446d 100644 --- a/lib/provider/booking.dart +++ b/lib/provider/booking.dart @@ -3,21 +3,21 @@ import 'package:mera_aadhar/fixtures/operator_fixture.dart'; import 'package:mera_aadhar/models/booking_model.dart'; import 'package:mera_aadhar/fixtures/booking_fixture.dart'; import 'package:mera_aadhar/models/operator_model.dart'; +import 'package:mera_aadhar/widgets/language_tile.dart'; import 'package:mera_aadhar/widgets/time_tile.dart'; class BookingProvider extends ChangeNotifier { Booking booking = BookingFixture.dummyBooking(); Operator focusOperator = OperatorFixture.dummySurabhi(); bool isOpSelected = false; - - void setOperator(Operator op){ + String selectedLanguage = 'English'; + void setOperator(Operator op) { isOpSelected = true; focusOperator = op; notifyListeners(); } - - void removeFocus(){ + void removeFocus() { isOpSelected = false; notifyListeners(); } @@ -86,9 +86,79 @@ class BookingProvider extends ChangeNotifier { isSelected: false, ) ]; + List languages = [ + LanguageTile( + language: 'English', + isLSelected: false, + index: 0, + ), + LanguageTile( + language: 'हिंदी', + isLSelected: false, + index: 1, + ), + LanguageTile( + language: 'ਪੰਜਾਬੀ', + isLSelected: false, + index: 2, + ), + LanguageTile( + language: 'తెలుగు', + isLSelected: false, + index: 3, + ), + LanguageTile( + language: 'தமிழ்', + isLSelected: false, + index: 4, + ), + LanguageTile( + language: 'বাংলা', + isLSelected: false, + index: 5, + ), + LanguageTile( + language: 'मराठी', + isLSelected: false, + index: 6, + ), + LanguageTile( + language: 'ગુજરાતી', + isLSelected: false, + index: 7, + ), + LanguageTile( + language: 'ಕನ್ನಡ', + isLSelected: false, + index: 8, + ), + LanguageTile( + language: 'മലയാളം', + isLSelected: false, + index: 9, + ), + LanguageTile( + language: 'اُردُو', + isLSelected: false, + index: 10, + ) + ]; + Map languageToCode = { + 'English': 'en', + 'हिंदी': 'hi', + 'ਪੰਜਾਬੀ': 'pa', + 'বাংলা': 'bn', + 'ಕನ್ನಡ': 'kn', + 'മലയാളം': 'ml', + 'اُردُو': 'ur', + 'मराठी': 'mr', + 'ગુજરાતી': 'gu', + 'தமிழ்': 'ta', + 'తెలుగు': 'te' + }; List slots = []; void slotHandler(index) { - for (int i = 0; i < 6; i++) { + for (int i = 0; i < slots.length; i++) { print(index); if (i != index) { slots[i].isSelected = false; @@ -98,6 +168,17 @@ class BookingProvider extends ChangeNotifier { notifyListeners(); } + void languageHandler(index) { + for (int i = 0; i < languages.length; i++) { + print(index); + if (i != index) { + languages[i].isLSelected = false; + } + print(languages[i].isLSelected); + } + notifyListeners(); + } + void lodgeSlot() { for (int i = 0; i < 6; i++) { if (slots[i].isSelected = true) { @@ -106,6 +187,25 @@ class BookingProvider extends ChangeNotifier { } } + void lodgeLanguage() { + for (int i = 0; i < languages.length; i++) { + if (languages[i].isLSelected = true) { + selectedLanguage = languages[i].language; + } + } + } + + bool checkLanguage() { + int flag = 0; + for (int i = 0; i < languages.length; i++) { + if (languages[i].isLSelected == false) flag++; + } + if (flag == languages.length) + return false; + else + return true; + } + bool checkSlot() { int flag = 0; for (int i = 0; i < 6; i++) { @@ -122,4 +222,10 @@ class BookingProvider extends ChangeNotifier { slots[i].isSelected = false; } } + + void cleanLanguages() { + for (int i = 0; i < languages.length; i++) { + languages[i].isLSelected = false; + } + } } diff --git a/lib/screens/date_page.dart b/lib/screens/date_page.dart index 5086859..cdc29a1 100644 --- a/lib/screens/date_page.dart +++ b/lib/screens/date_page.dart @@ -17,7 +17,15 @@ class DatePage extends StatefulWidget { } class _DatePageState extends State { + DateTime ?realDate; DateTime date = DateTime.now(); + @override + void initState() { + + super.initState(); + } + + String? slotType; @override Widget build(BuildContext context) { diff --git a/lib/screens/language_selector.dart b/lib/screens/language_selector.dart new file mode 100644 index 0000000..315e505 --- /dev/null +++ b/lib/screens/language_selector.dart @@ -0,0 +1,102 @@ +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:mera_aadhar/language_handler.dart'; +import 'package:mera_aadhar/provider/booking.dart'; +import 'package:mera_aadhar/screens/modeSelectionPage.dart'; +import 'package:mera_aadhar/screens/onBoardingPage.dart'; +import 'package:mera_aadhar/utilities/constants.dart'; +import 'package:mera_aadhar/widgets/language_tile.dart'; +import 'package:provider/provider.dart'; +import 'package:smooth_page_indicator/smooth_page_indicator.dart'; +import '../services/snackbar.dart'; +import 'welcomePage.dart'; +import 'dart:async'; + +class LanguageSelectorScreen extends StatefulWidget { + const LanguageSelectorScreen({Key? key}) : super(key: key); + + @override + State createState() => _LanguageSelectorScreenState(); +} + +class _LanguageSelectorScreenState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + floatingActionButton: SizedBox( + height: 60, + width: 60, + child: FloatingActionButton( + onPressed: () { + if (Provider.of(context, listen: false) + .checkLanguage()) { + Provider.of(context, listen: false) + .lodgeLanguage(); + Provider.of(context, listen: false) + .cleanLanguages(); + // superTranslate(context); + Navigator.of(context).push(MaterialPageRoute( + builder: (BuildContext context) => OnBoardingScreen())); + } else { + showSnackBar('Please select any slot to continue', context); + } + }, + backgroundColor: Colors.white, + child: const Icon( + Icons.arrow_forward, + color: Color(0xFFFF4B3A), + ), + ), + ), + backgroundColor: Color(0xFFFF4B3A), + body: Column( + children: [ + const SizedBox( + height: 60, + ), + Center( + child: CircleAvatar( + backgroundColor: Colors.white, + radius: 25, + child: Image.asset( + 'assets/logooo.png', + width: 50, + height: 50, + ), + ), + ), + const SizedBox( + height: 30, + ), + Text( + 'Select a language', + style: GoogleFonts.nunito( + textStyle: TextStyle(fontSize: 33, color: Colors.white), + ), + ), + Expanded( + child: ListView.builder( + itemCount: + Provider.of(context).languages.length, + itemBuilder: (context, index) { + return LanguageTile( + language: Provider.of(context) + .languages[index] + .language, + index: index, + isLSelected: Provider.of(context) + .languages[index] + .isLSelected, + ); + } + // + + )), + SizedBox( + height: 30, + ) + ], + ), + ); + } +} diff --git a/lib/screens/loadingPage.dart b/lib/screens/loadingPage.dart index 8f3e5f1..6fe2ab2 100644 --- a/lib/screens/loadingPage.dart +++ b/lib/screens/loadingPage.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; +import 'package:mera_aadhar/screens/language_selector.dart'; import 'package:mera_aadhar/screens/modeSelectionPage.dart'; import 'package:mera_aadhar/screens/onBoardingPage.dart'; import 'package:mera_aadhar/screens/serviceSelectionPage.dart'; @@ -20,7 +21,7 @@ class _LoadingPageState extends State { (FirebaseAuth.instance.currentUser!=null)? Navigator.of(context).pushReplacement(MaterialPageRoute( builder: (BuildContext context) => ServiceSelectionPage())): Navigator.of(context).pushReplacement(MaterialPageRoute( - builder: (BuildContext context) => OnBoardingScreen())); + builder: (BuildContext context) => LanguageSelectorScreen())); }); return Scaffold( body: Container( diff --git a/lib/screens/onBoardingPage.dart b/lib/screens/onBoardingPage.dart index ffd8f08..f572663 100644 --- a/lib/screens/onBoardingPage.dart +++ b/lib/screens/onBoardingPage.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; +import 'package:mera_aadhar/language_handler.dart'; import 'package:mera_aadhar/screens/modeSelectionPage.dart'; import 'package:mera_aadhar/utilities/constants.dart'; import 'package:smooth_page_indicator/smooth_page_indicator.dart'; @@ -97,15 +98,16 @@ class _OnBoardingScreenState extends State { controller: _controller, children: [ WelcomeScreen( - vectorLink: "", + vectorLink: "assets/card.png", textelement: "Aadhar updation or Enrollment at your home", + // textelement: translatedStrings["aadharUpdationOrEnrollmentAtYourHome"], ), WelcomeScreen( - vectorLink: "", + vectorLink: "assets/time.png", textelement: "Select your own Time Slot", ), WelcomeScreen( - vectorLink: "", + vectorLink: "assets/review.png", textelement: "Review your appointments", ) ], diff --git a/lib/screens/welcomePage.dart b/lib/screens/welcomePage.dart index 9aa78f6..07464c8 100644 --- a/lib/screens/welcomePage.dart +++ b/lib/screens/welcomePage.dart @@ -35,10 +35,15 @@ class WelcomeScreen extends StatelessWidget { const SizedBox( height: 15, ), - Container( - height: 160, - width: 160, - child: Image.asset('assets/card.png'), + Center( + child: Container( + height: 160, + width: 160, + child: Image.asset( + vectorLink, + color: Colors.white, + ), + ), ), ], ), diff --git a/lib/services/auth/otp_signin.dart b/lib/services/auth/otp_signin.dart index 2c1cd59..78222e2 100644 --- a/lib/services/auth/otp_signin.dart +++ b/lib/services/auth/otp_signin.dart @@ -4,6 +4,7 @@ import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:mera_aadhar/screens/home_page.dart'; import 'package:mera_aadhar/screens/operator_selection.dart'; +import 'package:mera_aadhar/screens/serviceSelectionPage.dart'; import 'package:mera_aadhar/services/snackbar.dart'; import 'package:provider/provider.dart'; @@ -86,7 +87,7 @@ void getToken() async { if (_firebaseUser != null) { Navigator.of(context).popUntil((route) => route.isFirst); Navigator.pushReplacement( - context, MaterialPageRoute(builder: (context) => OperatorSelectionScreen())); + context, MaterialPageRoute(builder: (context) => ServiceSelectionPage())); showSnackBar('Logged In!', context); } }).catchError((e) => showSnackBar( diff --git a/lib/widgets/language_tile.dart b/lib/widgets/language_tile.dart new file mode 100644 index 0000000..b1cb467 --- /dev/null +++ b/lib/widgets/language_tile.dart @@ -0,0 +1,85 @@ +import 'package:flutter/src/foundation/key.dart'; +import 'package:flutter/src/widgets/framework.dart'; +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:mera_aadhar/provider/booking.dart'; +import 'package:provider/provider.dart'; +import 'package:translator/translator.dart'; +class LanguageTile extends StatefulWidget { + String language; + bool isLSelected; + int index; + LanguageTile( + {required this.language, this.isLSelected = false, required this.index}); + + @override + State createState() => _LanguageTileState(); +} + +class _LanguageTileState extends State { + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.symmetric(vertical: 7.0, horizontal: 15), + child: GestureDetector( + onTap: () { + if (widget.isLSelected == false) { + widget.isLSelected = true; + Provider.of(context, listen: false) + .languages[widget.index] + .isLSelected = true; + } else { + widget.isLSelected = false; + Provider.of(context, listen: false) + .languages[widget.index] + .isLSelected = false; + } + + setState(() {}); + Provider.of(context, listen: false) + .languageHandler(widget.index); + print(Provider.of(context, listen: false) + .languages[widget.index] + .isLSelected); + }, + child: Container( + height: 68, + width: 360, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(30), color: Colors.white), + child: Center( + child: Column( + children: [ + Padding( + padding: const EdgeInsets.all(15.0), + child: Row( + children: [ + if (widget.isLSelected) + Image.asset( + 'assets/checked.png', + width: 30, + height: 30, + ), + SizedBox( + width: 20, + ), + Text( + widget.language, + style: GoogleFonts.poppins( + textStyle: const TextStyle( + fontWeight: FontWeight.w500, + fontSize: 22, + color: Colors.black), + ), + ), + ], + ), + ), + ], + ), + ), + ), + ), + ); + } +} diff --git a/pubspec.lock b/pubspec.lock index 9f07ef4..d84098d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -15,6 +15,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "3.1.11" + args: + dependency: "direct main" + description: + name: args + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.1" async: dependency: transitive description: @@ -652,6 +659,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.4.9" + translator: + dependency: "direct main" + description: + name: translator + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.7" tuple: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 799cfc4..ba6a45a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -27,6 +27,7 @@ environment: # the latest version available on pub.dev. To see which dependencies have newer # versions available, run `flutter pub outdated`. dependencies: + args: ^2.3.1 cloud_firestore: ^3.4.4 date_picker_timeline: ^1.2.3 flutter: @@ -41,7 +42,7 @@ dependencies: otp_autofill: ^2.1.0 intl: ^0.17.0 firebase_storage: ^10.3.6 - + translator: ^0.1.7 # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 diff --git a/strings_to_arb.dart b/strings_to_arb.dart new file mode 100644 index 0000000..280d571 --- /dev/null +++ b/strings_to_arb.dart @@ -0,0 +1,226 @@ +import 'dart:async'; +import 'dart:convert'; +import 'dart:io'; + +import 'package:args/args.dart'; +import 'package:path/path.dart' as path; + +const String sourceKey = 'source'; +const String sourceDefault = './lib/'; + +const String outputKey = 'output'; +const String outputDefault = './lib/l10n/'; + +const String createPathsKey = 'create-paths'; +const bool createPathsKeyDefault = true; + +Future main(List arguments) async { + final ArgParser parser = ArgParser() + ..addOption( + sourceKey, + abbr: 's', + help: 'Specify where to search for the arb files.', + valueHelp: sourceDefault, + defaultsTo: sourceDefault, + ) + ..addOption( + outputKey, + abbr: 'o', + help: 'Specify where to save the generated dart files.', + valueHelp: outputDefault, + defaultsTo: outputDefault, + ) + ..addFlag( + 'create-paths', + abbr: 'c', + help: 'This will create the folders structure recursevly.', + defaultsTo: createPathsKeyDefault, + ); + + if (arguments.isNotEmpty && arguments[0] == 'help') { + stdout.writeln(parser.usage); + return; + } + + final ArgResults result = parser.parse(arguments); + + final String source = path.canonicalize(path.absolute(result[sourceKey])); + final String output = path.canonicalize(path.absolute(result[outputKey])); + final bool createPaths = result[createPathsKey]; + + final Directory sourceDir = Directory(source); + final Directory outputDir = Directory(output); + print('sada'); + print(sourceDir); + print(outputDir); + + if (createPaths) { + if (!sourceDir.existsSync()) { + sourceDir.createSync(recursive: true); + } + + if (!outputDir.existsSync()) { + outputDir.createSync(recursive: true); + } + } + + var write = true; + + Map allMessages = {}; + + var skipFiles = ["strings_to_arb.dart", "models", "generated"]; + recursiveFolderCopySync(source, skipFiles, allMessages, write); + + var locale = "en"; + + if (locale != null) { + allMessages["@@locale"] = locale; + } + + allMessages["@@last_modified"] = new DateTime.now().toIso8601String(); + + String outputFilename = "intl_en.arb"; + var outputFile = new File(path.join(outputDir.path, outputFilename)); + var encoder = new JsonEncoder.withIndent(" "); + + // List sortedKeys = allMessages.keys.toList(growable: false)..sort((k1, k2) => k1.compareTo(k2)); + // allMessages = Map.fromIterable(sortedKeys); + print(allMessages); + + if(write) { + outputFile.writeAsStringSync(encoder.convert(allMessages)); + } +} + +void recursiveFolderCopySync(String source, List skips, Map allMessages, bool write) { + Directory directory = new Directory(source); + var skipWords = ["dart:ui", "dart:io"]; + var finder = DartHardCodedStringFinder(skipWords); + directory.listSync().forEach((element) { + print(element); + var shouldSkip = skips.contains(path.basename(element.path)); + if (element is File) { + if (path.extension(element.path) == ".dart" && !shouldSkip) { + var content = element.readAsStringSync(); + var stringsFounded = finder.findHardCodedStrings(content); + if (stringsFounded.isNotEmpty) { + print(stringsFounded); + + if (content.contains("context")) { + //only change strings if there is a context for replacing + content = "import 'package:islamic_quiz_flutter/generated/l10n.dart';\n" + content; + stringsFounded.forEach((element) { + // if (skipWords.any((word) => element.contains(word))) { + allMessages[finder.getCamelCase(element)] = element; + content = content.replaceAll("\"$element\"", "S.of(context).${finder.getCamelCase(element)}"); + content = content.replaceAll("\'$element\'", "S.of(context).${finder.getCamelCase(element)}"); + // } + }); + // element.writeAsString(content); + } + } + } + } else if (element is Directory && !shouldSkip) { + recursiveFolderCopySync(element.path, skips, allMessages, write); + } + }); +} + + +class DartHardCodedStringFinder { + List skipWords; + + DartHardCodedStringFinder(this.skipWords); + + bool shouldInclude(String it) { + return it.isNotEmpty && + !it.contains("assets") && + !it.contains(".png") && + !it.contains(".jpeg") && + !it.contains(".mp3") && + !it.contains(".mkv") && + !it.contains("_") && //most probably api stuff + !it.contains("/") && //path + !it.contains("#") && // color stuff + it.trim().length > 1 && //most probably not needed + !it.contains(".svg"); + } + + var regex = RegExp("\".*?\""); + var regexDart = RegExp("\'.*?\'"); + + String extractHardCodedString(String it, String input) { + return it.replaceAll("\"", "").replaceAll("\'", "").trim(); + } + + /// Returns a string in the form "UpperCamelCase" or "lowerCamelCase". + /// + /// Example: + /// print(camelize("dart_vm")); + /// => DartVm + String getCamelCase(String _words, {String separator: ''}) { + List words = _words + .replaceAll("\"", "") + .replaceAll(".", "") + .replaceAll(",", "") + .replaceAll("?", "") + .replaceAll("&", "") + .replaceAll("%", "") + .replaceAll("*", "") + .replaceAll("(", "") + .replaceAll(")", "") + .replaceAll("!", "") + .replaceAll("-", "") + .replaceAll("/", "") + .replaceAll("|", "") + .split(" ") + .map((e) => _upperCaseFirstLetter(e)) + .toList(); + + if (_words.isNotEmpty) { + words[0] = words[0].toLowerCase(); + } + + return words.join(separator); + } + + String _upperCaseFirstLetter(String word) { + return word.length > 1 ? '${word.substring(0, 1).toUpperCase()}${word.substring(1).toLowerCase()}' : word; + } + + List findHardCodedStrings(String content) { + Iterable result = regex.allMatches(content); + + var strings = []; + + result.forEach((e) { + var string = extractHardCodedString(e.group(0)!, e.input); + + var jsonParamAccessString = e.input.codeUnitAt(e.start-1) =='['.codeUnits.first && e.input.codeUnitAt(e.end) ==']'.codeUnits.first; + var jsonParamSetString = e.input.codeUnitAt(e.end) ==':'.codeUnits.first; + var uselessArguements = string.startsWith("\$\{") && string.endsWith("}") ; + + var include = shouldInclude(string) && !jsonParamSetString && !jsonParamAccessString && !uselessArguements; + if (include) { + strings.add(string); + } + }); + + Iterable result1 = regexDart.allMatches(content); + + result1.forEach((e) { + var string = extractHardCodedString(e.group(0)!, e.input); + + var jsonParamAccessString = e.input.codeUnitAt(e.start-1) =='['.codeUnits.first && e.input.codeUnitAt(e.end) ==']'.codeUnits.first; + var jsonParamSetString = e.input.codeUnitAt(e.end) ==':'.codeUnits.first; + var uselessArguements = string.startsWith("\$\{") && string.endsWith("}") ; + + var include = shouldInclude(string) && !jsonParamSetString && !jsonParamAccessString && !uselessArguements; + if (include) { + strings.add(string); + } + }); + + return strings; + } +}