adding i18n to all other pages

This commit is contained in:
Azmat-7860
2026-10-03 11:22:48 +05:30
parent 47656678e1
commit 3fbeb606a8
22 changed files with 2526 additions and 249 deletions
+324 -1
View File
@@ -82,5 +82,328 @@
"alreadyHaveAccount": "Already have an account? Sign in",
"@alreadyHaveAccount": { "description": "Sign in link on signup" },
"language": "Language",
"@language": { "description": "Language section label" }
"@language": { "description": "Language section label" },
"loginSuccessful": "Login Successful",
"@loginSuccessful": { "description": "Login success snackbar" },
"createAccount": "Create Account",
"@createAccount": { "description": "Create account title" },
"companyName": "Company Name",
"@companyName": { "description": "Company name label" },
"mobileNumber": "Mobile Number",
"@mobileNumber": { "description": "Mobile number label" },
"workspace": "Workspace",
"@workspace": { "description": "Workspace label" },
"gstNumber": "Gst Number",
"@gstNumber": { "description": "GST number label" },
"pancard": "pancard",
"@pancard": { "description": "Pancard label" },
"workingField": "Working",
"@workingField": { "description": "Working label" },
"pleaseEnterThis": "Please enter {label}",
"@pleaseEnterThis": {
"description": "Generic required-field validation",
"placeholders": { "label": { "type": "String" } }
},
"enterThis": "Enter {label}",
"@enterThis": {
"description": "Generic input hint",
"placeholders": { "label": { "type": "String" } }
},
"validEmailShort": "Please enter a valid email",
"@validEmailShort": { "description": "Short email validation" },
"submitCaps": "SUBMIT",
"@submitCaps": { "description": "Submit button uppercase" },
"accountCreationFailed": "Account Creation Failed: {error}",
"@accountCreationFailed": {
"description": "Account creation failure",
"placeholders": { "error": { "type": "String" } }
},
"mobileNo": "Mobile No",
"@mobileNo": { "description": "Mobile number short label" },
"step1CreateAccount": "Step 1: Create Account",
"@step1CreateAccount": { "description": "Signup step 1 header" },
"previous": "Previous",
"@previous": { "description": "Previous button" },
"next": "Next",
"@next": { "description": "Next button" },
"signUpStep": "Sign Up - Step {step}",
"@signUpStep": {
"description": "Signup wizard title",
"placeholders": { "step": { "type": "String" } }
},
"selectedAccountId": "Selected Account ID: {accountId}",
"@selectedAccountId": {
"description": "Selected account display",
"placeholders": { "accountId": { "type": "String" } }
},
"step2EmailVerification": "Step 2: Get Email Verification",
"@step2EmailVerification": { "description": "Signup step 2 header" },
"step3GetRegistration": "Step 3: Get Registration",
"@step3GetRegistration": { "description": "Signup step 3 header" },
"accountCreatedSuccess": "Account created successfully!",
"@accountCreatedSuccess": { "description": "Account created message" },
"registration": "Registration",
"@registration": { "description": "Registration title" },
"firstName": "First Name",
"@firstName": { "description": "First name label" },
"lastName": "Last Name",
"@lastName": { "description": "Last name label" },
"newPassword": "New Password",
"@newPassword": { "description": "New password label" },
"confirmPassword": "Confirm Password",
"@confirmPassword": { "description": "Confirm password label" },
"addAccount": "Add Account",
"@addAccount": { "description": "Add account row" },
"validPasswordShort": "Please enter a valid password",
"@validPasswordShort": { "description": "Short password validation" },
"termsAgreePrefix": "By signing up you are agreeing to the ",
"@termsAgreePrefix": { "description": "Terms agreement prefix" },
"termsConditions": "Terms & Conditions",
"@termsConditions": { "description": "Terms link" },
"termsAndOur": " and our ",
"@termsAndOur": { "description": "Terms conjunction" },
"eula": "End User License Agreement",
"@eula": { "description": "EULA link" },
"processingPlain": "Processing",
"@processingPlain": { "description": "Processing without dots" },
"createUser": "Create User",
"@createUser": { "description": "Create user title" },
"enterYourEmail": "Enter Your Email",
"@enterYourEmail": { "description": "Your email hint" },
"sendOtp": "Send OTP",
"@sendOtp": { "description": "Send OTP button" },
"failedToSendOtp": "Failed to send OTP: {error}",
"@failedToSendOtp": {
"description": "Send OTP failure",
"placeholders": { "error": { "type": "String" } }
},
"emailVerification": "Email Verification",
"@emailVerification": { "description": "Email verification header" },
"otpSentToEmail": "A mail with a 6-digit verification code was just sent to {email}",
"@otpSentToEmail": {
"description": "OTP sent message",
"placeholders": { "email": { "type": "String" } }
},
"emailVerifiedSuccess": "Email verified successfully",
"@emailVerifiedSuccess": { "description": "Email verified message" },
"failedToVerifyOtp": "Failed to verify OTP: {error}",
"@failedToVerifyOtp": {
"description": "OTP verification failure",
"placeholders": { "error": { "type": "String" } }
},
"otpResent": "OTP Resent",
"@otpResent": { "description": "OTP resent message" },
"failedToResendOtp": "Failed to resend OTP: {error}",
"@failedToResendOtp": {
"description": "OTP resend failure",
"placeholders": { "error": { "type": "String" } }
},
"forgotPasswordLink": "Forgot Password?",
"@forgotPasswordLink": { "description": "Forgot password link" },
"didntGetCode": "Didn’t get the code?",
"@didntGetCode": { "description": "Resend prompt" },
"resend": "Resend",
"@resend": { "description": "Resend button" },
"goToRegistrationDetails": "Go to Registration Details",
"@goToRegistrationDetails": { "description": "Go to registration button" },
"aboutUs": "About Us",
"@aboutUs": { "description": "About us title" },
"aboutDescription": "Create a new project if you have access, if you don't have access, then contact the admin.",
"@aboutDescription": { "description": "About us body" },
"resetPassword": "Reset Password",
"@resetPassword": { "description": "Reset password title" },
"signedInAs": "You're signed in as {email}",
"@signedInAs": {
"description": "Signed in as message",
"placeholders": { "email": { "type": "String" } }
},
"wrongAccount": "Wrong account? Log in instead.",
"@wrongAccount": { "description": "Wrong account link" },
"enterOldPassword": "Enter Old Password",
"@enterOldPassword": { "description": "Old password label" },
"oldPasswordError": "Please enter your old password",
"@oldPasswordError": { "description": "Old password validation" },
"enterNewPassword": "Enter New Password",
"@enterNewPassword": { "description": "New password label" },
"newPasswordError": "Please enter your new password",
"@newPasswordError": { "description": "New password validation" },
"reEnterNewPassword": "Re-Enter New Password",
"@reEnterNewPassword": { "description": "Re-enter password label" },
"reEnterPasswordError": "Please re-enter your new password",
"@reEnterPasswordError": { "description": "Re-enter validation" },
"passwordsDontMatch": "Passwords do not match",
"@passwordsDontMatch": { "description": "Password mismatch" },
"continueBtn": "Continue",
"@continueBtn": { "description": "Continue button" },
"passwordChangedSuccess": "Password Changed Successfully",
"@passwordChangedSuccess": { "description": "Password changed message" },
"incorrectPassword": "Incorrect Password",
"@incorrectPassword": { "description": "Incorrect password message" },
"selectImage": "Please select an image.",
"@selectImage": { "description": "Select image prompt" },
"profileImageUpdated": "Profile image updated",
"@profileImageUpdated": { "description": "Image updated message" },
"failedUploadImage": "Failed to upload image: {error}",
"@failedUploadImage": {
"description": "Image upload failure",
"placeholders": { "error": { "type": "String" } }
},
"userIdMissing": "User id missing, please re-login",
"@userIdMissing": { "description": "Missing user id message" },
"profileUpdated": "Profile updated",
"@profileUpdated": { "description": "Profile updated message" },
"failedUpdateProfile": "Failed to update profile: {code}",
"@failedUpdateProfile": {
"description": "Profile update failure",
"placeholders": { "code": { "type": "String" } }
},
"failedUpdate": "Failed to update: {error}",
"@failedUpdate": {
"description": "Update failure",
"placeholders": { "error": { "type": "String" } }
},
"myProfileSettings": "My Profile Settings",
"@myProfileSettings": { "description": "Profile settings title" },
"pickProfilePhoto": "Pick a Profile Photo",
"@pickProfilePhoto": { "description": "Pick photo button" },
"yourProfileInfo": "Your Profile Information",
"@yourProfileInfo": { "description": "Profile info header" },
"yourFullName": "Your Full Name",
"@yourFullName": { "description": "Full name label" },
"enterFullName": "Enter Full Name",
"@enterFullName": { "description": "Full name hint" },
"enterFullNameError": "Please enter your full name",
"@enterFullNameError": { "description": "Full name validation" },
"pronouns": "Pronouns",
"@pronouns": { "description": "Pronouns label" },
"enterPronouns": "Enter Pronouns",
"@enterPronouns": { "description": "Pronouns hint" },
"role": "Role",
"@role": { "description": "Role label" },
"enterRole": "Enter Role",
"@enterRole": { "description": "Role hint" },
"departmentOrTeam": "Department or Team",
"@departmentOrTeam": { "description": "Department label" },
"enterDepartmentOrTeam": "Enter Department or Team",
"@enterDepartmentOrTeam": { "description": "Department hint" },
"validEmailError": "Please enter a valid email address",
"@validEmailError": { "description": "Email validation" },
"aboutMe": "About Me",
"@aboutMe": { "description": "About me label" },
"updateProfile": "Update Profile",
"@updateProfile": { "description": "Update profile button" },
"profilePasswordRow": "Password:Change Password for your account Change password",
"@profilePasswordRow": { "description": "Profile password row" },
"profileSecurityRow": "Security:Logout of all sessions except this current browser Logout other sessions",
"@profileSecurityRow": { "description": "Profile security row" },
"profileDeactivationRow": "Deactivation:Remove access to all organizations and workspace in cloudnsure Deactivate account",
"@profileDeactivationRow": { "description": "Profile deactivation row" },
"loading": "Loading...",
"@loading": { "description": "Loading indicator" },
"navHome": "Home",
"@navHome": { "description": "Home tab" },
"navContacts": "Contacts",
"@navContacts": { "description": "Contacts tab" },
"navWallet": "Wallet",
"@navWallet": { "description": "Wallet tab" },
"dutySummary": "Duty summary",
"@dutySummary": { "description": "Duty summary dialog title" },
"dutySummaryBody": "Points recorded: {points}\\nDistance (straight line): {km} km\\nRoad distance: coming in step 4 (free API).",
"@dutySummaryBody": {
"description": "Duty summary dialog body",
"placeholders": { "points": { "type": "String" }, "km": { "type": "String" } }
},
"dutyPunch": "Duty Punch",
"@dutyPunch": { "description": "Duty punch title" },
"pleaseWait": "Please wait...",
"@pleaseWait": { "description": "Busy button label" },
"punchOut": "Punch Out",
"@punchOut": { "description": "Punch out button" },
"punchIn": "Punch In",
"@punchIn": { "description": "Punch in button" },
"punchedInTracking": "Punched in - tracking every 5 min",
"@punchedInTracking": { "description": "Punched in confirmation" },
"punchInFailed": "Punch in failed: {error}",
"@punchInFailed": {
"description": "Punch in failure",
"placeholders": { "error": { "type": "String" } }
},
"punchOutFailed": "Punch out failed: {error}",
"@punchOutFailed": {
"description": "Punch out failure",
"placeholders": { "error": { "type": "String" } }
},
"batteryNote": "Keeps recording one location every 5 min, even with the app minimized. For Xiaomi/Oppo/Vivo/Samsung allow Unrestricted battery use or tracking may pause.",
"@batteryNote": { "description": "Background tracking note" },
"recentDuties": "Recent duties",
"@recentDuties": { "description": "Recent duties header" },
"punchedIn": "Punched IN",
"@punchedIn": { "description": "Punched in status" },
"punchedOut": "Punched OUT",
"@punchedOut": { "description": "Punched out status" },
"sessionRow": "Session: {session}",
"@sessionRow": {
"description": "Session row",
"placeholders": { "session": { "type": "String" } }
},
"sinceRow": "Since: {time}",
"@sinceRow": {
"description": "Since row",
"placeholders": { "time": { "type": "String" } }
},
"pointsRow": "Points: {points}",
"@pointsRow": {
"description": "Points row",
"placeholders": { "points": { "type": "String" } }
},
"distanceRow": "Distance: {km} km",
"@distanceRow": {
"description": "Distance row",
"placeholders": { "km": { "type": "String" } }
},
"historyOutRow": "Out: {out} • {km} km",
"@historyOutRow": {
"description": "History out row",
"placeholders": { "out": { "type": "String" }, "km": { "type": "String" } }
},
"keepTracking": "Keep tracking running",
"@keepTracking": { "description": "Battery dialog title" },
"batteryExemptBody": "Xiaomi, Oppo, Vivo and Samsung phones stop background tracking to save battery. Allow \"Unrestricted\" battery use for this app so duty tracking keeps working when the screen is off?",
"@batteryExemptBody": { "description": "Battery exemption body" },
"laterBtn": "Later",
"@laterBtn": { "description": "Later button" },
"openSettings": "Open settings",
"@openSettings": { "description": "Open settings button" },
"scanBarcode": "Scan Barcode",
"@scanBarcode": { "description": "Scan barcode title" },
"barCode": "BAR CODE",
"@barCode": { "description": "Bar code title" },
"scannedBarcode": "Scanned Barcode:",
"@scannedBarcode": { "description": "Scanned barcode label" },
"scanQR": "Scan QR",
"@scanQR": { "description": "Scan QR title" },
"qrCode": "QR Code",
"@qrCode": { "description": "QR code title" },
"scannedQRCode": "Scanned QRcode:",
"@scannedQRCode": { "description": "Scanned QR label" },
"scanQRCode": "Scan QRcode",
"@scanQRCode": { "description": "Scan QR button" },
"generatedQrCode": "Generated QR Code",
"@generatedQrCode": { "description": "Generated QR title" },
"generatedBarCode": "Generated Bar Code",
"@generatedBarCode": { "description": "Generated barcode title" },
"qrAndBarCode": "QR AND BAR CODE",
"@qrAndBarCode": { "description": "QR and barcode title" },
"generateQr": "Generate Qr",
"@generateQr": { "description": "Generate QR button" },
"generateBarCode": "Generate Bar code",
"@generateBarCode": { "description": "Generate barcode button" },
"qrCodeScanner": "QR Code Scanner",
"@qrCodeScanner": { "description": "QR scanner button" },
"barCodeScanner": "Bar Code Scanner",
"@barCodeScanner": { "description": "Barcode scanner button" },
"qrCodeData": "qr_code_data",
"@qrCodeData": { "description": "QR data field label" },
"barCodeData": "Bar Code Data",
"@barCodeData": { "description": "Barcode data field label" }
}
+131 -1
View File
@@ -39,5 +39,135 @@
"signInLinkedin": "LinkedIn से साइन इन करें",
"loginHelp": "लॉगिन सहायता",
"alreadyHaveAccount": "पहले से खाता है? साइन इन करें",
"language": "भाषा"
"language": "भाषा",
"loginSuccessful": "लॉगिन सफल",
"createAccount": "खाता बनाएं",
"companyName": "कंपनी का नाम",
"mobileNumber": "मोबाइल नंबर",
"workspace": "कार्यक्षेत्र",
"gstNumber": "जीएसटी नंबर",
"pancard": "पैन कार्ड",
"workingField": "कार्य",
"pleaseEnterThis": "कृपया {label} दर्ज करें",
"enterThis": "{label} दर्ज करें",
"validEmailShort": "कृपया सही ईमेल दर्ज करें",
"submitCaps": "जमा करें",
"accountCreationFailed": "खाता निर्माण विफल: {error}",
"mobileNo": "मोबाइल नंबर",
"step1CreateAccount": "चरण 1: खाता बनाएं",
"previous": "पिछला",
"next": "आगे",
"signUpStep": "साइन अप - चरण {step}",
"selectedAccountId": "चयनित खाता आईडी: {accountId}",
"step2EmailVerification": "चरण 2: ईमेल सत्यापन प्राप्त करें",
"step3GetRegistration": "चरण 3: पंजीकरण प्राप्त करें",
"accountCreatedSuccess": "खाता सफलतापूर्वक बनाया गया!",
"registration": "पंजीकरण",
"firstName": "पहला नाम",
"lastName": "उपनाम",
"newPassword": "नया पासवर्ड",
"confirmPassword": "पासवर्ड की पुष्टि करें",
"addAccount": "खाता जोड़ें",
"validPasswordShort": "कृपया सही पासवर्ड दर्ज करें",
"termsAgreePrefix": "साइन अप करके आप इससे सहमत हैं ",
"termsConditions": "नियम व शर्तें",
"termsAndOur": " और हमारे ",
"eula": "अंतिम उपयोगकर्ता लाइसेंस समझौता",
"processingPlain": "प्रसंस्करण हो रहा है",
"createUser": "उपयोगकर्ता बनाएं",
"enterYourEmail": "अपना ईमेल दर्ज करें",
"sendOtp": "ओटीपी भेजें",
"failedToSendOtp": "ओटीपी भेजने में विफल: {error}",
"emailVerification": "ईमेल सत्यापन",
"otpSentToEmail": "{email} पर 6 अंकों का सत्यापन कोड वाला मेल भेजा गया है",
"emailVerifiedSuccess": "ईमेल सफलतापूर्वक सत्यापित",
"failedToVerifyOtp": "ओटीपी सत्यापन विफल: {error}",
"otpResent": "ओटीपी पुनः भेजा गया",
"failedToResendOtp": "ओटीपी पुनः भेजने में विफल: {error}",
"forgotPasswordLink": "पासवर्ड भूल गए?",
"didntGetCode": "कोड नहीं मिला?",
"resend": "पुनः भेजें",
"goToRegistrationDetails": "पंजीकरण विवरण पर जाएं",
"aboutUs": "हमारे बारे में",
"aboutDescription": "यदि आपके पास पहुंच है तो नया प्रोजेक्ट बनाएं, यदि पहुंच नहीं है तो व्यवस्थापक से संपर्क करें।",
"resetPassword": "पासवर्ड रीसेट करें",
"signedInAs": "आप {email} के रूप में साइन इन हैं",
"wrongAccount": "गलत खाता? इसके बजाय लॉग इन करें।",
"enterOldPassword": "पुराना पासवर्ड दर्ज करें",
"oldPasswordError": "कृपया अपना पुराना पासवर्ड दर्ज करें",
"enterNewPassword": "नया पासवर्ड दर्ज करें",
"newPasswordError": "कृपया अपना नया पासवर्ड दर्ज करें",
"reEnterNewPassword": "नया पासवर्ड पुनः दर्ज करें",
"reEnterPasswordError": "कृपया अपना नया पासवर्ड पुनः दर्ज करें",
"passwordsDontMatch": "पासवर्ड मेल नहीं खाते",
"continueBtn": "जारी रखें",
"passwordChangedSuccess": "पासवर्ड सफलतापूर्वक बदला गया",
"incorrectPassword": "गलत पासवर्ड",
"selectImage": "कृपया एक छवि चुनें।",
"profileImageUpdated": "प्रोफ़ाइल छवि अपडेट की गई",
"failedUploadImage": "छवि अपलोड विफल: {error}",
"userIdMissing": "उपयोगकर्ता आईडी गुम है, कृपया पुनः लॉगिन करें",
"profileUpdated": "प्रोफ़ाइल अपडेट की गई",
"failedUpdateProfile": "प्रोफ़ाइल अपडेट विफल: {code}",
"failedUpdate": "अपडेट विफल: {error}",
"myProfileSettings": "मेरी प्रोफ़ाइल सेटिंग्स",
"pickProfilePhoto": "प्रोफ़ाइल फ़ोटो चुनें",
"yourProfileInfo": "आपकी प्रोफ़ाइल जानकारी",
"yourFullName": "आपका पूरा नाम",
"enterFullName": "पूरा नाम दर्ज करें",
"enterFullNameError": "कृपया अपना पूरा नाम दर्ज करें",
"pronouns": "सर्वनाम",
"enterPronouns": "सर्वनाम दर्ज करें",
"role": "भूमिका",
"enterRole": "भूमिका दर्ज करें",
"departmentOrTeam": "विभाग या टीम",
"enterDepartmentOrTeam": "विभाग या टीम दर्ज करें",
"validEmailError": "कृपया सही ईमेल पता दर्ज करें",
"aboutMe": "मेरे बारे में",
"updateProfile": "प्रोफ़ाइल अपडेट करें",
"profilePasswordRow": "पासवर्ड:अपने खाते का पासवर्ड बदलें पासवर्ड बदलें",
"profileSecurityRow": "सुरक्षा:इस वर्तमान ब्राउज़र को छोड़कर सभी सत्रों से लॉगआउट करें अन्य सत्र लॉगआउट करें",
"profileDeactivationRow": "निष्क्रियण:क्लाउडनश्योर में सभी संगठनों और कार्यक्षेत्रों की पहुंच हटाएं खाता निष्क्रिय करें",
"loading": "लोड हो रहा है...",
"navHome": "होम",
"navContacts": "संपर्क",
"navWallet": "वॉलेट",
"dutySummary": "ड्यूटी सारांश",
"dutySummaryBody": "दर्ज पॉइंट: {points}\\nसीधी दूरी: {km} किमी\\nसड़क दूरी: चरण 4 में आ रही है (मुफ्त API)।",
"dutyPunch": "ड्यूटी पंच",
"pleaseWait": "कृपया प्रतीक्षा करें...",
"punchOut": "पंच आउट",
"punchIn": "पंच इन",
"punchedInTracking": "पंच इन हुआ - हर 5 मिनट में ट्रैकिंग",
"punchInFailed": "पंच इन विफल: {error}",
"punchOutFailed": "पंच आउट विफल: {error}",
"batteryNote": "ऐप छोटा करने पर भी हर 5 मिनट में एक लोकेशन रिकॉर्ड होती है। Xiaomi/Oppo/Vivo/Samsung में बैटरी उपयोग अनियंत्रित रखें, नहीं तो ट्रैकिंग रुक सकती है।",
"recentDuties": "हाल की ड्यूटियां",
"punchedIn": "पंच इन",
"punchedOut": "पंच आउट",
"sessionRow": "सत्र: {session}",
"sinceRow": "से: {time}",
"pointsRow": "पॉइंट: {points}",
"distanceRow": "दूरी: {km} किमी",
"historyOutRow": "आउट: {out} • {km} किमी",
"keepTracking": "ट्रैकिंग चालू रखें",
"batteryExemptBody": "Xiaomi, Oppo, Vivo और Samsung फोन बैटरी बचाने के लिए बैकग्राउंड ट्रैकिंग बंद कर देते हैं। स्क्रीन बंद होने पर भी ड्यूटी ट्रैकिंग चालू रखने के लिए इस ऐप के लिए अनियंत्रित बैटरी उपयोग की अनुमति दें?",
"laterBtn": "बाद में",
"openSettings": "सेटिंग्स खोलें",
"scanBarcode": "बारकोड स्कैन करें",
"barCode": "बार कोड",
"scannedBarcode": "स्कैन किया गया बारकोड:",
"scanQR": "क्यूआर स्कैन करें",
"qrCode": "क्यूआर कोड",
"scannedQRCode": "स्कैन किया गया क्यूआर कोड:",
"scanQRCode": "क्यूआर कोड स्कैन करें",
"generatedQrCode": "जनरेट किया गया क्यूआर कोड",
"generatedBarCode": "जनरेट किया गया बार कोड",
"qrAndBarCode": "क्यूआर और बार कोड",
"generateQr": "क्यूआर बनाएं",
"generateBarCode": "बार कोड बनाएं",
"qrCodeScanner": "क्यूआर कोड स्कैनर",
"barCodeScanner": "बार कोड स्कैनर",
"qrCodeData": "क्यूआर कोड डेटा",
"barCodeData": "बार कोड डेटा"
}
+774
View File
@@ -337,6 +337,780 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'Language'**
String get language;
/// Create account title
///
/// In en, this message translates to:
/// **'Create Account'**
String get createAccount;
/// Company name label
///
/// In en, this message translates to:
/// **'Company Name'**
String get companyName;
/// Mobile number label
///
/// In en, this message translates to:
/// **'Mobile Number'**
String get mobileNumber;
/// Workspace label
///
/// In en, this message translates to:
/// **'Workspace'**
String get workspace;
/// GST number label
///
/// In en, this message translates to:
/// **'Gst Number'**
String get gstNumber;
/// Pancard label
///
/// In en, this message translates to:
/// **'pancard'**
String get pancard;
/// Working label
///
/// In en, this message translates to:
/// **'Working'**
String get workingField;
/// Generic required-field validation
///
/// In en, this message translates to:
/// **'Please enter {label}'**
String pleaseEnterThis(String label);
/// Generic input hint
///
/// In en, this message translates to:
/// **'Enter {label}'**
String enterThis(String label);
/// Short email validation
///
/// In en, this message translates to:
/// **'Please enter a valid email'**
String get validEmailShort;
/// Submit button uppercase
///
/// In en, this message translates to:
/// **'SUBMIT'**
String get submitCaps;
/// Account creation failure
///
/// In en, this message translates to:
/// **'Account Creation Failed: {error}'**
String accountCreationFailed(String error);
/// Mobile number short label
///
/// In en, this message translates to:
/// **'Mobile No'**
String get mobileNo;
/// Signup step 1 header
///
/// In en, this message translates to:
/// **'Step 1: Create Account'**
String get step1CreateAccount;
/// Previous button
///
/// In en, this message translates to:
/// **'Previous'**
String get previous;
/// Next button
///
/// In en, this message translates to:
/// **'Next'**
String get next;
/// Signup wizard title
///
/// In en, this message translates to:
/// **'Sign Up - Step {step}'**
String signUpStep(String step);
/// Selected account display
///
/// In en, this message translates to:
/// **'Selected Account ID: {accountId}'**
String selectedAccountId(String accountId);
/// Signup step 2 header
///
/// In en, this message translates to:
/// **'Step 2: Get Email Verification'**
String get step2EmailVerification;
/// Signup step 3 header
///
/// In en, this message translates to:
/// **'Step 3: Get Registration'**
String get step3GetRegistration;
/// Account created message
///
/// In en, this message translates to:
/// **'Account created successfully!'**
String get accountCreatedSuccess;
/// Registration title
///
/// In en, this message translates to:
/// **'Registration'**
String get registration;
/// First name label
///
/// In en, this message translates to:
/// **'First Name'**
String get firstName;
/// Last name label
///
/// In en, this message translates to:
/// **'Last Name'**
String get lastName;
/// New password label
///
/// In en, this message translates to:
/// **'New Password'**
String get newPassword;
/// Confirm password label
///
/// In en, this message translates to:
/// **'Confirm Password'**
String get confirmPassword;
/// Add account row
///
/// In en, this message translates to:
/// **'Add Account'**
String get addAccount;
/// Short password validation
///
/// In en, this message translates to:
/// **'Please enter a valid password'**
String get validPasswordShort;
/// Terms agreement prefix
///
/// In en, this message translates to:
/// **'By signing up you are agreeing to the '**
String get termsAgreePrefix;
/// Terms link
///
/// In en, this message translates to:
/// **'Terms & Conditions'**
String get termsConditions;
/// Terms conjunction
///
/// In en, this message translates to:
/// **' and our '**
String get termsAndOur;
/// EULA link
///
/// In en, this message translates to:
/// **'End User License Agreement'**
String get eula;
/// Processing without dots
///
/// In en, this message translates to:
/// **'Processing'**
String get processingPlain;
/// Create user title
///
/// In en, this message translates to:
/// **'Create User'**
String get createUser;
/// Your email hint
///
/// In en, this message translates to:
/// **'Enter Your Email'**
String get enterYourEmail;
/// Send OTP button
///
/// In en, this message translates to:
/// **'Send OTP'**
String get sendOtp;
/// Send OTP failure
///
/// In en, this message translates to:
/// **'Failed to send OTP: {error}'**
String failedToSendOtp(String error);
/// Email verification header
///
/// In en, this message translates to:
/// **'Email Verification'**
String get emailVerification;
/// OTP sent message
///
/// In en, this message translates to:
/// **'A mail with a 6-digit verification code was just sent to {email}'**
String otpSentToEmail(String email);
/// Email verified message
///
/// In en, this message translates to:
/// **'Email verified successfully'**
String get emailVerifiedSuccess;
/// OTP verification failure
///
/// In en, this message translates to:
/// **'Failed to verify OTP: {error}'**
String failedToVerifyOtp(String error);
/// OTP resent message
///
/// In en, this message translates to:
/// **'OTP Resent'**
String get otpResent;
/// OTP resend failure
///
/// In en, this message translates to:
/// **'Failed to resend OTP: {error}'**
String failedToResendOtp(String error);
/// Forgot password link
///
/// In en, this message translates to:
/// **'Forgot Password?'**
String get forgotPasswordLink;
/// Resend prompt
///
/// In en, this message translates to:
/// **'Didn’t get the code?'**
String get didntGetCode;
/// Resend button
///
/// In en, this message translates to:
/// **'Resend'**
String get resend;
/// Go to registration button
///
/// In en, this message translates to:
/// **'Go to Registration Details'**
String get goToRegistrationDetails;
/// About us title
///
/// In en, this message translates to:
/// **'About Us'**
String get aboutUs;
/// About us body
///
/// In en, this message translates to:
/// **'Create a new project if you have access, if you don\'t have access, then contact the admin.'**
String get aboutDescription;
/// Reset password title
///
/// In en, this message translates to:
/// **'Reset Password'**
String get resetPassword;
/// Signed in as message
///
/// In en, this message translates to:
/// **'You\'re signed in as {email}'**
String signedInAs(String email);
/// Wrong account link
///
/// In en, this message translates to:
/// **'Wrong account? Log in instead.'**
String get wrongAccount;
/// Old password label
///
/// In en, this message translates to:
/// **'Enter Old Password'**
String get enterOldPassword;
/// Old password validation
///
/// In en, this message translates to:
/// **'Please enter your old password'**
String get oldPasswordError;
/// New password label
///
/// In en, this message translates to:
/// **'Enter New Password'**
String get enterNewPassword;
/// New password validation
///
/// In en, this message translates to:
/// **'Please enter your new password'**
String get newPasswordError;
/// Re-enter password label
///
/// In en, this message translates to:
/// **'Re-Enter New Password'**
String get reEnterNewPassword;
/// Re-enter validation
///
/// In en, this message translates to:
/// **'Please re-enter your new password'**
String get reEnterPasswordError;
/// Password mismatch
///
/// In en, this message translates to:
/// **'Passwords do not match'**
String get passwordsDontMatch;
/// Continue button
///
/// In en, this message translates to:
/// **'Continue'**
String get continueBtn;
/// Password changed message
///
/// In en, this message translates to:
/// **'Password Changed Successfully'**
String get passwordChangedSuccess;
/// Incorrect password message
///
/// In en, this message translates to:
/// **'Incorrect Password'**
String get incorrectPassword;
/// Select image prompt
///
/// In en, this message translates to:
/// **'Please select an image.'**
String get selectImage;
/// Image updated message
///
/// In en, this message translates to:
/// **'Profile image updated'**
String get profileImageUpdated;
/// Image upload failure
///
/// In en, this message translates to:
/// **'Failed to upload image: {error}'**
String failedUploadImage(String error);
/// Missing user id message
///
/// In en, this message translates to:
/// **'User id missing, please re-login'**
String get userIdMissing;
/// Profile updated message
///
/// In en, this message translates to:
/// **'Profile updated'**
String get profileUpdated;
/// Profile update failure
///
/// In en, this message translates to:
/// **'Failed to update profile: {code}'**
String failedUpdateProfile(String code);
/// Update failure
///
/// In en, this message translates to:
/// **'Failed to update: {error}'**
String failedUpdate(String error);
/// Profile settings title
///
/// In en, this message translates to:
/// **'My Profile Settings'**
String get myProfileSettings;
/// Pick photo button
///
/// In en, this message translates to:
/// **'Pick a Profile Photo'**
String get pickProfilePhoto;
/// Profile info header
///
/// In en, this message translates to:
/// **'Your Profile Information'**
String get yourProfileInfo;
/// Full name label
///
/// In en, this message translates to:
/// **'Your Full Name'**
String get yourFullName;
/// Full name hint
///
/// In en, this message translates to:
/// **'Enter Full Name'**
String get enterFullName;
/// Full name validation
///
/// In en, this message translates to:
/// **'Please enter your full name'**
String get enterFullNameError;
/// Pronouns label
///
/// In en, this message translates to:
/// **'Pronouns'**
String get pronouns;
/// Pronouns hint
///
/// In en, this message translates to:
/// **'Enter Pronouns'**
String get enterPronouns;
/// Role label
///
/// In en, this message translates to:
/// **'Role'**
String get role;
/// Role hint
///
/// In en, this message translates to:
/// **'Enter Role'**
String get enterRole;
/// Department label
///
/// In en, this message translates to:
/// **'Department or Team'**
String get departmentOrTeam;
/// Department hint
///
/// In en, this message translates to:
/// **'Enter Department or Team'**
String get enterDepartmentOrTeam;
/// Email validation
///
/// In en, this message translates to:
/// **'Please enter a valid email address'**
String get validEmailError;
/// About me label
///
/// In en, this message translates to:
/// **'About Me'**
String get aboutMe;
/// Update profile button
///
/// In en, this message translates to:
/// **'Update Profile'**
String get updateProfile;
/// Profile password row
///
/// In en, this message translates to:
/// **'Password:Change Password for your account Change password'**
String get profilePasswordRow;
/// Profile security row
///
/// In en, this message translates to:
/// **'Security:Logout of all sessions except this current browser Logout other sessions'**
String get profileSecurityRow;
/// Profile deactivation row
///
/// In en, this message translates to:
/// **'Deactivation:Remove access to all organizations and workspace in cloudnsure Deactivate account'**
String get profileDeactivationRow;
/// Loading indicator
///
/// In en, this message translates to:
/// **'Loading...'**
String get loading;
/// Home tab
///
/// In en, this message translates to:
/// **'Home'**
String get navHome;
/// Contacts tab
///
/// In en, this message translates to:
/// **'Contacts'**
String get navContacts;
/// Wallet tab
///
/// In en, this message translates to:
/// **'Wallet'**
String get navWallet;
/// Duty summary dialog title
///
/// In en, this message translates to:
/// **'Duty summary'**
String get dutySummary;
/// Duty summary dialog body
///
/// In en, this message translates to:
/// **'Points recorded: {points}\\nDistance (straight line): {km} km\\nRoad distance: coming in step 4 (free API).'**
String dutySummaryBody(String points, String km);
/// Duty punch title
///
/// In en, this message translates to:
/// **'Duty Punch'**
String get dutyPunch;
/// Busy button label
///
/// In en, this message translates to:
/// **'Please wait...'**
String get pleaseWait;
/// Punch out button
///
/// In en, this message translates to:
/// **'Punch Out'**
String get punchOut;
/// Punch in button
///
/// In en, this message translates to:
/// **'Punch In'**
String get punchIn;
/// Punched in confirmation
///
/// In en, this message translates to:
/// **'Punched in - tracking every 5 min'**
String get punchedInTracking;
/// Punch in failure
///
/// In en, this message translates to:
/// **'Punch in failed: {error}'**
String punchInFailed(String error);
/// Punch out failure
///
/// In en, this message translates to:
/// **'Punch out failed: {error}'**
String punchOutFailed(String error);
/// Background tracking note
///
/// In en, this message translates to:
/// **'Keeps recording one location every 5 min, even with the app minimized. For Xiaomi/Oppo/Vivo/Samsung allow Unrestricted battery use or tracking may pause.'**
String get batteryNote;
/// Recent duties header
///
/// In en, this message translates to:
/// **'Recent duties'**
String get recentDuties;
/// Punched in status
///
/// In en, this message translates to:
/// **'Punched IN'**
String get punchedIn;
/// Punched out status
///
/// In en, this message translates to:
/// **'Punched OUT'**
String get punchedOut;
/// Session row
///
/// In en, this message translates to:
/// **'Session: {session}'**
String sessionRow(String session);
/// Since row
///
/// In en, this message translates to:
/// **'Since: {time}'**
String sinceRow(String time);
/// Points row
///
/// In en, this message translates to:
/// **'Points: {points}'**
String pointsRow(String points);
/// Distance row
///
/// In en, this message translates to:
/// **'Distance: {km} km'**
String distanceRow(String km);
/// History out row
///
/// In en, this message translates to:
/// **'Out: {out} • {km} km'**
String historyOutRow(String out, String km);
/// Battery dialog title
///
/// In en, this message translates to:
/// **'Keep tracking running'**
String get keepTracking;
/// Battery exemption body
///
/// In en, this message translates to:
/// **'Xiaomi, Oppo, Vivo and Samsung phones stop background tracking to save battery. Allow \"Unrestricted\" battery use for this app so duty tracking keeps working when the screen is off?'**
String get batteryExemptBody;
/// Later button
///
/// In en, this message translates to:
/// **'Later'**
String get laterBtn;
/// Open settings button
///
/// In en, this message translates to:
/// **'Open settings'**
String get openSettings;
/// Scan barcode title
///
/// In en, this message translates to:
/// **'Scan Barcode'**
String get scanBarcode;
/// Bar code title
///
/// In en, this message translates to:
/// **'BAR CODE'**
String get barCode;
/// Scanned barcode label
///
/// In en, this message translates to:
/// **'Scanned Barcode:'**
String get scannedBarcode;
/// Scan QR title
///
/// In en, this message translates to:
/// **'Scan QR'**
String get scanQR;
/// QR code title
///
/// In en, this message translates to:
/// **'QR Code'**
String get qrCode;
/// Scanned QR label
///
/// In en, this message translates to:
/// **'Scanned QRcode:'**
String get scannedQRCode;
/// Scan QR button
///
/// In en, this message translates to:
/// **'Scan QRcode'**
String get scanQRCode;
/// Generated QR title
///
/// In en, this message translates to:
/// **'Generated QR Code'**
String get generatedQrCode;
/// Generated barcode title
///
/// In en, this message translates to:
/// **'Generated Bar Code'**
String get generatedBarCode;
/// QR and barcode title
///
/// In en, this message translates to:
/// **'QR AND BAR CODE'**
String get qrAndBarCode;
/// Generate QR button
///
/// In en, this message translates to:
/// **'Generate Qr'**
String get generateQr;
/// Generate barcode button
///
/// In en, this message translates to:
/// **'Generate Bar code'**
String get generateBarCode;
/// QR scanner button
///
/// In en, this message translates to:
/// **'QR Code Scanner'**
String get qrCodeScanner;
/// Barcode scanner button
///
/// In en, this message translates to:
/// **'Bar Code Scanner'**
String get barCodeScanner;
/// QR data field label
///
/// In en, this message translates to:
/// **'qr_code_data'**
String get qrCodeData;
/// Barcode data field label
///
/// In en, this message translates to:
/// **'Bar Code Data'**
String get barCodeData;
}
class _AppLocalizationsDelegate
+435
View File
@@ -130,4 +130,439 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get language => 'Language';
@override
String get createAccount => 'Create Account';
@override
String get companyName => 'Company Name';
@override
String get mobileNumber => 'Mobile Number';
@override
String get workspace => 'Workspace';
@override
String get gstNumber => 'Gst Number';
@override
String get pancard => 'pancard';
@override
String get workingField => 'Working';
@override
String pleaseEnterThis(String label) {
return 'Please enter $label';
}
@override
String enterThis(String label) {
return 'Enter $label';
}
@override
String get validEmailShort => 'Please enter a valid email';
@override
String get submitCaps => 'SUBMIT';
@override
String accountCreationFailed(String error) {
return 'Account Creation Failed: $error';
}
@override
String get mobileNo => 'Mobile No';
@override
String get step1CreateAccount => 'Step 1: Create Account';
@override
String get previous => 'Previous';
@override
String get next => 'Next';
@override
String signUpStep(String step) {
return 'Sign Up - Step $step';
}
@override
String selectedAccountId(String accountId) {
return 'Selected Account ID: $accountId';
}
@override
String get step2EmailVerification => 'Step 2: Get Email Verification';
@override
String get step3GetRegistration => 'Step 3: Get Registration';
@override
String get accountCreatedSuccess => 'Account created successfully!';
@override
String get registration => 'Registration';
@override
String get firstName => 'First Name';
@override
String get lastName => 'Last Name';
@override
String get newPassword => 'New Password';
@override
String get confirmPassword => 'Confirm Password';
@override
String get addAccount => 'Add Account';
@override
String get validPasswordShort => 'Please enter a valid password';
@override
String get termsAgreePrefix => 'By signing up you are agreeing to the ';
@override
String get termsConditions => 'Terms & Conditions';
@override
String get termsAndOur => ' and our ';
@override
String get eula => 'End User License Agreement';
@override
String get processingPlain => 'Processing';
@override
String get createUser => 'Create User';
@override
String get enterYourEmail => 'Enter Your Email';
@override
String get sendOtp => 'Send OTP';
@override
String failedToSendOtp(String error) {
return 'Failed to send OTP: $error';
}
@override
String get emailVerification => 'Email Verification';
@override
String otpSentToEmail(String email) {
return 'A mail with a 6-digit verification code was just sent to $email';
}
@override
String get emailVerifiedSuccess => 'Email verified successfully';
@override
String failedToVerifyOtp(String error) {
return 'Failed to verify OTP: $error';
}
@override
String get otpResent => 'OTP Resent';
@override
String failedToResendOtp(String error) {
return 'Failed to resend OTP: $error';
}
@override
String get forgotPasswordLink => 'Forgot Password?';
@override
String get didntGetCode => 'Didn’t get the code?';
@override
String get resend => 'Resend';
@override
String get goToRegistrationDetails => 'Go to Registration Details';
@override
String get aboutUs => 'About Us';
@override
String get aboutDescription =>
'Create a new project if you have access, if you don\'t have access, then contact the admin.';
@override
String get resetPassword => 'Reset Password';
@override
String signedInAs(String email) {
return 'You\'re signed in as $email';
}
@override
String get wrongAccount => 'Wrong account? Log in instead.';
@override
String get enterOldPassword => 'Enter Old Password';
@override
String get oldPasswordError => 'Please enter your old password';
@override
String get enterNewPassword => 'Enter New Password';
@override
String get newPasswordError => 'Please enter your new password';
@override
String get reEnterNewPassword => 'Re-Enter New Password';
@override
String get reEnterPasswordError => 'Please re-enter your new password';
@override
String get passwordsDontMatch => 'Passwords do not match';
@override
String get continueBtn => 'Continue';
@override
String get passwordChangedSuccess => 'Password Changed Successfully';
@override
String get incorrectPassword => 'Incorrect Password';
@override
String get selectImage => 'Please select an image.';
@override
String get profileImageUpdated => 'Profile image updated';
@override
String failedUploadImage(String error) {
return 'Failed to upload image: $error';
}
@override
String get userIdMissing => 'User id missing, please re-login';
@override
String get profileUpdated => 'Profile updated';
@override
String failedUpdateProfile(String code) {
return 'Failed to update profile: $code';
}
@override
String failedUpdate(String error) {
return 'Failed to update: $error';
}
@override
String get myProfileSettings => 'My Profile Settings';
@override
String get pickProfilePhoto => 'Pick a Profile Photo';
@override
String get yourProfileInfo => 'Your Profile Information';
@override
String get yourFullName => 'Your Full Name';
@override
String get enterFullName => 'Enter Full Name';
@override
String get enterFullNameError => 'Please enter your full name';
@override
String get pronouns => 'Pronouns';
@override
String get enterPronouns => 'Enter Pronouns';
@override
String get role => 'Role';
@override
String get enterRole => 'Enter Role';
@override
String get departmentOrTeam => 'Department or Team';
@override
String get enterDepartmentOrTeam => 'Enter Department or Team';
@override
String get validEmailError => 'Please enter a valid email address';
@override
String get aboutMe => 'About Me';
@override
String get updateProfile => 'Update Profile';
@override
String get profilePasswordRow =>
'Password:Change Password for your account Change password';
@override
String get profileSecurityRow =>
'Security:Logout of all sessions except this current browser Logout other sessions';
@override
String get profileDeactivationRow =>
'Deactivation:Remove access to all organizations and workspace in cloudnsure Deactivate account';
@override
String get loading => 'Loading...';
@override
String get navHome => 'Home';
@override
String get navContacts => 'Contacts';
@override
String get navWallet => 'Wallet';
@override
String get dutySummary => 'Duty summary';
@override
String dutySummaryBody(String points, String km) {
return 'Points recorded: $points\\nDistance (straight line): $km km\\nRoad distance: coming in step 4 (free API).';
}
@override
String get dutyPunch => 'Duty Punch';
@override
String get pleaseWait => 'Please wait...';
@override
String get punchOut => 'Punch Out';
@override
String get punchIn => 'Punch In';
@override
String get punchedInTracking => 'Punched in - tracking every 5 min';
@override
String punchInFailed(String error) {
return 'Punch in failed: $error';
}
@override
String punchOutFailed(String error) {
return 'Punch out failed: $error';
}
@override
String get batteryNote =>
'Keeps recording one location every 5 min, even with the app minimized. For Xiaomi/Oppo/Vivo/Samsung allow Unrestricted battery use or tracking may pause.';
@override
String get recentDuties => 'Recent duties';
@override
String get punchedIn => 'Punched IN';
@override
String get punchedOut => 'Punched OUT';
@override
String sessionRow(String session) {
return 'Session: $session';
}
@override
String sinceRow(String time) {
return 'Since: $time';
}
@override
String pointsRow(String points) {
return 'Points: $points';
}
@override
String distanceRow(String km) {
return 'Distance: $km km';
}
@override
String historyOutRow(String out, String km) {
return 'Out: $out • $km km';
}
@override
String get keepTracking => 'Keep tracking running';
@override
String get batteryExemptBody =>
'Xiaomi, Oppo, Vivo and Samsung phones stop background tracking to save battery. Allow \"Unrestricted\" battery use for this app so duty tracking keeps working when the screen is off?';
@override
String get laterBtn => 'Later';
@override
String get openSettings => 'Open settings';
@override
String get scanBarcode => 'Scan Barcode';
@override
String get barCode => 'BAR CODE';
@override
String get scannedBarcode => 'Scanned Barcode:';
@override
String get scanQR => 'Scan QR';
@override
String get qrCode => 'QR Code';
@override
String get scannedQRCode => 'Scanned QRcode:';
@override
String get scanQRCode => 'Scan QRcode';
@override
String get generatedQrCode => 'Generated QR Code';
@override
String get generatedBarCode => 'Generated Bar Code';
@override
String get qrAndBarCode => 'QR AND BAR CODE';
@override
String get generateQr => 'Generate Qr';
@override
String get generateBarCode => 'Generate Bar code';
@override
String get qrCodeScanner => 'QR Code Scanner';
@override
String get barCodeScanner => 'Bar Code Scanner';
@override
String get qrCodeData => 'qr_code_data';
@override
String get barCodeData => 'Bar Code Data';
}
+435
View File
@@ -130,4 +130,439 @@ class AppLocalizationsHi extends AppLocalizations {
@override
String get language => 'भाषा';
@override
String get createAccount => 'खाता बनाएं';
@override
String get companyName => 'कंपनी का नाम';
@override
String get mobileNumber => 'मोबाइल नंबर';
@override
String get workspace => 'कार्यक्षेत्र';
@override
String get gstNumber => 'जीएसटी नंबर';
@override
String get pancard => 'पैन कार्ड';
@override
String get workingField => 'कार्य';
@override
String pleaseEnterThis(String label) {
return 'कृपया $label दर्ज करें';
}
@override
String enterThis(String label) {
return '$label दर्ज करें';
}
@override
String get validEmailShort => 'कृपया सही ईमेल दर्ज करें';
@override
String get submitCaps => 'जमा करें';
@override
String accountCreationFailed(String error) {
return 'खाता निर्माण विफल: $error';
}
@override
String get mobileNo => 'मोबाइल नंबर';
@override
String get step1CreateAccount => 'चरण 1: खाता बनाएं';
@override
String get previous => 'पिछला';
@override
String get next => 'आगे';
@override
String signUpStep(String step) {
return 'साइन अप - चरण $step';
}
@override
String selectedAccountId(String accountId) {
return 'चयनित खाता आईडी: $accountId';
}
@override
String get step2EmailVerification => 'चरण 2: ईमेल सत्यापन प्राप्त करें';
@override
String get step3GetRegistration => 'चरण 3: पंजीकरण प्राप्त करें';
@override
String get accountCreatedSuccess => 'खाता सफलतापूर्वक बनाया गया!';
@override
String get registration => 'पंजीकरण';
@override
String get firstName => 'पहला नाम';
@override
String get lastName => 'उपनाम';
@override
String get newPassword => 'नया पासवर्ड';
@override
String get confirmPassword => 'पासवर्ड की पुष्टि करें';
@override
String get addAccount => 'खाता जोड़ें';
@override
String get validPasswordShort => 'कृपया सही पासवर्ड दर्ज करें';
@override
String get termsAgreePrefix => 'साइन अप करके आप इससे सहमत हैं ';
@override
String get termsConditions => 'नियम व शर्तें';
@override
String get termsAndOur => ' और हमारे ';
@override
String get eula => 'अंतिम उपयोगकर्ता लाइसेंस समझौता';
@override
String get processingPlain => 'प्रसंस्करण हो रहा है';
@override
String get createUser => 'उपयोगकर्ता बनाएं';
@override
String get enterYourEmail => 'अपना ईमेल दर्ज करें';
@override
String get sendOtp => 'ओटीपी भेजें';
@override
String failedToSendOtp(String error) {
return 'ओटीपी भेजने में विफल: $error';
}
@override
String get emailVerification => 'ईमेल सत्यापन';
@override
String otpSentToEmail(String email) {
return '$email पर 6 अंकों का सत्यापन कोड वाला मेल भेजा गया है';
}
@override
String get emailVerifiedSuccess => 'ईमेल सफलतापूर्वक सत्यापित';
@override
String failedToVerifyOtp(String error) {
return 'ओटीपी सत्यापन विफल: $error';
}
@override
String get otpResent => 'ओटीपी पुनः भेजा गया';
@override
String failedToResendOtp(String error) {
return 'ओटीपी पुनः भेजने में विफल: $error';
}
@override
String get forgotPasswordLink => 'पासवर्ड भूल गए?';
@override
String get didntGetCode => 'कोड नहीं मिला?';
@override
String get resend => 'पुनः भेजें';
@override
String get goToRegistrationDetails => 'पंजीकरण विवरण पर जाएं';
@override
String get aboutUs => 'हमारे बारे में';
@override
String get aboutDescription =>
'यदि आपके पास पहुंच है तो नया प्रोजेक्ट बनाएं, यदि पहुंच नहीं है तो व्यवस्थापक से संपर्क करें।';
@override
String get resetPassword => 'पासवर्ड रीसेट करें';
@override
String signedInAs(String email) {
return 'आप $email के रूप में साइन इन हैं';
}
@override
String get wrongAccount => 'गलत खाता? इसके बजाय लॉग इन करें।';
@override
String get enterOldPassword => 'पुराना पासवर्ड दर्ज करें';
@override
String get oldPasswordError => 'कृपया अपना पुराना पासवर्ड दर्ज करें';
@override
String get enterNewPassword => 'नया पासवर्ड दर्ज करें';
@override
String get newPasswordError => 'कृपया अपना नया पासवर्ड दर्ज करें';
@override
String get reEnterNewPassword => 'नया पासवर्ड पुनः दर्ज करें';
@override
String get reEnterPasswordError => 'कृपया अपना नया पासवर्ड पुनः दर्ज करें';
@override
String get passwordsDontMatch => 'पासवर्ड मेल नहीं खाते';
@override
String get continueBtn => 'जारी रखें';
@override
String get passwordChangedSuccess => 'पासवर्ड सफलतापूर्वक बदला गया';
@override
String get incorrectPassword => 'गलत पासवर्ड';
@override
String get selectImage => 'कृपया एक छवि चुनें।';
@override
String get profileImageUpdated => 'प्रोफ़ाइल छवि अपडेट की गई';
@override
String failedUploadImage(String error) {
return 'छवि अपलोड विफल: $error';
}
@override
String get userIdMissing => 'उपयोगकर्ता आईडी गुम है, कृपया पुनः लॉगिन करें';
@override
String get profileUpdated => 'प्रोफ़ाइल अपडेट की गई';
@override
String failedUpdateProfile(String code) {
return 'प्रोफ़ाइल अपडेट विफल: $code';
}
@override
String failedUpdate(String error) {
return 'अपडेट विफल: $error';
}
@override
String get myProfileSettings => 'मेरी प्रोफ़ाइल सेटिंग्स';
@override
String get pickProfilePhoto => 'प्रोफ़ाइल फ़ोटो चुनें';
@override
String get yourProfileInfo => 'आपकी प्रोफ़ाइल जानकारी';
@override
String get yourFullName => 'आपका पूरा नाम';
@override
String get enterFullName => 'पूरा नाम दर्ज करें';
@override
String get enterFullNameError => 'कृपया अपना पूरा नाम दर्ज करें';
@override
String get pronouns => 'सर्वनाम';
@override
String get enterPronouns => 'सर्वनाम दर्ज करें';
@override
String get role => 'भूमिका';
@override
String get enterRole => 'भूमिका दर्ज करें';
@override
String get departmentOrTeam => 'विभाग या टीम';
@override
String get enterDepartmentOrTeam => 'विभाग या टीम दर्ज करें';
@override
String get validEmailError => 'कृपया सही ईमेल पता दर्ज करें';
@override
String get aboutMe => 'मेरे बारे में';
@override
String get updateProfile => 'प्रोफ़ाइल अपडेट करें';
@override
String get profilePasswordRow =>
'पासवर्ड:अपने खाते का पासवर्ड बदलें पासवर्ड बदलें';
@override
String get profileSecurityRow =>
'सुरक्षा:इस वर्तमान ब्राउज़र को छोड़कर सभी सत्रों से लॉगआउट करें अन्य सत्र लॉगआउट करें';
@override
String get profileDeactivationRow =>
'निष्क्रियण:क्लाउडनश्योर में सभी संगठनों और कार्यक्षेत्रों की पहुंच हटाएं खाता निष्क्रिय करें';
@override
String get loading => 'लोड हो रहा है...';
@override
String get navHome => 'होम';
@override
String get navContacts => 'संपर्क';
@override
String get navWallet => 'वॉलेट';
@override
String get dutySummary => 'ड्यूटी सारांश';
@override
String dutySummaryBody(String points, String km) {
return 'दर्ज पॉइंट: $points\\nसीधी दूरी: $km किमी\\nसड़क दूरी: चरण 4 में आ रही है (मुफ्त API)।';
}
@override
String get dutyPunch => 'ड्यूटी पंच';
@override
String get pleaseWait => 'कृपया प्रतीक्षा करें...';
@override
String get punchOut => 'पंच आउट';
@override
String get punchIn => 'पंच इन';
@override
String get punchedInTracking => 'पंच इन हुआ - हर 5 मिनट में ट्रैकिंग';
@override
String punchInFailed(String error) {
return 'पंच इन विफल: $error';
}
@override
String punchOutFailed(String error) {
return 'पंच आउट विफल: $error';
}
@override
String get batteryNote =>
'ऐप छोटा करने पर भी हर 5 मिनट में एक लोकेशन रिकॉर्ड होती है। Xiaomi/Oppo/Vivo/Samsung में बैटरी उपयोग अनियंत्रित रखें, नहीं तो ट्रैकिंग रुक सकती है।';
@override
String get recentDuties => 'हाल की ड्यूटियां';
@override
String get punchedIn => 'पंच इन';
@override
String get punchedOut => 'पंच आउट';
@override
String sessionRow(String session) {
return 'सत्र: $session';
}
@override
String sinceRow(String time) {
return 'से: $time';
}
@override
String pointsRow(String points) {
return 'पॉइंट: $points';
}
@override
String distanceRow(String km) {
return 'दूरी: $km किमी';
}
@override
String historyOutRow(String out, String km) {
return 'आउट: $out • $km किमी';
}
@override
String get keepTracking => 'ट्रैकिंग चालू रखें';
@override
String get batteryExemptBody =>
'Xiaomi, Oppo, Vivo और Samsung फोन बैटरी बचाने के लिए बैकग्राउंड ट्रैकिंग बंद कर देते हैं। स्क्रीन बंद होने पर भी ड्यूटी ट्रैकिंग चालू रखने के लिए इस ऐप के लिए अनियंत्रित बैटरी उपयोग की अनुमति दें?';
@override
String get laterBtn => 'बाद में';
@override
String get openSettings => 'सेटिंग्स खोलें';
@override
String get scanBarcode => 'बारकोड स्कैन करें';
@override
String get barCode => 'बार कोड';
@override
String get scannedBarcode => 'स्कैन किया गया बारकोड:';
@override
String get scanQR => 'क्यूआर स्कैन करें';
@override
String get qrCode => 'क्यूआर कोड';
@override
String get scannedQRCode => 'स्कैन किया गया क्यूआर कोड:';
@override
String get scanQRCode => 'क्यूआर कोड स्कैन करें';
@override
String get generatedQrCode => 'जनरेट किया गया क्यूआर कोड';
@override
String get generatedBarCode => 'जनरेट किया गया बार कोड';
@override
String get qrAndBarCode => 'क्यूआर और बार कोड';
@override
String get generateQr => 'क्यूआर बनाएं';
@override
String get generateBarCode => 'बार कोड बनाएं';
@override
String get qrCodeScanner => 'क्यूआर कोड स्कैनर';
@override
String get barCodeScanner => 'बार कोड स्कैनर';
@override
String get qrCodeData => 'क्यूआर कोड डेटा';
@override
String get barCodeData => 'बार कोड डेटा';
}
@@ -5,6 +5,7 @@ import 'package:flutter_foreground_task/flutter_foreground_task.dart';
import 'package:geolocator/geolocator.dart';
import 'package:permission_handler/permission_handler.dart' as ph;
import '../../l10n/app_localizations.dart';
import 'attendance_math.dart';
import 'attendance_storage.dart';
@@ -261,18 +262,17 @@ class AttendanceService {
final bool? go = await showDialog<bool>(
context: context,
builder: (c) => AlertDialog(
title: const Text('Keep tracking running'),
content: const Text(
'Xiaomi, Oppo, Vivo and Samsung phones stop background tracking '
'to save battery. Allow "Unrestricted" battery use for this app '
'so duty tracking keeps working when the screen is off?'),
title: Text(AppLocalizations.of(context)!.keepTracking),
content: Text(
AppLocalizations.of(context)!.batteryExemptBody),
actions: [
TextButton(
onPressed: () => Navigator.of(c).pop(false),
child: const Text('Later')),
child: Text(AppLocalizations.of(context)!.laterBtn)),
TextButton(
onPressed: () => Navigator.of(c).pop(true),
child: const Text('Open settings')),
child: Text(
AppLocalizations.of(context)!.openSettings)),
],
),
);
+33 -21
View File
@@ -5,6 +5,7 @@ import 'package:flutter_foreground_task/flutter_foreground_task.dart';
import '../../Utils/image_constant.dart';
import '../../Utils/size_utils.dart';
import '../../l10n/app_localizations.dart';
import '../../theme/app_style.dart';
import '../../widgets/app_bar/appbar_image.dart';
import '../../widgets/app_bar/appbar_title.dart';
@@ -116,9 +117,9 @@ class _PunchScreenState extends State<PunchScreen> {
await AttendanceService.maybeAskBatteryExemption(context);
}
await _refresh();
_msg('Punched in - tracking every 5 min', false);
_msg(AppLocalizations.of(context)!.punchedInTracking, false);
} catch (e) {
_msg('Punch in failed: $e', true);
_msg(AppLocalizations.of(context)!.punchInFailed(e.toString()), true);
} finally {
if (mounted) setState(() => _busy = false);
}
@@ -135,22 +136,21 @@ class _PunchScreenState extends State<PunchScreen> {
showDialog(
context: context,
builder: (c) => AlertDialog(
title: const Text('Duty summary'),
title: Text(AppLocalizations.of(context)!.dutySummary),
content: Text(
'Points recorded: $pts\n'
'Distance (straight line): ${km.toStringAsFixed(2)} km\n'
'Road distance: coming in step 4 (free API).',
AppLocalizations.of(context)!.dutySummaryBody(
pts.toString(), km.toStringAsFixed(2)),
),
actions: [
TextButton(
onPressed: () => Navigator.of(c).pop(),
child: const Text('OK'),
child: Text(AppLocalizations.of(context)!.ok),
),
],
),
);
} catch (e) {
_msg('Punch out failed: $e', true);
_msg(AppLocalizations.of(context)!.punchOutFailed(e.toString()), true);
} finally {
if (mounted) setState(() => _busy = false);
}
@@ -180,7 +180,8 @@ class _PunchScreenState extends State<PunchScreen> {
onTap: () => Navigator.pop(context),
),
centerTitle: true,
title: AppbarTitle(text: 'Duty Punch'),
title: AppbarTitle(
text: AppLocalizations.of(context)!.dutyPunch),
),
body: SingleChildScrollView(
padding: const EdgeInsets.all(16),
@@ -192,22 +193,22 @@ class _PunchScreenState extends State<PunchScreen> {
CustomButton(
height: getVerticalSize(50),
text: _busy
? 'Please wait...'
: (_punchedIn ? 'Punch Out' : 'Punch In'),
? AppLocalizations.of(context)!.pleaseWait
: (_punchedIn
? AppLocalizations.of(context)!.punchOut
: AppLocalizations.of(context)!.punchIn),
margin: getMargin(top: 8, bottom: 5),
onTap: _busy ? () {} : (_punchedIn ? _onPunchOut : _onPunchIn),
),
const SizedBox(height: 8),
Text(
'Keeps recording one location every 5 min, even with the app '
'minimized. For Xiaomi/Oppo/Vivo/Samsung allow Unrestricted '
'battery use or tracking may pause.',
AppLocalizations.of(context)!.batteryNote,
style: AppStyle.txtGilroyMedium16Bluegray900.copyWith(
fontSize: 12,
),
),
const SizedBox(height: 20),
Text('Recent duties',
Text(AppLocalizations.of(context)!.recentDuties,
style: AppStyle.txtGilroyMedium16Bluegray900.copyWith(
fontWeight: FontWeight.bold,
)),
@@ -238,20 +239,29 @@ class _PunchScreenState extends State<PunchScreen> {
),
const SizedBox(width: 8),
Text(
_punchedIn ? 'Punched IN' : 'Punched OUT',
_punchedIn
? AppLocalizations.of(context)!.punchedIn
: AppLocalizations.of(context)!.punchedOut,
style: const TextStyle(
fontSize: 18, fontWeight: FontWeight.bold),
),
],
),
const SizedBox(height: 12),
Text('Session: ${_sessionId ?? '-'}'),
if (_punchInTime != null) Text('Since: $_punchInTime'),
Text(AppLocalizations.of(context)!
.sessionRow(_sessionId ?? '-')),
if (_punchInTime != null)
Text(AppLocalizations.of(context)!
.sinceRow(_punchInTime!)),
const SizedBox(height: 8),
Text('Points: $_points',
Text(
AppLocalizations.of(context)!
.pointsRow(_points.toString()),
style:
const TextStyle(fontSize: 16, fontWeight: FontWeight.w600)),
Text('Distance: ${_km.toStringAsFixed(2)} km',
Text(
AppLocalizations.of(context)!
.distanceRow(_km.toStringAsFixed(2)),
style:
const TextStyle(fontSize: 16, fontWeight: FontWeight.w600)),
],
@@ -268,7 +278,9 @@ class _PunchScreenState extends State<PunchScreen> {
title: Text('${s['punch_in']}',
style: const TextStyle(fontSize: 12)),
subtitle: Text(
'Out: ${s['punch_out'] ?? '-'} • ${km.toStringAsFixed(2)} km',
AppLocalizations.of(context)!.historyOutRow(
(s['punch_out'] ?? '-').toString(),
km.toStringAsFixed(2)),
style: const TextStyle(fontSize: 11)),
trailing: Text(status,
style: TextStyle(
@@ -3,6 +3,8 @@ import 'package:flutter/material.dart';
// OLD: import 'package:flutter_barcode_scanner/flutter_barcode_scanner.dart'; // removed no namespace AGP8 - by Azmat
import 'package:mobile_scanner/mobile_scanner.dart'; // migrated for AGP8 Java17 - by Azmat
import '../../../l10n/app_localizations.dart';
class BarcodeScreen extends StatefulWidget {
const BarcodeScreen({super.key});
@@ -22,7 +24,8 @@ class _BarcodeScreenState extends State<BarcodeScreen> {
context,
MaterialPageRoute(
builder: (context) => Scaffold(
appBar: AppBar(title: const Text('Scan Barcode')),
appBar: AppBar(
title: Text(AppLocalizations.of(context)!.scanBarcode)),
body: MobileScanner(
controller: barCodeController,
onDetect: (capture) => Navigator.pop(
@@ -47,7 +50,8 @@ class _BarcodeScreenState extends State<BarcodeScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('BAR CODE')),
appBar: AppBar(
title: Text(AppLocalizations.of(context)!.barCode)),
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(16),
@@ -56,8 +60,8 @@ class _BarcodeScreenState extends State<BarcodeScreen> {
child: Center(
child: Column(
children: [
const Text(
'Scanned Barcode:',
Text(
AppLocalizations.of(context)!.scannedBarcode,
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
const SizedBox(height: 10),
@@ -71,7 +75,8 @@ class _BarcodeScreenState extends State<BarcodeScreen> {
scanBarcode(); // Trigger barcode scanning
},
icon: const Icon(Icons.camera_alt), // Camera icon
label: const Text('Scan Barcode'),
label: Text(
AppLocalizations.of(context)!.scanBarcode),
),
const SizedBox(height: 16),
],
@@ -7,6 +7,7 @@ import 'package:barcode_widget/barcode_widget.dart';
import '../Barcode/Barcode_create_entity_screen.dart';
import '../Qrcode/Qrcode_create_entity_screen.dart';
import '../../../l10n/app_localizations.dart';
class QrBarCodeScreen extends StatefulWidget {
const QrBarCodeScreen({super.key});
@@ -26,7 +27,7 @@ class _QrBarCodeScreenState extends State<QrBarCodeScreen> {
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Generated QR Code'),
title: Text(AppLocalizations.of(context)!.generatedQrCode),
content: Column(
mainAxisSize: MainAxisSize.min,
children: [
@@ -45,7 +46,7 @@ class _QrBarCodeScreenState extends State<QrBarCodeScreen> {
onPressed: () {
Navigator.of(context).pop(); // Close the dialog
},
child: const Text('Close'),
child: Text(AppLocalizations.of(context)!.close),
),
],
),
@@ -62,7 +63,8 @@ class _QrBarCodeScreenState extends State<QrBarCodeScreen> {
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Generated Bar Code'),
title: Text(
AppLocalizations.of(context)!.generatedBarCode),
content: Column(
mainAxisSize: MainAxisSize.min,
children: [
@@ -87,7 +89,7 @@ class _QrBarCodeScreenState extends State<QrBarCodeScreen> {
onPressed: () {
Navigator.of(context).pop(); // Close the dialog
},
child: const Text('Close'),
child: Text(AppLocalizations.of(context)!.close),
),
],
),
@@ -104,7 +106,9 @@ class _QrBarCodeScreenState extends State<QrBarCodeScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('QR AND BAR CODE')),
appBar: AppBar(
title:
Text(AppLocalizations.of(context)!.qrAndBarCode)),
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(16),
@@ -115,27 +119,34 @@ class _QrBarCodeScreenState extends State<QrBarCodeScreen> {
// GENERATE QR CODE
TextFormField(
controller: qr_code_dataController,
decoration: const InputDecoration(labelText: 'qr_code_data'),
decoration: InputDecoration(
labelText: AppLocalizations.of(context)!
.qrCodeData),
),
const SizedBox(height: 16),
ElevatedButton(
onPressed: () {
_showqr_code_dataDialog();
},
child: const Text('Generate Qr')),
child: Text(AppLocalizations.of(context)!
.generateQr)),
// GENERATE BAR CODE
TextFormField(
controller: bar_code_dataController,
decoration: const InputDecoration(labelText: 'Bar Code Data'),
decoration: InputDecoration(
labelText: AppLocalizations.of(context)!
.barCodeData),
),
const SizedBox(height: 16),
ElevatedButton(
onPressed: () {
_show_bar_code_dataDialog(bar_code_dataController.text);
},
child: const Text('Generate Bar code'),
child: Text(AppLocalizations.of(context)!
.generateBarCode),
),
// QR CODE SCANNER
const SizedBox(height: 16),
@@ -146,7 +157,8 @@ class _QrBarCodeScreenState extends State<QrBarCodeScreen> {
MaterialPageRoute(
builder: (context) => const qrcodeScreen()));
},
child: const Text('QR Code Scanner'),
child: Text(AppLocalizations.of(context)!
.qrCodeScanner),
),
// BAR CODE SCANNER
@@ -158,7 +170,8 @@ class _QrBarCodeScreenState extends State<QrBarCodeScreen> {
MaterialPageRoute(
builder: (context) => const BarcodeScreen()));
},
child: const Text('Bar Code Scanner'),
child: Text(AppLocalizations.of(context)!
.barCodeScanner),
),
],
),
@@ -3,6 +3,8 @@ import 'package:flutter/material.dart';
// OLD: import 'package:flutter_barcode_scanner/flutter_barcode_scanner.dart'; // removed no namespace AGP8 - by Azmat
import 'package:mobile_scanner/mobile_scanner.dart'; // migrated for AGP8 Java17 - by Azmat
import '../../../l10n/app_localizations.dart';
class qrcodeScreen extends StatefulWidget {
const qrcodeScreen({super.key});
@@ -22,7 +24,8 @@ class _qrcodeScreenState extends State<qrcodeScreen> {
context,
MaterialPageRoute(
builder: (context) => Scaffold(
appBar: AppBar(title: const Text('Scan QR')),
appBar: AppBar(
title: Text(AppLocalizations.of(context)!.scanQR)),
body: MobileScanner(
controller: qrCodeController,
onDetect: (capture) => Navigator.pop(
@@ -47,7 +50,8 @@ class _qrcodeScreenState extends State<qrcodeScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('QR Code')),
appBar: AppBar(
title: Text(AppLocalizations.of(context)!.qrCode)),
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(16),
@@ -56,8 +60,8 @@ class _qrcodeScreenState extends State<qrcodeScreen> {
child: Center(
child: Column(
children: [
const Text(
'Scanned QRcode:',
Text(
AppLocalizations.of(context)!.scannedQRCode,
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
const SizedBox(height: 10),
@@ -71,7 +75,8 @@ class _qrcodeScreenState extends State<qrcodeScreen> {
scanQRcode(); // Trigger barcode scanning
},
icon: const Icon(Icons.camera_alt), // Camera icon
label: const Text('Scan QRcode'),
label: Text(
AppLocalizations.of(context)!.scanQRCode),
),
const SizedBox(height: 16),
],
@@ -20,6 +20,7 @@ import 'package:http/http.dart' as http;
import 'package:shared_preferences/shared_preferences.dart';
import '../../Utils/color_constants.dart';
import '../../Utils/size_utils.dart';
import '../../l10n/app_localizations.dart';
import '../../providers/tab_navigation_provider.dart';
import '../../providers/token_manager.dart';
import '../../resources/api_constants.dart';
@@ -400,7 +401,7 @@ class _TabbedLayoutComponentState extends State<TabbedLayoutComponent> {
extendBodyBehindAppBar: true,
//bottomNavigationBar: AppFooter(),
body: screens.isEmpty
? const Text("Loading...")
? Text(AppLocalizations.of(context)!.loading)
: ListView.builder(
itemCount: screens.length,
scrollDirection: Axis.vertical,
@@ -453,7 +454,7 @@ class _TabbedLayoutComponentState extends State<TabbedLayoutComponent> {
GButton(
icon: FluentIcons.home_32_regular,
iconSize: 36,
text: 'Home',
text: AppLocalizations.of(context)!.navHome,
onPressed: () {
print('home');
},
@@ -461,7 +462,7 @@ class _TabbedLayoutComponentState extends State<TabbedLayoutComponent> {
GButton(
icon: FluentIcons.people_32_regular,
iconSize: 36,
text: 'Contacts',
text: AppLocalizations.of(context)!.navContacts,
onPressed: () {
print('contacts');
// Navigator.push(
@@ -476,7 +477,7 @@ class _TabbedLayoutComponentState extends State<TabbedLayoutComponent> {
),
GButton(
icon: Icons.wallet,
text: 'Wallet',
text: AppLocalizations.of(context)!.navWallet,
iconSize: 34,
onPressed: () {
print('wallet');
@@ -152,11 +152,12 @@ class _ProfileSettingsScreenState extends State<ProfileSettingsScreen> {
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Error'),
content: Text('Please select an image.'),
title: Text(AppLocalizations.of(context)!.error),
content: Text(
AppLocalizations.of(context)!.selectImage),
actions: [
TextButton(
child: const Text('OK'),
child: Text(AppLocalizations.of(context)!.ok),
onPressed: () {
Navigator.of(context).pop();
},
@@ -180,7 +181,9 @@ class _ProfileSettingsScreenState extends State<ProfileSettingsScreen> {
await fetchProfileImageData();
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Profile image updated')),
SnackBar(
content: Text(AppLocalizations.of(context)!
.profileImageUpdated)),
);
}
} catch (e) {
@@ -188,11 +191,12 @@ class _ProfileSettingsScreenState extends State<ProfileSettingsScreen> {
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Error'),
content: Text('Failed to upload image: $e'),
title: Text(AppLocalizations.of(context)!.error),
content: Text(AppLocalizations.of(context)!
.failedUploadImage(e.toString())),
actions: [
TextButton(
child: const Text('OK'),
child: Text(AppLocalizations.of(context)!.ok),
onPressed: () {
Navigator.of(context).pop();
},
@@ -212,7 +216,9 @@ class _ProfileSettingsScreenState extends State<ProfileSettingsScreen> {
if (rawUserId == null) {
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('User id missing, please re-login')),
SnackBar(
content: Text(
AppLocalizations.of(context)!.userIdMissing)),
);
}
return;
@@ -241,7 +247,9 @@ class _ProfileSettingsScreenState extends State<ProfileSettingsScreen> {
print("success");
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Profile updated')),
SnackBar(
content: Text(
AppLocalizations.of(context)!.profileUpdated)),
);
Navigator.of(context).pop();
}
@@ -251,15 +259,18 @@ class _ProfileSettingsScreenState extends State<ProfileSettingsScreen> {
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
'Failed to update profile: ${response.statusCode}')),
content: Text(AppLocalizations.of(context)!
.failedUpdateProfile(
response.statusCode.toString()))),
);
}
}
} catch (e) {
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Failed to update: $e')),
SnackBar(
content: Text(AppLocalizations.of(context)!
.failedUpdate(e.toString()))),
);
}
}
@@ -301,7 +312,9 @@ class _ProfileSettingsScreenState extends State<ProfileSettingsScreen> {
Navigator.pop(context);
}),
centerTitle: true,
title: AppbarTitle(text: "My Profile Settings")),
title: AppbarTitle(
text:
AppLocalizations.of(context)!.myProfileSettings)),
body: SingleChildScrollView(
padding: EdgeInsets.all(16),
child: Column(
@@ -323,7 +336,8 @@ class _ProfileSettingsScreenState extends State<ProfileSettingsScreen> {
SizedBox(height: 10),
CustomButton(
height: getVerticalSize(50),
text: "Pick a Profile Photo",
text: AppLocalizations.of(context)!
.pickProfilePhoto,
margin: getMargin(top: 24, bottom: 5),
onTap: () async {
// Pick + auto-upload, same as authsec_flutter_new
@@ -345,7 +359,7 @@ class _ProfileSettingsScreenState extends State<ProfileSettingsScreen> {
SizedBox(height: 20),
// Section: Profile Form
Text(
'Your Profile Information',
AppLocalizations.of(context)!.yourProfileInfo,
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
),
SizedBox(height: 10),
@@ -359,17 +373,21 @@ class _ProfileSettingsScreenState extends State<ProfileSettingsScreen> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text("Your Full Name",
Text(
AppLocalizations.of(context)!
.yourFullName,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle.txtGilroyMedium16Bluegray900),
CustomTextFormField(
focusNode: FocusNode(),
controller: fullNameController,
hintText: "Enter Full Name",
hintText: AppLocalizations.of(context)!
.enterFullName,
validator: (value) {
if (value!.isEmpty) {
return 'Please enter your full name';
return AppLocalizations.of(context)!
.enterFullNameError;
}
return null;
},
@@ -381,13 +399,14 @@ class _ProfileSettingsScreenState extends State<ProfileSettingsScreen> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text("Pronouns",
Text(AppLocalizations.of(context)!.pronouns,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle.txtGilroyMedium16Bluegray900),
CustomTextFormField(
focusNode: FocusNode(),
hintText: "Enter Pronouns",
hintText: AppLocalizations.of(context)!
.enterPronouns,
controller: pronounsController,
margin: getMargin(top: 6))
])),
@@ -397,13 +416,14 @@ class _ProfileSettingsScreenState extends State<ProfileSettingsScreen> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text("Role",
Text(AppLocalizations.of(context)!.role,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle.txtGilroyMedium16Bluegray900),
CustomTextFormField(
focusNode: FocusNode(),
hintText: "Enter Role",
hintText: AppLocalizations.of(context)!
.enterRole,
controller: roleController,
margin: getMargin(top: 6))
])),
@@ -413,13 +433,16 @@ class _ProfileSettingsScreenState extends State<ProfileSettingsScreen> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text("Department or Team",
Text(
AppLocalizations.of(context)!
.departmentOrTeam,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle.txtGilroyMedium16Bluegray900),
CustomTextFormField(
focusNode: FocusNode(),
hintText: "Enter Department or Team",
hintText: AppLocalizations.of(context)!
.enterDepartmentOrTeam,
controller: departmentController,
margin: getMargin(top: 6))
])),
@@ -429,17 +452,19 @@ class _ProfileSettingsScreenState extends State<ProfileSettingsScreen> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text("Email",
Text(AppLocalizations.of(context)!.email,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle.txtGilroyMedium16Bluegray900),
CustomTextFormField(
focusNode: FocusNode(),
hintText: "Enter Email",
hintText: AppLocalizations.of(context)!
.enterEmail,
controller: emailController,
validator: (value) {
if (value!.isEmpty || !value!.contains('@')) {
return 'Please enter a valid email address';
return AppLocalizations.of(context)!
.validEmailError;
}
return null;
},
@@ -451,20 +476,21 @@ class _ProfileSettingsScreenState extends State<ProfileSettingsScreen> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text("About Me",
Text(AppLocalizations.of(context)!.aboutMe,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle.txtGilroyMedium16Bluegray900),
CustomTextFormField(
focusNode: FocusNode(),
hintText: "About Me",
hintText: AppLocalizations.of(context)!
.aboutMe,
controller: aboutMeController,
maxLines: 3,
margin: getMargin(top: 6))
])),
CustomButton(
height: getVerticalSize(50),
text: "Update Profile",
text: AppLocalizations.of(context)!.updateProfile,
margin: getMargin(top: 24, bottom: 5),
onTap: _updateProfile,
),
@@ -489,8 +515,8 @@ class _ProfileSettingsScreenState extends State<ProfileSettingsScreen> {
text: TextSpan(
children: <TextSpan>[
TextSpan(
text:
"Password:Change Password for your account Change password",
text: AppLocalizations.of(context)!
.profilePasswordRow,
style: TextStyle(
fontWeight: FontWeight.normal,
color: Colors.blue,
@@ -509,8 +535,8 @@ class _ProfileSettingsScreenState extends State<ProfileSettingsScreen> {
text: TextSpan(
children: <TextSpan>[
TextSpan(
text:
'Security:Logout of all sessions except this current browser Logout other sessions',
text: AppLocalizations.of(context)!
.profileSecurityRow,
style: TextStyle(
fontWeight: FontWeight.normal,
color: Colors.blue,
@@ -529,8 +555,8 @@ class _ProfileSettingsScreenState extends State<ProfileSettingsScreen> {
text: TextSpan(
children: <TextSpan>[
TextSpan(
text:
'Deactivation:Remove access to all organizations and workspace in cloudnsure Deactivate account',
text: AppLocalizations.of(context)!
.profileDeactivationRow,
style: TextStyle(
fontWeight: FontWeight.normal,
color: Colors.blue,
+5 -3
View File
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import '../../Utils/image_constant.dart';
import '../../Utils/size_utils.dart';
import '../../l10n/app_localizations.dart';
import '../../theme/app_style.dart';
import '../../widgets/app_bar/appbar_image.dart';
import '../../widgets/app_bar/appbar_title.dart';
@@ -23,18 +24,19 @@ class AboutScreen extends StatelessWidget {
Navigator.pop(context);
}),
centerTitle: true,
title: AppbarTitle(text: "About Us")),
title: AppbarTitle(
text: AppLocalizations.of(context)!.aboutUs)),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'About Us',
AppLocalizations.of(context)!.aboutUs,
style: AppStyle.txtGilroyBold18Bluegray900,
),
const SizedBox(height: 20),
Text(
'Create a new project if you have access, if you don\'t have access, then contact the admin.',
AppLocalizations.of(context)!.aboutDescription,
textAlign: TextAlign.center,
style: AppStyle.txtGilroyBold16BlueA700,
),
@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import '../../Utils/image_constant.dart';
import '../../Utils/size_utils.dart';
import '../../l10n/app_localizations.dart';
import '../../providers/token_manager.dart';
import '../../resources/api_constants.dart';
import 'package:http/http.dart' as http;
@@ -40,14 +41,15 @@ class ResetPasswordScreen extends StatelessWidget {
Navigator.pop(context);
}),
centerTitle: true,
title: AppbarTitle(text: "Reset Password")),
title: AppbarTitle(
text: AppLocalizations.of(context)!.resetPassword)),
body: SingleChildScrollView(
padding: EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Text(
"You're signed in as $userEmail",
AppLocalizations.of(context)!.signedInAs(userEmail),
style: AppStyle.txtGilroyMedium16Bluegray800
),
const SizedBox(height: 20),
@@ -62,7 +64,7 @@ class ResetPasswordScreen extends StatelessWidget {
);
},
child: Text(
'Wrong account? Log in instead.',
AppLocalizations.of(context)!.wrongAccount,
style: AppStyle.txtGreenSemiBold16,
),
),
@@ -132,7 +134,7 @@ class _ResetPasswordFormState extends State<ResetPasswordForm> {
Padding(
padding: getPadding(top: 19),
child: Text("Enter Old Password",
child: Text(AppLocalizations.of(context)!.enterOldPassword,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style:
@@ -140,16 +142,17 @@ class _ResetPasswordFormState extends State<ResetPasswordForm> {
CustomTextFormField(
focusNode: FocusNode(),
controller: oldPasswordController,
hintText: "Enter Old Password",
hintText:
AppLocalizations.of(context)!.enterOldPassword,
margin: getMargin(top: 6),
errorText:
_isPasswordValid1 ? null : 'Please enter your old password',
_isPasswordValid1 ? null : AppLocalizations.of(context)!.oldPasswordError,
padding: TextFormFieldPadding.PaddingT12,
textInputAction: TextInputAction.done,
onChanged: _validatePassword1,
validator: (value) {
if (value!.isEmpty) {
return 'Please enter your old password';
return AppLocalizations.of(context)!.oldPasswordError;
}
return null; // Return null to indicate no error
},
@@ -170,7 +173,7 @@ class _ResetPasswordFormState extends State<ResetPasswordForm> {
Padding(
padding: getPadding(top: 19),
child: Text("Enter New Password",
child: Text(AppLocalizations.of(context)!.enterNewPassword,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style:
@@ -178,7 +181,8 @@ class _ResetPasswordFormState extends State<ResetPasswordForm> {
CustomTextFormField(
focusNode: FocusNode(),
controller: newPasswordController,
hintText: "Enter New Password",
hintText:
AppLocalizations.of(context)!.enterNewPassword,
margin: getMargin(top: 6),
padding: TextFormFieldPadding.PaddingT12,
textInputAction: TextInputAction.done,
@@ -193,11 +197,11 @@ class _ResetPasswordFormState extends State<ResetPasswordForm> {
},
),
errorText:
_isPasswordValid2 ? null : 'Please enter your new password',
_isPasswordValid2 ? null : AppLocalizations.of(context)!.newPasswordError,
onChanged: _validatePassword2,
validator: (value) {
if (value!.isEmpty) {
return 'Please enter your new password';
return AppLocalizations.of(context)!.newPasswordError;
}
return null;
},
@@ -207,7 +211,8 @@ class _ResetPasswordFormState extends State<ResetPasswordForm> {
Padding(
padding: getPadding(top: 19),
child: Text("Re-Enter New Password",
child: Text(
AppLocalizations.of(context)!.reEnterNewPassword,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style:
@@ -215,16 +220,17 @@ class _ResetPasswordFormState extends State<ResetPasswordForm> {
CustomTextFormField(
focusNode: FocusNode(),
controller: reEnterNewPasswordController,
hintText: "Re-Enter New Password",
hintText:
AppLocalizations.of(context)!.reEnterNewPassword,
margin: getMargin(top: 6),
padding: TextFormFieldPadding.PaddingT12,
onChanged: _validatePassword3,
validator: (value) {
if (value!.isEmpty) {
return 'Please re-enter your new password';
return AppLocalizations.of(context)!.reEnterPasswordError;
}
if (value != newPasswordController.text) {
return 'Passwords do not match';
return AppLocalizations.of(context)!.passwordsDontMatch;
}
return null;
},
@@ -241,7 +247,7 @@ class _ResetPasswordFormState extends State<ResetPasswordForm> {
},
),
errorText:
_isPasswordValid3 ? null : 'Please re-enter your new password',
_isPasswordValid3 ? null : AppLocalizations.of(context)!.reEnterPasswordError,
textInputAction: TextInputAction.done,
suffixConstraints: BoxConstraints(
maxHeight: getVerticalSize(44)),
@@ -249,7 +255,7 @@ class _ResetPasswordFormState extends State<ResetPasswordForm> {
CustomButton(
height: getVerticalSize(50),
text: "Continue",
text: AppLocalizations.of(context)!.continueBtn,
margin: getMargin(top: 24, bottom: 5),
onTap: () async {
if (oldPasswordController.text.isEmpty ||
@@ -283,7 +289,8 @@ class _ResetPasswordFormState extends State<ResetPasswordForm> {
setState(() {
isVisible=true;
issuccess=true;
responseMessage = "Password Changes Successfully";
responseMessage = AppLocalizations.of(context)!
.passwordChangedSuccess;
});
print("success");
Navigator.pushAndRemoveUntil(
@@ -294,7 +301,8 @@ class _ResetPasswordFormState extends State<ResetPasswordForm> {
} else {
setState(() {
isVisible=true;
responseMessage = "Incorrect Password";
responseMessage = AppLocalizations.of(context)!
.incorrectPassword;
});
print(response.statusCode);
}
+51 -27
View File
@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import '../../Utils/size_utils.dart';
import '../../l10n/app_localizations.dart';
import '../../theme/app_style.dart';
import '../../widgets/custom_button.dart';
import '../../widgets/custom_text_form_field.dart';
@@ -42,7 +43,8 @@ class _CreateAccountScreenState extends State<CreateAccountScreen> {
_context = context; // Store the context
return Scaffold(
appBar: AppBar(title: const Text('Create Account')),
appBar: AppBar(
title: Text(AppLocalizations.of(context)!.createAccount)),
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(16),
@@ -52,7 +54,8 @@ class _CreateAccountScreenState extends State<CreateAccountScreen> {
children: [
Padding(
padding: getPadding(top: 19),
child: Text("Company Name",
child: Text(
AppLocalizations.of(context)!.companyName,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style:
@@ -62,18 +65,20 @@ class _CreateAccountScreenState extends State<CreateAccountScreen> {
onsaved: (value) => formData['companyName'] = value,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter Company Name';
return AppLocalizations.of(context)!.pleaseEnterThis(
AppLocalizations.of(context)!.companyName);
}
return null;
},
hintText: "enter Company Name",
hintText: AppLocalizations.of(context)!.enterThis(
AppLocalizations.of(context)!.companyName),
margin: getMargin(top: 6),
padding: TextFormFieldPadding.PaddingT12,
textInputType: TextInputType.text
),
Padding(
padding: getPadding(top: 19),
child: Text("Email",
child: Text(AppLocalizations.of(context)!.email,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style:
@@ -84,20 +89,23 @@ class _CreateAccountScreenState extends State<CreateAccountScreen> {
onChanged: _validateEmail,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter Email';
return AppLocalizations.of(context)!.pleaseEnterThis(
AppLocalizations.of(context)!.email);
}else if(!_isEmailValid){
return 'Please enter a valid email';
return AppLocalizations.of(context)!.validEmailShort;
}
return null;
},
hintText: "enter Email",
hintText: AppLocalizations.of(context)!
.enterThis(AppLocalizations.of(context)!.email),
margin: getMargin(top: 6),
padding: TextFormFieldPadding.PaddingT12,
textInputType: TextInputType.text
),
Padding(
padding: getPadding(top: 19),
child: Text("Mobile Number",
child: Text(
AppLocalizations.of(context)!.mobileNumber,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style:
@@ -111,17 +119,19 @@ class _CreateAccountScreenState extends State<CreateAccountScreen> {
onsaved: (value) => formData['mobile'] = value,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter Mob No';
return AppLocalizations.of(context)!.pleaseEnterThis(
AppLocalizations.of(context)!.mobileNumber);
}
return null;
},
hintText: "enter Mobile Number",
hintText: AppLocalizations.of(context)!.enterThis(
AppLocalizations.of(context)!.mobileNumber),
margin: getMargin(top: 6),
padding: TextFormFieldPadding.PaddingT12,
),
Padding(
padding: getPadding(top: 19),
child: Text("Workspace",
child: Text(AppLocalizations.of(context)!.workspace,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style:
@@ -131,18 +141,20 @@ class _CreateAccountScreenState extends State<CreateAccountScreen> {
onsaved: (value) => formData['workspace'] = value,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter Workspace';
return AppLocalizations.of(context)!.pleaseEnterThis(
AppLocalizations.of(context)!.workspace);
}
return null;
},
hintText: "enter Workspace",
hintText: AppLocalizations.of(context)!.enterThis(
AppLocalizations.of(context)!.workspace),
margin: getMargin(top: 6),
padding: TextFormFieldPadding.PaddingT12,
textInputType: TextInputType.text
),
Padding(
padding: getPadding(top: 19),
child: Text("Gst Number",
child: Text(AppLocalizations.of(context)!.gstNumber,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style:
@@ -152,18 +164,20 @@ class _CreateAccountScreenState extends State<CreateAccountScreen> {
onsaved: (value) => formData['gstNumber'] = value,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter Gst Number';
return AppLocalizations.of(context)!.pleaseEnterThis(
AppLocalizations.of(context)!.gstNumber);
}
return null;
},
hintText: "enter Gst Number",
hintText: AppLocalizations.of(context)!.enterThis(
AppLocalizations.of(context)!.gstNumber),
margin: getMargin(top: 6),
padding: TextFormFieldPadding.PaddingT12,
textInputType: TextInputType.text
),
Padding(
padding: getPadding(top: 19),
child: Text("pancard",
child: Text(AppLocalizations.of(context)!.pancard,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style:
@@ -173,18 +187,21 @@ class _CreateAccountScreenState extends State<CreateAccountScreen> {
onsaved: (value) => formData['pancard'] = value,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter Pancard';
return AppLocalizations.of(context)!.pleaseEnterThis(
AppLocalizations.of(context)!.pancard);
}
return null;
},
hintText: "enter pancard",
hintText: AppLocalizations.of(context)!.enterThis(
AppLocalizations.of(context)!.pancard),
margin: getMargin(top: 6),
padding: TextFormFieldPadding.PaddingT12,
textInputType: TextInputType.text
),
Padding(
padding: getPadding(top: 19),
child: Text("Working",
child: Text(
AppLocalizations.of(context)!.workingField,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style:
@@ -194,11 +211,13 @@ class _CreateAccountScreenState extends State<CreateAccountScreen> {
onsaved: (value) => formData['working'] = value,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter Working';
return AppLocalizations.of(context)!.pleaseEnterThis(
AppLocalizations.of(context)!.workingField);
}
return null;
},
hintText: "enter Working",
hintText: AppLocalizations.of(context)!.enterThis(
AppLocalizations.of(context)!.workingField),
margin: getMargin(top: 6),
padding: TextFormFieldPadding.PaddingT12,
textInputType: TextInputType.text
@@ -208,7 +227,7 @@ class _CreateAccountScreenState extends State<CreateAccountScreen> {
child: CustomButton(
height: getVerticalSize(50),
width: getHorizontalSize(396),
text: "SUBMIT",
text: AppLocalizations.of(context)!.submitCaps,
margin: getMargin(top: 25),
onTap: () async {
if (_formKey.currentState!.validate()) {
@@ -234,11 +253,16 @@ class _CreateAccountScreenState extends State<CreateAccountScreen> {
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Error'),
content: Text('Account Creation Failed: $e'),
title: Text(AppLocalizations.of(context)!
.error),
content: Text(
AppLocalizations.of(context)!
.accountCreationFailed(
e.toString())),
actions: [
TextButton(
child: const Text('OK'),
child: Text(
AppLocalizations.of(context)!.ok),
onPressed: () {
Navigator.of(context).pop();
},
+54 -30
View File
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import '../../l10n/app_localizations.dart';
import 'SignUpService.dart';
class CreateUserScreen extends StatefulWidget {
@@ -26,7 +27,8 @@ class _CreateUserScreenState extends State<CreateUserScreen> {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Sign Up - Step ${_currentStep + 1}'),
title: Text(AppLocalizations.of(context)!
.signUpStep((_currentStep + 1).toString())),
),
body: Column(
children: [
@@ -46,14 +48,14 @@ class _CreateUserScreenState extends State<CreateUserScreen> {
_currentStep--;
});
},
child: const Text('Previous'),
child: Text(AppLocalizations.of(context)!.previous),
),
if (_currentStep < 2)
ElevatedButton(
onPressed: () {
_proceedToNextStep();
},
child: const Text('Next'),
child: Text(AppLocalizations.of(context)!.next),
),
],
),
@@ -125,79 +127,95 @@ class StepCreateAccountState extends State<StepCreateAccount> {
alignment: Alignment.center,
child: Column(
children: [
const Text('Step 1: Create Account'),
Text(AppLocalizations.of(context)!.step1CreateAccount),
TextFormField(
decoration: const InputDecoration(labelText: 'Company Name'),
decoration: InputDecoration(
labelText:
AppLocalizations.of(context)!.companyName),
onSaved: (value) => formData['companyName'] = value,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter Company Name';
return AppLocalizations.of(context)!.pleaseEnterThis(
AppLocalizations.of(context)!.companyName);
}
return null;
},
),
const SizedBox(height: 16),
TextFormField(
decoration: const InputDecoration(labelText: 'Email'),
decoration: InputDecoration(
labelText: AppLocalizations.of(context)!.email),
onSaved: (value) => formData['email'] = value,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter Email';
return AppLocalizations.of(context)!.pleaseEnterThis(
AppLocalizations.of(context)!.email);
}
return null;
},
),
const SizedBox(height: 16),
TextFormField(
decoration: const InputDecoration(labelText: 'Mobile No'),
decoration: InputDecoration(
labelText: AppLocalizations.of(context)!.mobileNo),
onSaved: (value) => formData['mobile'] = value,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter Mob No';
return AppLocalizations.of(context)!.pleaseEnterThis(
AppLocalizations.of(context)!.mobileNo);
}
return null;
},
),
const SizedBox(height: 16),
TextFormField(
decoration: const InputDecoration(labelText: 'Workspace'),
decoration: InputDecoration(
labelText: AppLocalizations.of(context)!.workspace),
onSaved: (value) => formData['workspace'] = value,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter Workspace';
return AppLocalizations.of(context)!.pleaseEnterThis(
AppLocalizations.of(context)!.workspace);
}
return null;
},
),
const SizedBox(height: 16),
TextFormField(
decoration: const InputDecoration(labelText: 'Gst Number'),
decoration: InputDecoration(
labelText: AppLocalizations.of(context)!.gstNumber),
onSaved: (value) => formData['gstNumber'] = value,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter Gst Number';
return AppLocalizations.of(context)!.pleaseEnterThis(
AppLocalizations.of(context)!.gstNumber);
}
return null;
},
),
const SizedBox(height: 16),
TextFormField(
decoration: const InputDecoration(labelText: 'pancard'),
decoration: InputDecoration(
labelText: AppLocalizations.of(context)!.pancard),
onSaved: (value) => formData['pancard'] = value,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter Pancard';
return AppLocalizations.of(context)!.pleaseEnterThis(
AppLocalizations.of(context)!.pancard);
}
return null;
},
),
const SizedBox(height: 16),
TextFormField(
decoration: const InputDecoration(labelText: 'Working'),
decoration: InputDecoration(
labelText:
AppLocalizations.of(context)!.workingField),
onSaved: (value) => formData['working'] = value,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter Working';
return AppLocalizations.of(context)!.pleaseEnterThis(
AppLocalizations.of(context)!.workingField);
}
return null;
},
@@ -228,12 +246,15 @@ class StepCreateAccountState extends State<StepCreateAccount> {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Error'),
content: Text('Account Creation Failed: $e'),
return AlertDialog(
title: Text(
AppLocalizations.of(context)!.error),
content: Text(AppLocalizations.of(context)!
.accountCreationFailed(e.toString())),
actions: [
TextButton(
child: const Text('OK'),
child: Text(
AppLocalizations.of(context)!.ok),
onPressed: () {
Navigator.of(context).pop();
},
@@ -246,12 +267,12 @@ class StepCreateAccountState extends State<StepCreateAccount> {
}
}
},
child: const SizedBox(
child: SizedBox(
width: double.infinity,
height: 50,
child: Center(
child: Text(
'SUBMIT',
AppLocalizations.of(context)!.submitCaps,
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
@@ -261,7 +282,9 @@ class StepCreateAccountState extends State<StepCreateAccount> {
),
),
),
if (accountId != null) Text('Selected Account ID: $accountId'),
if (accountId != null)
Text(AppLocalizations.of(context)!
.selectedAccountId(accountId!)),
],
),
);
@@ -284,7 +307,7 @@ class StepGetEmailVerificationState extends State<StepGetEmailVerification> {
Widget build(BuildContext context) {
return Container(
alignment: Alignment.center,
child: Text('Step 2: Get Email Verification'),
child: Text(AppLocalizations.of(context)!.step2EmailVerification),
);
}
}
@@ -303,7 +326,7 @@ class StepGetRegistrationState extends State<StepGetRegistration> {
Widget build(BuildContext context) {
return Container(
alignment: Alignment.center,
child: Text('Step 3: Get Registration'),
child: Text(AppLocalizations.of(context)!.step3GetRegistration),
);
}
}
@@ -313,14 +336,15 @@ class CreateAccountDialog extends StatelessWidget {
@override
Widget build(BuildContext context) {
return AlertDialog(
title: Text('Create Account'),
content: Text('Account created successfully!'),
title: Text(AppLocalizations.of(context)!.createAccount),
content:
Text(AppLocalizations.of(context)!.accountCreatedSuccess),
actions: [
ElevatedButton(
onPressed: () {
Navigator.of(context).pop('12345'); // Pass the created account ID
},
child: Text('OK'),
child: Text(AppLocalizations.of(context)!.ok),
),
],
);
@@ -4,6 +4,7 @@ import 'package:flutter/services.dart';
import '../../Utils/image_constant.dart';
import '../../Utils/size_utils.dart';
import '../../l10n/app_localizations.dart';
import '../../theme/app_style.dart';
import '../../widgets/app_bar/appbar_image.dart';
import '../../widgets/app_bar/appbar_title.dart';
@@ -126,7 +127,8 @@ class _RegistrationDetailsScreenState extends State<RegistrationDetailsScreen> {
Navigator.pop(context);
}),
centerTitle: true,
title: AppbarTitle(text: "Registration")),
title: AppbarTitle(
text: AppLocalizations.of(context)!.registration)),
//AppBar(title: const Text('Registration')),
body: SingleChildScrollView(
child: Padding(
@@ -138,7 +140,8 @@ class _RegistrationDetailsScreenState extends State<RegistrationDetailsScreen> {
children: [
Padding(
padding: getPadding(top: 19),
child: Text("First Name",
child: Text(
AppLocalizations.of(context)!.firstName,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style:
@@ -148,18 +151,20 @@ class _RegistrationDetailsScreenState extends State<RegistrationDetailsScreen> {
onsaved: (value) => formData['first_name'] = value,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter First Name';
return AppLocalizations.of(context)!.pleaseEnterThis(
AppLocalizations.of(context)!.firstName);
}
return null;
},
hintText: "enter First Name",
hintText: AppLocalizations.of(context)!.enterThis(
AppLocalizations.of(context)!.firstName),
margin: getMargin(top: 6),
padding: TextFormFieldPadding.PaddingT12,
textInputType: TextInputType.text
),
Padding(
padding: getPadding(top: 19),
child: Text("Last Name",
child: Text(AppLocalizations.of(context)!.lastName,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style:
@@ -169,11 +174,13 @@ class _RegistrationDetailsScreenState extends State<RegistrationDetailsScreen> {
onsaved: (value) => formData['last_name'] = value,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter Last Name';
return AppLocalizations.of(context)!.pleaseEnterThis(
AppLocalizations.of(context)!.lastName);
}
return null;
},
hintText: "enter Last Name",
hintText: AppLocalizations.of(context)!.enterThis(
AppLocalizations.of(context)!.lastName),
margin: getMargin(top: 6),
padding: TextFormFieldPadding.PaddingT12,
textInputType: TextInputType.text
@@ -181,7 +188,8 @@ class _RegistrationDetailsScreenState extends State<RegistrationDetailsScreen> {
Padding(
padding: getPadding(top: 19),
child: Text("Mobile Number",
child: Text(
AppLocalizations.of(context)!.mobileNumber,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style:
@@ -195,33 +203,38 @@ class _RegistrationDetailsScreenState extends State<RegistrationDetailsScreen> {
onsaved: (value) => formData['mob_no'] = value,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter Mobile Number';
return AppLocalizations.of(context)!.pleaseEnterThis(
AppLocalizations.of(context)!.mobileNumber);
}
return null;
},
hintText: "enter Mobile Number",
hintText: AppLocalizations.of(context)!.enterThis(
AppLocalizations.of(context)!.mobileNumber),
margin: getMargin(top: 6),
padding: TextFormFieldPadding.PaddingT12,
),
Padding(
padding: getPadding(top: 19),
child: Text("New Password",
child: Text(AppLocalizations.of(context)!.newPassword,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style:
AppStyle.txtGilroyMedium16Bluegray900)),
CustomTextFormField(
focusNode: _newPasswordNode,
hintText: "New Password",
hintText:
AppLocalizations.of(context)!.newPassword,
margin: getMargin(top: 6),
padding: TextFormFieldPadding.PaddingT12,
textInputAction: TextInputAction.done,
textInputType:TextInputType.visiblePassword,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter Password';
return AppLocalizations.of(context)!.pleaseEnterThis(
AppLocalizations.of(context)!.password);
}else if(!_isPasswordValid){
return 'Please enter a valid password';
return AppLocalizations.of(context)!
.validPasswordShort;
}
return null;
},
@@ -248,21 +261,24 @@ class _RegistrationDetailsScreenState extends State<RegistrationDetailsScreen> {
Padding(
padding: getPadding(top: 19),
child: Text("Confirm Password",
child: Text(
AppLocalizations.of(context)!.confirmPassword,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style:
AppStyle.txtGilroyMedium16Bluegray900)),
CustomTextFormField(
focusNode: _confirmPasswordNode,
hintText: "Confirm Password",
hintText: AppLocalizations.of(context)!
.confirmPassword,
margin: getMargin(top: 6),
padding: TextFormFieldPadding.PaddingT12,
textInputAction: TextInputAction.done,
textInputType:TextInputType.visiblePassword,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter Password';
return AppLocalizations.of(context)!.pleaseEnterThis(
AppLocalizations.of(context)!.password);
}
return _validatePasswordMatch(value);
},
@@ -289,8 +305,9 @@ class _RegistrationDetailsScreenState extends State<RegistrationDetailsScreen> {
Row(
children: [
const Expanded(
child: Text('Add Account'),
Expanded(
child: Text(
AppLocalizations.of(context)!.addAccount),
),
IconButton(
onPressed: () async {
@@ -1,5 +1,7 @@
import 'package:flutter/material.dart';
import '../../l10n/app_localizations.dart';
class StepGetEmailVerification extends StatefulWidget {
final LabeledGlobalKey<FormState> emailPasswordFormKey;
// final Function updateSignUpDetails;
@@ -67,7 +69,7 @@ class _StepGetEmailVerificationState extends State<StepGetEmailVerification> {
// validator: _validateNewPassword,
autofocus: mounted,
autocorrect: false,
decoration: const InputDecoration(
decoration: InputDecoration(
fillColor: Colors.white,
border: InputBorder.none,
focusedBorder: InputBorder.none,
@@ -76,7 +78,7 @@ class _StepGetEmailVerificationState extends State<StepGetEmailVerification> {
disabledBorder: InputBorder.none,
contentPadding:
EdgeInsets.only(left: 15, bottom: 11, top: 11, right: 15),
hintText: "email",
hintText: AppLocalizations.of(context)!.email,
hintStyle: TextStyle(fontSize: 16, color: Color(0xFF929BAB)),
),
style: const TextStyle(fontSize: 16, color: Color(0xFF929BAB)),
@@ -1,5 +1,7 @@
import 'package:flutter/material.dart';
import '../../l10n/app_localizations.dart';
class StepGetRegistration extends StatefulWidget {
final LabeledGlobalKey<FormState> bankAccountFormKey;
// final Function updateSignUpDetails;
@@ -94,7 +96,7 @@ class _StepGetRegistrationState extends State<StepGetRegistration> {
widget.finalStepProccessing();
}
},
decoration: const InputDecoration(
decoration: InputDecoration(
fillColor: Colors.white,
border: InputBorder.none,
focusedBorder: InputBorder.none,
@@ -103,7 +105,7 @@ class _StepGetRegistrationState extends State<StepGetRegistration> {
disabledBorder: InputBorder.none,
contentPadding:
EdgeInsets.only(left: 15, bottom: 11, top: 11, right: 15),
hintText: "first name",
hintText: AppLocalizations.of(context)!.firstName,
hintStyle: TextStyle(fontSize: 16, color: Color(0xFF929BAB)),
),
style: const TextStyle(fontSize: 16, color: Color(0xFF929BAB)),
@@ -153,7 +155,7 @@ class _StepGetRegistrationState extends State<StepGetRegistration> {
widget.finalStepProccessing();
}
},
decoration: const InputDecoration(
decoration: InputDecoration(
fillColor: Colors.white,
border: InputBorder.none,
focusedBorder: InputBorder.none,
@@ -162,7 +164,7 @@ class _StepGetRegistrationState extends State<StepGetRegistration> {
disabledBorder: InputBorder.none,
contentPadding:
EdgeInsets.only(left: 15, bottom: 11, top: 11, right: 15),
hintText: "last name",
hintText: AppLocalizations.of(context)!.lastName,
hintStyle: TextStyle(fontSize: 16, color: Color(0xFF929BAB)),
),
style: const TextStyle(fontSize: 16, color: Color(0xFF929BAB)),
@@ -212,7 +214,7 @@ class _StepGetRegistrationState extends State<StepGetRegistration> {
widget.finalStepProccessing();
}
},
decoration: const InputDecoration(
decoration: InputDecoration(
fillColor: Colors.white,
border: InputBorder.none,
focusedBorder: InputBorder.none,
@@ -221,7 +223,7 @@ class _StepGetRegistrationState extends State<StepGetRegistration> {
disabledBorder: InputBorder.none,
contentPadding:
EdgeInsets.only(left: 15, bottom: 11, top: 11, right: 15),
hintText: "mob no",
hintText: AppLocalizations.of(context)!.mobileNumber,
hintStyle: TextStyle(fontSize: 16, color: Color(0xFF929BAB)),
),
style: const TextStyle(fontSize: 16, color: Color(0xFF929BAB)),
@@ -270,7 +272,7 @@ class _StepGetRegistrationState extends State<StepGetRegistration> {
widget.finalStepProccessing();
}
},
decoration: const InputDecoration(
decoration: InputDecoration(
fillColor: Colors.white,
border: InputBorder.none,
focusedBorder: InputBorder.none,
@@ -279,7 +281,7 @@ class _StepGetRegistrationState extends State<StepGetRegistration> {
disabledBorder: InputBorder.none,
contentPadding:
EdgeInsets.only(left: 15, bottom: 11, top: 11, right: 15),
hintText: "password",
hintText: AppLocalizations.of(context)!.password,
hintStyle: TextStyle(fontSize: 16, color: Color(0xFF929BAB)),
),
style: const TextStyle(fontSize: 16, color: Color(0xFF929BAB)),
@@ -329,7 +331,7 @@ class _StepGetRegistrationState extends State<StepGetRegistration> {
widget.finalStepProccessing();
}
},
decoration: const InputDecoration(
decoration: InputDecoration(
fillColor: Colors.white,
border: InputBorder.none,
focusedBorder: InputBorder.none,
@@ -338,7 +340,8 @@ class _StepGetRegistrationState extends State<StepGetRegistration> {
disabledBorder: InputBorder.none,
contentPadding:
EdgeInsets.only(left: 15, bottom: 11, top: 11, right: 15),
hintText: "confirmPassword",
hintText:
AppLocalizations.of(context)!.confirmPassword,
hintStyle: TextStyle(fontSize: 16, color: Color(0xFF929BAB)),
),
style: const TextStyle(fontSize: 16, color: Color(0xFF929BAB)),
+41 -21
View File
@@ -6,6 +6,7 @@ import 'package:pinput/pinput.dart';
import '../../Utils/color_constants.dart';
import '../../Utils/image_constant.dart';
import '../../Utils/size_utils.dart';
import '../../l10n/app_localizations.dart';
import '../../theme/app_style.dart';
import '../../widgets/app_bar/appbar_image.dart';
import '../../widgets/app_bar/appbar_title.dart';
@@ -101,7 +102,8 @@ class _SignUpUserScreenState extends State<SignUpUserScreenNew> {
Navigator.pop(context);
}),
centerTitle: true,
title: AppbarTitle(text: "Create User")),
title: AppbarTitle(
text: AppLocalizations.of(context)!.createUser)),
body: Builder(
builder: (BuildContext context) {
return SingleChildScrollView(
@@ -120,7 +122,7 @@ class _SignUpUserScreenState extends State<SignUpUserScreenNew> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text("Email",
Text(AppLocalizations.of(context)!.email,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle.txtGilroyMedium16Bluegray900),
@@ -129,17 +131,21 @@ class _SignUpUserScreenState extends State<SignUpUserScreenNew> {
controller: emailcontroller,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter Email';
return AppLocalizations.of(context)!
.pleaseEnterThis(
AppLocalizations.of(context)!
.email);
}
return null;
},
hintText: "Enter Your Email",
hintText: AppLocalizations.of(context)!
.enterYourEmail,
margin: getMargin(top: 7),
textInputType: TextInputType.emailAddress),
CustomButton(
height: getVerticalSize(50),
width: getHorizontalSize(396),
text: "Send OTP",
text: AppLocalizations.of(context)!.sendOtp,
margin: getMargin(top: 25),
onTap: () async {
@@ -158,8 +164,9 @@ class _SignUpUserScreenState extends State<SignUpUserScreenNew> {
moveToNextStep();
} catch (e) {
showErrorMessage(
'Failed to send OTP: $e');
showErrorMessage(AppLocalizations.of(
context)!
.failedToSendOtp(e.toString()));
}
}
@@ -226,7 +233,8 @@ class _SignUpUserScreenState extends State<SignUpUserScreenNew> {
top: 29,
),
child: Text(
"Email Verification",
AppLocalizations.of(context)!
.emailVerification,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle.txtGilroySemiBold24,
@@ -242,7 +250,8 @@ class _SignUpUserScreenState extends State<SignUpUserScreenNew> {
right: 46,
),
child: Text(
"A mail with a 6-digit verification code was just sent to ${emailcontroller.text}",
AppLocalizations.of(context)!.otpSentToEmail(
emailcontroller.text),
maxLines: null,
textAlign: TextAlign.center,
style: AppStyle.txtGilroyMedium16,
@@ -276,7 +285,7 @@ class _SignUpUserScreenState extends State<SignUpUserScreenNew> {
height: getVerticalSize(
50,
),
text: "Next",
text: AppLocalizations.of(context)!.next,
margin: getMargin(
top: 40,
),
@@ -287,9 +296,12 @@ class _SignUpUserScreenState extends State<SignUpUserScreenNew> {
moveToNextStep();
showSuccessMessage(
'Email verified successfully');
AppLocalizations.of(context)!
.emailVerifiedSuccess);
} catch (e) {
showErrorMessage('Failed to verify OTP: $e');
showErrorMessage(AppLocalizations.of(
context)!
.failedToVerifyOtp(e.toString()));
}
},
),
@@ -300,19 +312,24 @@ class _SignUpUserScreenState extends State<SignUpUserScreenNew> {
await Future.delayed(
const Duration(seconds: 5));
showSuccessMessage('OTP RESEND');
showSuccessMessage(AppLocalizations.of(
context)!
.otpResent);
} catch (e) {
showErrorMessage(
'Failed to resend OTP: $e');
showErrorMessage(AppLocalizations.of(
context)!
.failedToResendOtp(e.toString()));
}
},
child: Padding(
padding: getPadding(top: 3),
child: Text("Forgot Password?",
child: Text(
AppLocalizations.of(context)!
.forgotPasswordLink,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style:
AppStyle.txtGilroyMedium14BlueA700)),
style: AppStyle
.txtGilroyMedium14BlueA700)),
),
@@ -330,7 +347,8 @@ class _SignUpUserScreenState extends State<SignUpUserScreenNew> {
top: 2,
),
child: Text(
"Didn’t get the code?",
AppLocalizations.of(context)!
.didntGetCode,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle.txtGilroyMedium16,
@@ -342,7 +360,8 @@ class _SignUpUserScreenState extends State<SignUpUserScreenNew> {
bottom: 1,
),
child: Text(
"Resend",
AppLocalizations.of(context)!
.resend,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle.txtGilroySemiBold16BlueA700,
@@ -364,7 +383,8 @@ class _SignUpUserScreenState extends State<SignUpUserScreenNew> {
height: getVerticalSize(
50,
),
text: "Go to Registration Details",
text: AppLocalizations.of(context)!
.goToRegistrationDetails,
margin: getMargin(
top: 40,
),
+22 -13
View File
@@ -3,6 +3,7 @@ import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import '../../hadwin_components.dart';
import '../../l10n/app_localizations.dart';
import '../../utilities/slide_right_route.dart';
import '../Login Screen/login_screen.dart';
import 'StepGetEmailVerification.dart';
@@ -151,12 +152,13 @@ class _SignUpStepsState extends State<SignUpSteps> {
const EdgeInsets.symmetric(vertical: 3.6, horizontal: 10),
child: RichText(
text: TextSpan(
text: 'By signing up you are agreeing to the ',
text: AppLocalizations.of(context)!.termsAgreePrefix,
style: const TextStyle(
fontSize: 14, color: Color(0xFF929BAB)),
children: <InlineSpan>[
TextSpan(
text: 'Terms & Conditions',
text: AppLocalizations.of(context)!
.termsConditions,
style: const TextStyle(
fontSize: 14, color: Colors.blue),
recognizer: TapGestureRecognizer()
@@ -167,19 +169,23 @@ class _SignUpStepsState extends State<SignUpSteps> {
() => Navigator.push(
context,
SlideRightRoute(
page: const HadWinMarkdownViewer(
screenName: "Terms & Conditons",
page: HadWinMarkdownViewer(
screenName:
AppLocalizations.of(context)!
.termsConditions,
urlRequested:
'https://raw.githubusercontent.com/brownboycodes/HADWIN/master/docs/TERMS_AND_CONDITIONS.md',
))));
}),
const TextSpan(
text: ' and our ',
TextSpan(
text:
AppLocalizations.of(context)!.termsAndOur,
style:
TextStyle(fontSize: 14, color: Color(0xFF929BAB)),
),
TextSpan(
text: 'End User License Agreement',
text:
AppLocalizations.of(context)!.eula,
style: const TextStyle(
fontSize: 14, color: Colors.blue),
recognizer: TapGestureRecognizer()
@@ -190,9 +196,10 @@ class _SignUpStepsState extends State<SignUpSteps> {
() => Navigator.push(
context,
SlideRightRoute(
page: const HadWinMarkdownViewer(
page: HadWinMarkdownViewer(
screenName:
"End User License Agreement",
AppLocalizations.of(context)!
.eula,
urlRequested:
'https://raw.githubusercontent.com/brownboycodes/HADWIN/master/docs/END_USER_LICENSE_AGREEMENT.md',
))));
@@ -311,8 +318,9 @@ class _SignUpStepsState extends State<SignUpSteps> {
if (stepHasError[_currentStep] == false && mounted) {
ScaffoldMessenger.of(context)
.showSnackBar(
const SnackBar(
content: Text('Processing'),
SnackBar(
content:
Text(AppLocalizations.of(context)!.processingPlain),
backgroundColor: Colors.blue,
// onVisible: _tryRegistering,
),
@@ -487,8 +495,9 @@ class _SignUpStepsState extends State<SignUpSteps> {
print('Account succesfully created');
ScaffoldMessenger.of(context)
.showSnackBar(const SnackBar(
content: Text("Account Created Successfully"),
.showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context)!
.accountCreatedSuccess),
backgroundColor: Colors.green))
.closed
.then((value) => Navigator.of(context).pushAndRemoveUntil(
@@ -1,5 +1,7 @@
import 'package:flutter/material.dart';
import '../../l10n/app_localizations.dart';
class StepCreateAccount extends StatefulWidget {
final LabeledGlobalKey<FormState> nameAddressFormKey;
// final Function updateSignUpDetails;
@@ -99,7 +101,7 @@ class _StepCreateAccountState extends State<StepCreateAccount> {
validator: _validatecompanyName,
autofocus: mounted,
autocorrect: false,
decoration: const InputDecoration(
decoration: InputDecoration(
fillColor: Colors.white,
border: InputBorder.none,
focusedBorder: InputBorder.none,
@@ -108,7 +110,8 @@ class _StepCreateAccountState extends State<StepCreateAccount> {
disabledBorder: InputBorder.none,
contentPadding: EdgeInsets.only(
left: 15, bottom: 11, top: 11, right: 15),
hintText: "Company_Name",
hintText:
AppLocalizations.of(context)!.companyName,
hintStyle:
TextStyle(fontSize: 16, color: Color(0xFF929BAB)),
),
@@ -155,7 +158,7 @@ class _StepCreateAccountState extends State<StepCreateAccount> {
// validator: _validatelastName,
autofocus: mounted,
autocorrect: false,
decoration: const InputDecoration(
decoration: InputDecoration(
fillColor: Colors.white,
border: InputBorder.none,
focusedBorder: InputBorder.none,
@@ -164,7 +167,8 @@ class _StepCreateAccountState extends State<StepCreateAccount> {
disabledBorder: InputBorder.none,
contentPadding: EdgeInsets.only(
left: 15, bottom: 11, top: 11, right: 15),
hintText: "email",
hintText:
AppLocalizations.of(context)!.email,
hintStyle:
TextStyle(fontSize: 16, color: Color(0xFF929BAB)),
),
@@ -213,7 +217,7 @@ class _StepCreateAccountState extends State<StepCreateAccount> {
// validator: _validatemobno,
autofocus: mounted,
autocorrect: false,
decoration: const InputDecoration(
decoration: InputDecoration(
fillColor: Colors.white,
border: InputBorder.none,
focusedBorder: InputBorder.none,
@@ -222,7 +226,8 @@ class _StepCreateAccountState extends State<StepCreateAccount> {
disabledBorder: InputBorder.none,
contentPadding: EdgeInsets.only(
left: 15, bottom: 11, top: 11, right: 15),
hintText: "mob_no",
hintText: AppLocalizations.of(context)!
.mobileNumber,
hintStyle:
TextStyle(fontSize: 16, color: Color(0xFF929BAB)),
),
@@ -271,7 +276,7 @@ class _StepCreateAccountState extends State<StepCreateAccount> {
// validator: _validatelastName,
autofocus: mounted,
autocorrect: false,
decoration: const InputDecoration(
decoration: InputDecoration(
fillColor: Colors.white,
border: InputBorder.none,
focusedBorder: InputBorder.none,
@@ -280,7 +285,8 @@ class _StepCreateAccountState extends State<StepCreateAccount> {
disabledBorder: InputBorder.none,
contentPadding: EdgeInsets.only(
left: 15, bottom: 11, top: 11, right: 15),
hintText: "workspace",
hintText:
AppLocalizations.of(context)!.workspace,
hintStyle:
TextStyle(fontSize: 16, color: Color(0xFF929BAB)),
),
@@ -327,7 +333,7 @@ class _StepCreateAccountState extends State<StepCreateAccount> {
// validator: _validatelastName,
autofocus: mounted,
autocorrect: false,
decoration: const InputDecoration(
decoration: InputDecoration(
fillColor: Colors.white,
border: InputBorder.none,
focusedBorder: InputBorder.none,
@@ -336,7 +342,8 @@ class _StepCreateAccountState extends State<StepCreateAccount> {
disabledBorder: InputBorder.none,
contentPadding: EdgeInsets.only(
left: 15, bottom: 11, top: 11, right: 15),
hintText: "gst number",
hintText:
AppLocalizations.of(context)!.gstNumber,
hintStyle:
TextStyle(fontSize: 16, color: Color(0xFF929BAB)),
),
@@ -383,7 +390,7 @@ class _StepCreateAccountState extends State<StepCreateAccount> {
// validator: _validatelastName,
autofocus: mounted,
autocorrect: false,
decoration: const InputDecoration(
decoration: InputDecoration(
fillColor: Colors.white,
border: InputBorder.none,
focusedBorder: InputBorder.none,
@@ -392,7 +399,8 @@ class _StepCreateAccountState extends State<StepCreateAccount> {
disabledBorder: InputBorder.none,
contentPadding: EdgeInsets.only(
left: 15, bottom: 11, top: 11, right: 15),
hintText: "pancard",
hintText:
AppLocalizations.of(context)!.pancard,
hintStyle:
TextStyle(fontSize: 16, color: Color(0xFF929BAB)),
),
@@ -439,7 +447,7 @@ class _StepCreateAccountState extends State<StepCreateAccount> {
// validator: _validatelastName,
autofocus: mounted,
autocorrect: false,
decoration: const InputDecoration(
decoration: InputDecoration(
fillColor: Colors.white,
border: InputBorder.none,
focusedBorder: InputBorder.none,
@@ -448,7 +456,8 @@ class _StepCreateAccountState extends State<StepCreateAccount> {
disabledBorder: InputBorder.none,
contentPadding: EdgeInsets.only(
left: 15, bottom: 11, top: 11, right: 15),
hintText: "working",
hintText: AppLocalizations.of(context)!
.workingField,
hintStyle:
TextStyle(fontSize: 16, color: Color(0xFF929BAB)),
),