Przeglądaj źródła

fix: safe area some arabic

Masarifyuli 3 miesięcy temu
rodzic
commit
38a030cc4d

+ 331 - 0
assets/lang/ar.json

@@ -0,0 +1,331 @@
+{
+  "account": "الحساب",
+  "addNote": "أضف ملاحظة",
+  "addNoteCancel": "أضف ملاحظة الإلغاء",
+  "all": "الكل",
+  "anyNote": "هل هناك ملاحظة للموظف؟",
+  "appointment": "موعد",
+  "attach": "أرفق صورة",
+  "buttonCancel": "إلغاء المهمة",
+  "buttonLogin": "تسجيل الدخول",
+  "buttonNo": "لا",
+  "buttonResubmit": "إعادة الإرسال",
+  "buttonScan": "مسح رمز QR",
+  "buttonSendEmergency": "إرسال طارئ",
+  "buttonSendComplaint": "إرسال شكوى",
+  "buttonSendRequest": "إرسال طلب",
+  "buttonYes": "نعم",
+  "buttonSure": "نعم، بالتأكيد",
+  "buttonBack": "رجوع",
+  "canceledBy": "تم الإلغاء بواسطة",
+  "category": "الفئة",
+  "scope": "النطاق",
+  "changeScope": "تغيير النطاق",
+  "chatClosed": "تم إغلاق هذه المحادثة.",
+  "chooseService": "اختر الخدمة التي تريدها",
+  "complaintText": "ما هي المشكلة؟ دع الخبراء يتعاملون معها.",
+  "complaint": "شكوى",
+  "defaultLocation": "الموقع الافتراضي",
+  "detail": "تفاصيل",
+  "disatisfied": "غير راضٍ",
+  "emergencyText": "كل الأمور العاجلة التي يجب التعامل معها فوراً.",
+  "emergency": "طارئ",
+  "forum": "منتدى",
+  "frequentlyText": "الطلبات المتكررة تم جمعها هنا.",
+  "frequently": "مطلوب بشكل متكرر",
+  "frequentlyTitle": "مطلوب بشكل متكرر",
+  "frequentlyTitleText": "البلاغات المتكررة",
+  "history": "السجل",
+  "lessSatisfied": "راضٍ بشكل أقل",
+  "location": "الموقع",
+  "logout": "تسجيل الخروج",
+  "menuAccount": "الحساب",
+  "menuHistory": "السجل",
+  "menuService": "الخدمة",
+  "menuHome": "الرئيسية",
+  "message": "رسالة",
+  "note": "ملاحظة",
+  "passwordEmpty": "كلمة المرور لا يمكن أن تكون فارغة",
+  "password": "كلمة المرور",
+  "phoneNumber": "رقم الهاتف",
+  "placeholderLocation": "اكتب الموقع",
+  "placeholderNote": "اكتب ملاحظة",
+  "rateMission": "قيّم هذه المهمة",
+  "reallyPleased": "راضٍ جداً",
+  "requestText2": "ما هو الطلب؟",
+  "requestDesc": "إذا كنت بحاجة إلى مساعدة، لا تتردد.",
+  "requestTitle": "ما نوع المساعدة التي تحتاجها؟",
+  "request": "طلب",
+  "satisfactionAsk": "هل أنت راضٍ؟",
+  "satisfied": "راضٍ",
+  "scanQr": "يرجى مسح رمز QR للبدء باستخدام التطبيق.",
+  "serialNumber": "الرقم التسلسلي",
+  "servantGroup": "مجموعة البلاغات",
+  "servant": "المنفذ",
+  "service": "الخدمة",
+  "specifyAnotherLocation": "أنا في موقع آخر",
+  "specifyLocation": "حدد الموقع",
+  "startDoing": "ابدأ التنفيذ",
+  "stateCancel": "إلغاء",
+  "stateCanceled": "تم الإلغاء",
+  "stateDone": "تم التنفيذ",
+  "stateFinish": "تم الانتهاء",
+  "stateQueue": "في الانتظار",
+  "stateRequested": "تم الطلب",
+  "state": "الحالة",
+  "sure": "هل أنت متأكد؟",
+  "switch": "تبديل",
+  "system": "النظام",
+  "textCancel": "إلغاء",
+  "textHistory": "البلاغات التي قمت بها",
+  "textLogout": "لن تتمكن من تلقي الإشعارات أو إنشاء البلاغات أو القيام بأنشطة أخرى. هل تريد الخروج؟",
+  "textResubmit": "ستقوم بإعادة إرسال هذا البلاغ إلى الموظف.",
+  "ticketNumber": "رقم التذكرة",
+  "timeline": "الجدول الزمني",
+  "today": "اليوم",
+  "unrated": "لم يتم تقييم هذه المهمة بعد",
+  "userEmpty": "اسم المستخدم لا يمكن أن يكون فارغاً",
+  "userId": "اسم المستخدم",
+  "version": "الإصدار",
+  "verySatisfied": "راضٍ جداً",
+  "whatComplain": "ما هي الشكوى؟",
+  "whatHappen": "ماذا حدث؟",
+  "whatNext": "ابقَ هادئاً. ما هي المعلومات التالية؟",
+  "whatProblem": "ما هي المشكلة؟",
+  "writeMessage": "اكتب رسالة",
+  "yesterday": "أمس",
+  "language": "اللغة",
+  "bahasa": "الإندونيسية",
+  "english": "الإنجليزية",
+  "japanese": "اليابانية",
+  "korean": "الكورية",
+  "chinese": "الصينية",
+  "chooseLanguage": "اختر اللغة",
+  "rate": "التقييم",
+  "rated": "تم تقديم التقييم.",
+  "rateText": "أنت [satisfaction] بشأن هذه المهمة.",
+  "settingPassword": "تغيير كلمة المرور",
+  "oldPassword": "كلمة المرور القديمة",
+  "newPassword": "كلمة المرور الجديدة",
+  "confirmPassword": "تأكيد كلمة المرور الجديدة",
+  "buttonSave": "احفظ كلمة المرور الجديدة",
+  "settingPasswordText": "قم بإعداد كلمة المرور هنا",
+  "autoResponseText": "سيتم الرد على طلبك من قبل النظام قريباً.",
+  "reply": "رد",
+  "selectPicture": "اختر وسائط",
+  "fromGallery": "من المعرض",
+  "fromCamera": "التقاط صورة",
+  "sendPicture": "أرسل صورة",
+  "seeAttachment": "عرض المرفق",
+  "confirmCancel": "هل أنت متأكد من الإلغاء؟",
+  "selectDate": "اختر التاريخ",
+  "lengthMax": "الحد الأقصى لطول الملاحظة هو 128 حرفاً.",
+  "locRequired": "الموقع لا يمكن أن يكون فارغاً.",
+  "idRequired": "المعرف لا يمكن أن يكون فارغاً.",
+  "dateRequired": "التاريخ لا يمكن أن يكون فارغاً.",
+  "sendLater": "أرسل لاحقاً",
+  "thank": "شكراً لك",
+  "pleaseWait": "يرجى الانتظار",
+  "sendSuccess": "تم الإرسال بنجاح",
+  "followUp": "سيقوم الموظف بمتابعة الأمر قريباً.",
+  "okGot": "حسناً، فهمت",
+  "okWait": "حسناً، سأنتظر",
+  "errorConnection": "خطأ في الاتصال. حاول مرة أخرى لاحقاً.",
+  "noInternet": "أوه، لا يوجد اتصال بالإنترنت.",
+  "invalidLogin": "اسم المستخدم أو كلمة المرور غير صحيحة.",
+  "invalidPhone": "رقم الهاتف غير مسجل.",
+  "expAccount": "انتهت صلاحية الحساب.",
+  "errorServer": "حدث خطأ في الخادم. حاول مرة أخرى لاحقاً.",
+  "accessDenied": "تم رفض الوصول",
+  "licenseProblem": "لا يمكن استخدام التطبيق بسبب مشكلة في الترخيص.",
+  "invalidVersion": "إصدار التطبيق غير متوافق",
+  "sugestVersion": "استخدم التطبيق بالإصدار",
+  "currentVersion": "إصدار التطبيق المثبت هو",
+  "contactAdmin": "يرجى الاتصال بالمسؤول لمزيد من المعلومات.",
+  "pressAgain": "اضغط مرة أخرى للخروج.",
+  "notFound": "لم يتم العثور على البيانات.",
+  "notFound2": "ما تبحث عنه غير موجود هنا..!",
+  "noInternetTitle": "لا يوجد اتصال بالإنترنت.",
+  "noInternetDesc": "تحقق من اتصال الإنترنت لديك. سنكمل لاحقاً!",
+  "errorConnectTitle": "فشل الاتصال بالخادم.",
+  "errorConnectDesc": "اسأل المسؤول، يجب أن تكون قادراً على الاتصال بالخادم.",
+  "errorServerTitle": "هناك مشكلة في الخادم.",
+  "errorServerDesc": "لا داعي للذعر، نحن نعمل بجد لضمان استقرار الأمور.",
+  "invalidAccountTitle": "الحساب غير مسجل.",
+  "invalidAccountDesc": "أوه! لا يمكن التحقق من حسابك. يرجى سؤال المسؤول.",
+  "expAccountTitle": "انتهت صلاحية الحساب.",
+  "expAccountDesc": "لا يمكنك الدخول إلى التطبيق لأن حسابك منتهي الصلاحية. إذا كنت تعتقد أن هذا خطأ، اتصل بالمسؤول فوراً.",
+  "inProcess": "قيد المعالجة",
+  "policy": "سياسة الخصوصية",
+  "info": "معلومات إضافية",
+  "refresh": "تحديث",
+  "messageCamPermission": "تم رفض الوصول إلى الكاميرا. يرجى السماح لتطبيق TelMessenger بالوصول إلى الكاميرا من خلال إعدادات الجهاز.",
+  "messageInvalidCode": "الرمز غير صالح. يرجى الاتصال بالمسؤول.",
+  "messagePassChanged": "تم تغيير كلمة المرور بنجاح.",
+  "wrongOldPass": "كلمة المرور القديمة غير صحيحة.",
+  "checkNewPass": "يرجى التحقق من كلمة المرور الجديدة.",
+  "cannotEmpty": "لا يمكن أن تكون البيانات فارغة.",
+  "deletedMessage": "تم حذف هذه الرسالة.",
+  "resend": "إعادة الإرسال",
+  "delete": "حذف",
+  "alreadyUsePass": "لا يمكن استخدام كلمة المرور هذه، جرب كلمة أخرى.",
+  "notFoundImg": "لم يتم العثور على الصورة",
+  "notFoundWorktime": "لم يتم العثور على وقت العمل. يرجى الاتصال بالمسؤول.",
+  "seeAll": "عرض الكل",
+  "quickAction": "إجراء سريع",
+  "quickDesc": "لتسريع طلبك.",
+  "times": " مرات",
+  "search": "بحث",
+  "searchAsk": "ابحث...",
+  "helpHint": "جرب كتابة مشكلتك...",
+  "inProgress": " طلبك قيد المعالجة.",
+  "currentActiveText": "بلاغك الذي لا يزال قيد المعالجة",
+  "photo": "صورة",
+  "selectRecipient": "اختر المستلم",
+  "composeMessage": "إنشاء رسالة",
+  "to": "إلى",
+  "addAttachment": "إضافة مرفق",
+  "editAttachment": "تعديل المرفق",
+  "unsupportedFile": "تنسيق الملف غير مدعوم",
+  "pdfFile": "ملف PDF",
+  "other": "أخرى",
+  "noMessageText": "لا توجد رسائل معروضة.",
+  "noDataText": "لا توجد بيانات للعرض.",
+  "noPIDText": "لم يتم العثور على رمز الوصول.",
+  "noPIDText2": "احصل على رمز الوصول من خلال مسح رمز QR أو عبر الرابط المقدم من صاحب ترخيص TelMessenger.",
+  "loading": "جارٍ التحميل...",
+  "backToLogin": "العودة إلى صفحة تسجيل الدخول",
+  "deleteHistory": "حذف سجل البيانات",
+  "deleteHistoryConfirm": "هل أنت متأكد أنك تريد حذف هذه البيانات؟",
+  "couldnotDelete": "لا يمكن حذف هذه البيانات.",
+  "allInformants": "جميع المبلغين",
+  "welcome": "مرحباً بك",
+  "createNewPassText": "يرجى إنشاء كلمة مرور جديدة قبل البدء باستخدام التطبيق.",
+  "description": "الوصف",
+  "sorry": "عذراً..!",
+  "outOfWorkTime": "بلاغك حالياً خارج وقت عمل المنفذ.",
+  "willResponse": "سيعودون في: ",
+  "canNotCancel1": "لا يمكن إلغاء هذا البلاغ بعد أن بدأ المنفذ في تنفيذه.",
+  "canNotCancel2": "لا يمكن إلغاء هذا البلاغ.",
+  "priorityHigh": "عالية",
+  "priorityLow": "منخفضة",
+  "priorityNormal": "عادية",
+  "priority": "الأولوية",
+  "reported": "تم الإبلاغ",
+  "escalationNoteBySystem": "تعيين",
+  "finishAttachment": "مرفق الإنجاز",
+  "pleaseScan": "يرجى مسح رمز QR",
+  "mustScan": "يجب عليك مسح رمز QR لإعادة الإبلاغ.",
+  "changeCodeMsg": "سيتم الاتصال بـ <company_name>. هل ترغب في المتابعة؟",
+  "currentServer": "الخادم الحالي",
+  "destinationServer": "الخادم المستهدف",
+  "textContinue": "متابعة",
+  "transferNoteBySystem": "تحويل",
+  "activity": "نشاط",
+  "image": "صورة",
+  "titlePassOld": "أدخل كلمة المرور القديمة",
+  "titlePassNew": "سيتم استبدال كلمة المرور القديمة بالجديدة.",
+  "setting": "الإعدادات",
+  "more": "المزيد",
+  "topMenu": "القائمة الرئيسية",
+  "availableMenu": "القائمة المتاحة",
+  "customize": "تخصيص",
+  "done": "تم",
+  "ongoing": "جارٍ التنفيذ",
+  "maxMenu": "الحد الأقصى ٧ قوائم.",
+  "searchIn": "ابحث في",
+  "yourLocation": "موقعك",
+  "addImage": "هل تريد إضافة صورة؟",
+  "addImageMsg": "يمكنك إرسال صورة كدليل للمنفذ.",
+  "removeImageMsg": "لا أعتقد أن هناك حاجة. احذف الصورة فقط.",
+  "sendingOpt": "خيارات الإرسال",
+  "sendingOptMsg": "هل ترغب في الإرسال كطلب مجدول أم فوراً؟",
+  "scheduled": "جدولة",
+  "sendNow": "أرسل الآن",
+  "scheduledMsg": "* جدولة = سيتم إرسال الطلب في الوقت الذي تحدده في الملاحظة.",
+  "reqSuccessMsg": "يرجى الانتظار. يتم الآن معالجة طلبك.",
+  "noImgAttach": "لا توجد صورة مرفقة.",
+  "btnWait": "حسناً، سأنتظر",
+  "rateReq": "قيّم طلبك",
+  "reqAgain": "اطلب مرة أخرى",
+  "notAvailable": "القائمة غير متوفرة حالياً.",
+  "emptyMenuAlert": "لم يتم اختيار أي قائمة.",
+  "redirecting": "جارٍ التحميل...",
+  "initializing": "جارٍ المعالجة...",
+  "selectAlert": "يرجى اختيار القائمة أولاً.",
+  "scopeDesc": "استخدم هذا لتغيير نطاقك.",
+  "notFoundKeyword": "لم يتم العثور على بيانات مطابقة للكلمة المفتاحية ",
+  "findQRcode": "ابحث عن رمز QR بالقرب منك",
+  "isWorking": " يقوم بتنفيذ طلبك.",
+  "noteLongAlert": "يمكنك إضافة ملاحظة بحد أقصى 128 حرفاً فقط.",
+  "reqCodeNotFound": "رمز البلاغ غير صالح. يرجى الاتصال بالمسؤول.",
+  "noImage": "لا توجد صورة",
+  "related": "الخدمات ذات الصلة",
+  "broadcastPermission": "لا يمكن إرسال الرسالة، ليس لديك إذن.",
+  "broadcastTenant": "لا يمكن إرسال الرسالة، المستلم غير صالح.",
+  "reqForOthers": "بالطبع، أحب مساعدة الآخرين.",
+  "reqForMySelf": "لا، هذا الطلب لي شخصياً.",
+  "requestedBy": "تم الطلب بواسطة",
+  "requestedFor": "تم الطلب لـ",
+  "typeId": "اكتب معرف الشخص",
+  "idNotMatch": "فشل إرسال الطلب. لا يُسمح بهذا الطلب للمعرف #ID.",
+  "idNotFound": "لم يتم العثور على المعرف المُدخل. يرجى تجربة معرف آخر.",
+  "informantNotRegistered": "أنت غير مسجل كمستقبل أو موظف غرفة.",
+  "link_copied": "تم نسخ الرابط إلى الحافظة.",
+  "do_not_disturb": "عدم الإزعاج",
+  "set_dnd_status": "تعيين حالة عدم الإزعاج",
+  "active_dnd": "نشط",
+  "inactive_dnd": "غير نشط",
+  "msg_dnd": "يمكنك تعطيل حالة عدم الإزعاج من خلال قائمة الحساب.",
+  "msg_change_active": "هل ترغب في تفعيل حالة عدم الإزعاج؟",
+  "msg_change_inactive": "هل ترغب في تعطيل حالة عدم الإزعاج؟",
+  "info_dnd": "تم تفعيل حالة عدم الإزعاج.",
+  "invalid_bridge": "رابط Bridge غير صالح.",
+  "someone_else": "هل ترغب في تقديم طلب نيابة عن شخص آخر؟",
+  "askScheduleTime": "متى يجب تنفيذ طلبك؟",
+  "scheduleMessage": "سيتم تنفيذ طلبك لاحقاً في",
+  "scan_qr": "اعرض رمز QR الخاص بي",
+  "show_qr": "اعرض رمز QR",
+  "show_qr_desc": "اعرض هذا الرمز لأصدقائك أو زملائك الذين يحتاجون إلى الوصول إلى التطبيق.",
+  "dismiss": "تخطي",
+  "not_allow_permission": "جهازك لا يسمح للتطبيق بتلقي الإشعارات.",
+  "tap_here": "اضغط هنا للذهاب إلى إعدادات الجهاز.",
+  "doNotDisturb": "عدم الإزعاج",
+  "info_label": "معلومات",
+  "display_menu": "عرض القائمة",
+  "req_group": "مجموعة البلاغات",
+  "ser_group": "مجموعة المنفذين",
+  "save_rating": "احفظ التقييم",
+  "auto_translate": "ترجمة تلقائية",
+  "hold": "معلق",
+  "holdHistory": "سجل التعليق",
+  "pending": "قيد الانتظار",
+  "pending_info_success": "وجدنا مشكلة في الاتصال. طلبك ينتظر القرار وسيتم إرساله عند عودة الاتصال.",
+  "pending_info_tiles": "انتظر الاتصال بالإنترنت لإرسال طلبك.",
+  "pending_info_detail": "لم يتم إرسال طلبك بسبب مشكلة في الاتصال.",
+  "cancel_pending": "ألغِ طلبي فقط",
+  "sending": "جارٍ الإرسال",
+  "queued": "في قائمة الانتظار",
+  "onProgress": "قيد التنفيذ",
+  "showLess": "عرض أقل",
+  "customTopMenu": "تخصيص القائمة الرئيسية",
+  "limitTopMenu": "القائمة الرئيسية محدودة بـ 7 عناصر فقط!",
+  "searchButton": "بحث",
+  "allInformantsInfo": "جميع المبلغين سيستلمون رسالتك.",
+  "action": "إجراء",
+  "whatMakesYou": "ما الذي يجعلك",
+  "letMeWrite": "لدي رأي مختلف!",
+  "writeHere": "اكتب هنا..",
+  "ratingAspect": "جانب التقييم",
+  "sendingRequest": "جارٍ إرسال الطلب",
+  "changePriority": "تغيير الأولوية",
+  "referenceNumber": "رقم المرجع",
+  "enterTicketNumber": "أدخل رقم التذكرة",
+  "subject": "الموضوع",
+  "requestReference": "مرجع الطلب",
+  "endSessionTitle": "انتهت جلستك.",
+  "endSessionDesc": "عذراً، يبدو أنك لم تستخدم التطبيق لفترة. لأمانك، يرجى تسجيل الدخول مرة أخرى قبل المتابعة.",
+  "invalidParentTicket": "رقم المرجع غير صالح.",
+  "failedLoad": "فشل تحميل التطبيق.",
+  "tap2retry": "اضغط لإعادة المحاولة."
+}

+ 3 - 2
lib/main.dart

@@ -79,7 +79,8 @@ void main() async{
               Locale('id'),
               Locale('ja'),
               Locale('zh'),
-              Locale('ko')
+              Locale('ko'),
+              Locale('ar')
             ],
             startLocale: Locale('id'),
             saveLocale: true,
@@ -131,7 +132,7 @@ class MyApp extends StatelessWidget {
               statusBarIconBrightness: Brightness.dark,
               statusBarBrightness: Brightness.dark
           ),
-        )),
+        ), colorScheme: ColorScheme.fromSeed(seedColor: Color(0xff078C84))),
         routerConfig: _appRouter.config(),
       ),
     );

+ 198 - 176
lib/src/layouts/auth/login.dart

@@ -72,7 +72,7 @@ class _LoginPageState extends State<LoginPage> {
       resizeToAvoidBottomInset: false,
       body: Stack(
         children: [
-          Container(
+          SizedBox(
             width: double.infinity, height: double.infinity,
             child: Image.network(imageUrl, fit: BoxFit.cover, width: double.infinity, height: double.infinity, errorBuilder: (context, error, stackTrace) {
               return Image.asset('assets/image/background/background.jpg', fit: BoxFit.cover, width: double.infinity, height: double.infinity);
@@ -80,138 +80,91 @@ class _LoginPageState extends State<LoginPage> {
           ),
           SingleChildScrollView(
             child: Container(
-              padding: EdgeInsets.fromLTRB(16, kIsWeb?80:50, 16, 16),
+              padding: EdgeInsets.fromLTRB(16, 100, 16, 16),
               width: MediaQuery.of(context).size.width,
               height: kIsWeb && MediaQuery.of(context).size.height<700 ? 700 : MediaQuery.of(context).size.height,
               decoration: BoxDecoration(gradient: LinearGradient(begin: Alignment.topCenter, end: Alignment.bottomCenter, colors: [primaryColor.withValues(alpha: 0.50), Colors.black.withValues(alpha: 0.91)])),
-              child: Column(
-                children: [
-                  kIsWeb?Container():Container(
-                    margin: EdgeInsets.only(bottom: companyLogo.isNotEmpty?50:120),
-                    child: GestureDetector(
-                      child: Row(
-                        children: [
-                          U.iconsax('arrow-left', color: Colors.white),
-                          SizedBox(width: 15),
-                          Column(
-                            crossAxisAlignment: CrossAxisAlignment.start,
-                            children: [
-                              Text('buttonBack'.tr(), style: TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.w500)),
-                              Text('buttonScan'.tr(), style: TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.w500)),
-                            ],
-                          )
-                        ],
+              child: SafeArea(
+                child: Column(
+                  children: [
+                    Image.asset('assets/image/logo/logo.png', height: companyLogo.isNotEmpty?25:40),
+                    companyLogo.isNotEmpty?Container(
+                      margin: EdgeInsets.only(top: 30, bottom: 40),
+                      width: 160, height: 160,
+                      decoration: BoxDecoration(
+                        borderRadius: BorderRadius.all(Radius.circular(80)),
+                        image: DecorationImage(image: CachedNetworkImageProvider(companyLogo+'?bridge-cache=true', cacheManager: CacheManager(CacheMan.config(companyLogo))), fit: BoxFit.cover)
                       ),
-                      onTap: (){
-                        context.router.removeLast();
-                        context.navigateToPath('/qr?new=true');
-                      },
-                    ),
-                  ),
-                  Image.asset('assets/image/logo/logo.png', height: companyLogo.isNotEmpty?25:40),
-                  companyLogo.isNotEmpty?Container(
-                    margin: EdgeInsets.only(top: 30, bottom: 40),
-                    width: 160, height: 160,
-                    decoration: BoxDecoration(
-                      borderRadius: BorderRadius.all(Radius.circular(80)),
-                      image: DecorationImage(image: CachedNetworkImageProvider(companyLogo+'?bridge-cache=true', cacheManager: CacheManager(CacheMan.config(companyLogo))), fit: BoxFit.cover)
-                    ),
-                  ):SizedBox(height: 115),
-                  Expanded(
-                    child: Column(
-                      mainAxisAlignment: MainAxisAlignment.start,
-                      children: [
-                        Container(
-                          alignment: Alignment.topCenter,
-                          width: U.bodyWidth(context),
-                          child: Column(
-                            children: [
-                              loginFieldTemplate(placeholder: 'userId'.tr(), value: username, action: (val)=>username = val, submit: (val)=>loginAction()),
-                              SizedBox(height: 12),
-                              loginFieldTemplate(placeholder: 'password'.tr(), value: password, action: (val)=>password = val, isPassword: true, submit: (val)=>loginAction()),
-                              GestureDetector(
-                                child: Container(
-                                  width: double.infinity,
-                                  margin: EdgeInsets.only(top: 40, bottom: 20),
-                                  padding: EdgeInsets.symmetric(vertical: 16),
-                                  child: !loading?Text('buttonLogin'.tr(), style: TextStyle(color: Colors.white, fontSize: 17), textAlign: TextAlign.center):Center(
-                                    child: SizedBox(
-                                      width: 22, height: 22, child: CircularProgressIndicator(color: Colors.white),
+                    ):SizedBox(height: 115),
+                    Expanded(
+                      child: Column(
+                        mainAxisAlignment: MainAxisAlignment.start,
+                        children: [
+                          Container(
+                            alignment: Alignment.topCenter,
+                            width: U.bodyWidth(context),
+                            child: Column(
+                              children: [
+                                loginFieldTemplate(placeholder: 'userId'.tr(), value: username, action: (val)=>username = val, submit: (val)=>loginAction()),
+                                SizedBox(height: 12),
+                                loginFieldTemplate(placeholder: 'password'.tr(), value: password, action: (val)=>password = val, isPassword: true, submit: (val)=>loginAction()),
+                                GestureDetector(
+                                  child: Container(
+                                    width: double.infinity,
+                                    margin: EdgeInsets.only(top: 40, bottom: 20),
+                                    padding: EdgeInsets.symmetric(vertical: 16),
+                                    child: !loading?Text('buttonLogin'.tr(), style: TextStyle(color: Colors.white, fontSize: 17), textAlign: TextAlign.center):Center(
+                                      child: SizedBox(
+                                        width: 22, height: 22, child: CircularProgressIndicator(color: Colors.white),
+                                      ),
+                                    ),
+                                    decoration: BoxDecoration(
+                                        color: primaryColor.withValues(alpha: 0.50),
+                                        border: Border.all(color: Colors.white),
+                                        borderRadius: BorderRadius.all(Radius.circular(12))
                                     ),
                                   ),
-                                  decoration: BoxDecoration(
-                                      color: primaryColor.withValues(alpha: 0.50),
-                                      border: Border.all(color: Colors.white),
-                                      borderRadius: BorderRadius.all(Radius.circular(12))
-                                  ),
+                                  onTap: ()=>loginAction(),
                                 ),
-                                onTap: ()=>loginAction(),
-                              ),
-                            ],
+                              ],
+                            ),
                           ),
-                        ),
-                        companyName.isNotEmpty?Text(companyName, style: TextStyle(fontSize: 16, color: Colors.white), textAlign: TextAlign.center):Container(),
-                        SizedBox(height: companyName.isNotEmpty?5:0),
-                        serialNumber.isNotEmpty?Text('serialNumber'.tr() + ' ' + serialNumber, style: TextStyle(color: Colors.white, fontSize: 14)):Container(),
-                      ],
+                          companyName.isNotEmpty?Text(companyName, style: TextStyle(fontSize: 16, color: Colors.white), textAlign: TextAlign.center):Container(),
+                          SizedBox(height: companyName.isNotEmpty?5:0),
+                          serialNumber.isNotEmpty?Text('serialNumber'.tr() + ' ' + serialNumber, style: TextStyle(color: Colors.white, fontSize: 14)):Container(),
+                        ],
+                      ),
                     ),
-                  ),
-                  Container(
-                    margin: EdgeInsets.only(top: 20, bottom: 5),
-                    alignment: Alignment.bottomCenter,
-                    child: GestureDetector(
-                      child: Text('policy'.tr(), style: TextStyle(color: Colors.white, fontSize: 14, decoration: TextDecoration.underline)),
-                      onTap: () async {
-                        Uri _url = Uri.parse('https://telmessenger.com/privacy-police/telnow.html');
-                        await canLaunchUrl(_url) ? await launchUrl(_url) : print('Could not launch $_url');
-                      },
+                    Container(
+                      margin: EdgeInsets.only(top: 20, bottom: 5),
+                      alignment: Alignment.bottomCenter,
+                      child: GestureDetector(
+                        child: Text('policy'.tr(), style: TextStyle(color: Colors.white, fontSize: 14, decoration: TextDecoration.underline)),
+                        onTap: () async {
+                          Uri _url = Uri.parse('https://telmessenger.com/privacy-police/telnow.html');
+                          await canLaunchUrl(_url) ? await launchUrl(_url) : print('Could not launch $_url');
+                        },
+                      ),
                     ),
-                  ),
-                  Text('${'version'.tr()} ${ApiAuthProvider().displayVersion}', style: TextStyle(color: Colors.white, fontSize: 14)),
-                  SizedBox(height: 5),
-                  Text('Build ${ApiAuthProvider().buildNumber}', style: TextStyle(color: Colors.white, fontSize: 13)),
-                ],
+                    Text('${'version'.tr()} ${ApiAuthProvider().displayVersion}', style: TextStyle(color: Colors.white, fontSize: 14)),
+                    SizedBox(height: 5),
+                    Text('Build ${ApiAuthProvider().buildNumber}', style: TextStyle(color: Colors.white, fontSize: 13)),
+                  ],
+                ),
               ),
             ),
           ),
           Container(
-            margin: EdgeInsets.only(top: kIsWeb?16:50, right: 16),
-            child: Align(
-              alignment: Alignment.topRight,
-              child: lang.length > 0 ? GestureDetector(
-                child: Container(
-                  width: 65, height: 30, padding: EdgeInsets.symmetric(horizontal: 10),
-                  child: Row(
-                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                    children: [
-                      U.iconsax('bold/global', color: Colors.white),
-                      Text(context.locale.toString().toUpperCase(), style: TextStyle(color: Colors.white, fontSize: 15, fontWeight: FontWeight.bold))
-                    ],
-                  ),
-                  decoration: BoxDecoration(
-                    color: Colors.deepOrange,
-                    borderRadius: BorderRadius.all(Radius.circular(50))
-                  ),
-                ),
-                onTap: () => changeLangLogin(context, lang),
-              ) : ToggleSwitch(
-                minWidth: 40,
-                minHeight: 30,
-                cornerRadius: 20,
-                initialLabelIndex: context.locale.toString() == 'en' ? 0 : 1,
-                activeBgColor: [Colors.deepOrange],
-                activeFgColor: Colors.white,
-                inactiveBgColor: Colors.white54,
-                inactiveFgColor: Colors.white,
-                labels: ['EN', 'ID'],
-                onToggle: (index) {
-                  if (index == 0) {
-                    context.setLocale(Locale('en'));
-                  } else {
-                    context.setLocale(Locale('id'));
-                  }
-                },
-              ),
+            padding: EdgeInsets.only(top: 42, left: 16),
+            height: 90,
+            child: Row(
+              crossAxisAlignment: CrossAxisAlignment.center,
+              mainAxisAlignment: MainAxisAlignment.spaceBetween,
+              // padding: EdgeInsets.symmetric(horizontal: 16),
+              children: [
+                backButton(),
+                langWdgt()
+              ],
             ),
           )
         ],
@@ -219,6 +172,73 @@ class _LoginPageState extends State<LoginPage> {
     );
   }
 
+  Widget backButton(){
+    return GestureDetector(
+      child: Row(
+        children: [
+          U.iconsax('arrow-left', color: Colors.white),
+          SizedBox(width: 15),
+          Column(
+            crossAxisAlignment: CrossAxisAlignment.start,
+            children: [
+              Text('buttonBack'.tr(), style: TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.w500)),
+              Text('buttonScan'.tr(), style: TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.w500)),
+            ],
+          )
+        ],
+      ),
+      onTap: (){
+        context.router.removeLast();
+        context.navigateToPath('/qr?new=true');
+      },
+    );
+  }
+
+  Widget langWdgt(){
+    return Center(
+      child: Container(
+        margin: EdgeInsets.only(right: 16),
+        child: Align(
+          alignment: Alignment.topRight,
+          child: lang.length > 0 ? GestureDetector(
+            child: Container(
+              width: 65, height: 30, padding: EdgeInsets.symmetric(horizontal: 10),
+              child: Row(
+                mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                children: [
+                  U.iconsax('bold/global', color: Colors.white),
+                  Text(context.locale.toString().toUpperCase(), style: TextStyle(color: Colors.white, fontSize: 15, fontWeight: FontWeight.bold))
+                ],
+              ),
+              decoration: BoxDecoration(
+                  color: Colors.deepOrange,
+                  borderRadius: BorderRadius.all(Radius.circular(50))
+              ),
+            ),
+            onTap: () => changeLangLogin(context, lang),
+          ) : ToggleSwitch(
+            minWidth: 40,
+            minHeight: 30,
+            cornerRadius: 20,
+            initialLabelIndex: context.locale.toString() == 'en' ? 0 : 1,
+            activeBgColor: [Colors.deepOrange],
+            activeFgColor: Colors.white,
+            inactiveBgColor: Colors.white54,
+            inactiveFgColor: Colors.white,
+            labels: ['EN', 'ID'],
+            onToggle: (index) {
+              if (index == 0) {
+                context.setLocale(Locale('en'));
+              } else {
+                context.setLocale(Locale('id'));
+              }
+            },
+          ),
+        ),
+      ),
+    );
+  }
+
   loginAction() async{
     if(!loading){
       setState(()=>loading = true);
@@ -309,64 +329,66 @@ changeLangLogin(BuildContext context, List lang){
     context: context,
     backgroundColor: Colors.white,
     builder: (BuildContext context) {
-      return Column(
-        mainAxisSize: MainAxisSize.min,
-        children: <Widget>[
-          Padding(
-            padding: EdgeInsets.symmetric(vertical: 16),
-            child: Center(
-              child: Text('chooseLanguage'.tr(), style: TextStyle(color: textColor)),
-            ),
-          ),
-          divider(),
-          SizedBox(height: 16),
-          Column(
-            crossAxisAlignment: CrossAxisAlignment.start,
-            children: [
-              ListTile(
-                title: Text('bahasa'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
-                trailing: Icon(context.locale.toString()=='id'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
-                onTap: context.locale.toString() != 'id' ? () async {
-                  Navigator.of(context).pop();
-                  context.setLocale(Locale('id'));
-                } : null,
-              ),
-              ListTile(
-                title: Text('english'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
-                trailing: Icon(context.locale.toString()=='en'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
-                onTap: context.locale.toString() != 'en' ? () async {
-                  Navigator.of(context).pop();
-                  context.setLocale(Locale('en'));
-                } : null,
+      return SafeArea(
+        child: Column(
+          mainAxisSize: MainAxisSize.min,
+          children: <Widget>[
+            Padding(
+              padding: EdgeInsets.symmetric(vertical: 16),
+              child: Center(
+                child: Text('chooseLanguage'.tr(), style: TextStyle(color: textColor)),
               ),
-              lang.contains('ja') ? ListTile(
-                title: Text('japanese'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
-                trailing: Icon(context.locale.toString()=='ja'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
-                onTap: context.locale.toString() != 'ja' ? () async {
-                  Navigator.of(context).pop();
-                  context.setLocale(Locale('ja'));
-                } : null,
-              ) : Container(),
-              lang.contains('zh') ? ListTile(
-                title: Text('chinese'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
-                trailing: Icon(context.locale.toString()=='zh'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
-                onTap: context.locale.toString() != 'zh' ? () async {
-                  Navigator.of(context).pop();
-                  context.setLocale(Locale('zh'));
-                } : null,
-              ) : Container(),
-              lang.contains('ko') ? ListTile(
-                title: Text('korean'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
-                trailing: Icon(context.locale.toString()=='ko'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
-                onTap: context.locale.toString() != 'ko' ? () async {
-                  Navigator.of(context).pop();
-                  context.setLocale(Locale('ko'));
-                } : null,
-              ) : Container()
-            ],
-          ),
-          SizedBox(height: 16)
-        ],
+            ),
+            divider(),
+            SizedBox(height: 16),
+            Column(
+              crossAxisAlignment: CrossAxisAlignment.start,
+              children: [
+                ListTile(
+                  title: Text('bahasa'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
+                  trailing: Icon(context.locale.toString()=='id'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
+                  onTap: context.locale.toString() != 'id' ? () async {
+                    Navigator.of(context).pop();
+                    context.setLocale(Locale('id'));
+                  } : null,
+                ),
+                ListTile(
+                  title: Text('english'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
+                  trailing: Icon(context.locale.toString()=='en'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
+                  onTap: context.locale.toString() != 'en' ? () async {
+                    Navigator.of(context).pop();
+                    context.setLocale(Locale('en'));
+                  } : null,
+                ),
+                lang.contains('ja') ? ListTile(
+                  title: Text('japanese'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
+                  trailing: Icon(context.locale.toString()=='ja'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
+                  onTap: context.locale.toString() != 'ja' ? () async {
+                    Navigator.of(context).pop();
+                    context.setLocale(Locale('ja'));
+                  } : null,
+                ) : Container(),
+                lang.contains('zh') ? ListTile(
+                  title: Text('chinese'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
+                  trailing: Icon(context.locale.toString()=='zh'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
+                  onTap: context.locale.toString() != 'zh' ? () async {
+                    Navigator.of(context).pop();
+                    context.setLocale(Locale('zh'));
+                  } : null,
+                ) : Container(),
+                lang.contains('ko') ? ListTile(
+                  title: Text('korean'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
+                  trailing: Icon(context.locale.toString()=='ko'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
+                  onTap: context.locale.toString() != 'ko' ? () async {
+                    Navigator.of(context).pop();
+                    context.setLocale(Locale('ko'));
+                  } : null,
+                ) : Container()
+              ],
+            ),
+            SizedBox(height: 16)
+          ],
+        ),
       );
     }
   );

+ 106 - 102
lib/src/layouts/auth/qr.dart

@@ -106,73 +106,75 @@ class _NewQrPageState extends State<NewQrPage> {
                       ]
                   )
               ),
-              child: Column(
-                crossAxisAlignment: CrossAxisAlignment.center,
-                children: [
-                  Image.asset('assets/image/logo/logo.png', width: 160),
-                  Expanded(
-                    child: Column(
-                      mainAxisAlignment: MainAxisAlignment.start,
-                      children: [
-                        Container(
-                          margin: EdgeInsets.only(top: 100, left: 16, right: 16, bottom: 48),
-                          child: kIsWeb?Column(
-                            children: [
-                              Text('noPIDText'.tr(), style: TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.w500), textAlign: TextAlign.center),
-                              SizedBox(height: 16),
-                              Text('noPIDText2'.tr(), style: TextStyle(color: Colors.white, fontSize: 16), textAlign: TextAlign.center),
-                            ],
-                          ):Text('scanQr'.tr(), style: TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.w400), textAlign: TextAlign.center),
-                        ),
-                        !kIsWeb?GestureDetector(
-                          onTap: scanDialog,
-                          child: Container(
-                            padding: EdgeInsets.symmetric(vertical: 32, horizontal: 64),
-                            decoration: BoxDecoration(
-                                color: primaryColor.withValues(alpha: 0.50),
-                                border: Border.all(color: Colors.white),
-                                borderRadius: BorderRadius.all(Radius.circular(12))
-                            ),
-                            child: Row(
-                              mainAxisSize: MainAxisSize.min,
+              child: SafeArea(
+                child: Column(
+                  crossAxisAlignment: CrossAxisAlignment.center,
+                  children: [
+                    Image.asset('assets/image/logo/logo.png', width: 160),
+                    Expanded(
+                      child: Column(
+                        mainAxisAlignment: MainAxisAlignment.start,
+                        children: [
+                          Container(
+                            margin: EdgeInsets.only(top: 100, left: 16, right: 16, bottom: 48),
+                            child: kIsWeb?Column(
                               children: [
-                                Text('buttonScan'.tr(), style: TextStyle(color: Colors.white, fontSize: 16)),
-                                SizedBox(width: 10),
-                                U.iconsax('scan', color: Colors.white)
+                                Text('noPIDText'.tr(), style: TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.w500), textAlign: TextAlign.center),
+                                SizedBox(height: 16),
+                                Text('noPIDText2'.tr(), style: TextStyle(color: Colors.white, fontSize: 16), textAlign: TextAlign.center),
                               ],
-                            ),
+                            ):Text('scanQr'.tr(), style: TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.w400), textAlign: TextAlign.center),
                           ),
-                        ):Container(),
-                        !kIsWeb && U.getAccessCode() != null ? Padding(
-                            padding: EdgeInsets.only(top: 16),
-                            child: GestureDetector(
-                              child: Text('backToLogin'.tr(), style: TextStyle(color: Colors.white, fontSize: 14, decoration: TextDecoration.underline)),
-                              onTap: (){
-                                context.router.removeLast();
-                                context.navigateToPath("/app/${U.getAccessCode()}/login");
-                              },
-                            )
-                        ) : Container(),
-                      ],
+                          !kIsWeb?GestureDetector(
+                            onTap: scanDialog,
+                            child: Container(
+                              padding: EdgeInsets.symmetric(vertical: 32, horizontal: 64),
+                              decoration: BoxDecoration(
+                                  color: primaryColor.withValues(alpha: 0.50),
+                                  border: Border.all(color: Colors.white),
+                                  borderRadius: BorderRadius.all(Radius.circular(12))
+                              ),
+                              child: Row(
+                                mainAxisSize: MainAxisSize.min,
+                                children: [
+                                  Text('buttonScan'.tr(), style: TextStyle(color: Colors.white, fontSize: 16)),
+                                  SizedBox(width: 10),
+                                  U.iconsax('scan', color: Colors.white)
+                                ],
+                              ),
+                            ),
+                          ):Container(),
+                          !kIsWeb && U.getAccessCode() != null ? Padding(
+                              padding: EdgeInsets.only(top: 16),
+                              child: GestureDetector(
+                                child: Text('backToLogin'.tr(), style: TextStyle(color: Colors.white, fontSize: 14, decoration: TextDecoration.underline)),
+                                onTap: (){
+                                  context.router.removeLast();
+                                  context.navigateToPath("/app/${U.getAccessCode()}/login");
+                                },
+                              )
+                          ) : Container(),
+                        ],
+                      ),
                     ),
-                  ),
-
-                  companyName.isNotEmpty?Text(companyName, style: TextStyle(fontSize: 16, color: Colors.white), textAlign: TextAlign.center):Container(),
-                  SizedBox(height: 5),
-                  serialNumber.isNotEmpty?Text('${'serialNumber'.tr()} $serialNumber', style: TextStyle(color: Colors.white, fontSize: 14)):Container(),
-                  SizedBox(height: 5),
-                  GestureDetector(
-                    child: Text('policy'.tr(), style: TextStyle(color: Colors.white, fontSize: 14, decoration: TextDecoration.underline)),
-                    onTap: () async {
-                      Uri _url = Uri.parse('https://telmessenger.com/privacy-police/telnow.html');
-                      await canLaunchUrl(_url) ? await launchUrl(_url) : print('Could not launch $_url');
-                    },
-                  ),
-                  SizedBox(height: 5),
-                  Text('${'version'.tr()} ${ApiAuthProvider().displayVersion}', style: TextStyle(color: Colors.white, fontSize: 14)),
-                  SizedBox(height: 5),
-                  Text('Build ${ApiAuthProvider().buildNumber}', style: TextStyle(color: Colors.white, fontSize: 13)),
-                ],
+                
+                    companyName.isNotEmpty?Text(companyName, style: TextStyle(fontSize: 16, color: Colors.white), textAlign: TextAlign.center):Container(),
+                    SizedBox(height: 5),
+                    serialNumber.isNotEmpty?Text('${'serialNumber'.tr()} $serialNumber', style: TextStyle(color: Colors.white, fontSize: 14)):Container(),
+                    SizedBox(height: 5),
+                    GestureDetector(
+                      child: Text('policy'.tr(), style: TextStyle(color: Colors.white, fontSize: 14, decoration: TextDecoration.underline)),
+                      onTap: () async {
+                        Uri _url = Uri.parse('https://telmessenger.com/privacy-police/telnow.html');
+                        await canLaunchUrl(_url) ? await launchUrl(_url) : print('Could not launch $_url');
+                      },
+                    ),
+                    SizedBox(height: 5),
+                    Text('${'version'.tr()} ${ApiAuthProvider().displayVersion}', style: TextStyle(color: Colors.white, fontSize: 14)),
+                    SizedBox(height: 5),
+                    Text('Build ${ApiAuthProvider().buildNumber}', style: TextStyle(color: Colors.white, fontSize: 13)),
+                  ],
+                ),
               ),
             ),
           ),
@@ -230,47 +232,49 @@ class _NewQrPageState extends State<NewQrPage> {
           context: context,
           backgroundColor: Colors.white,
           builder: (BuildContext contextt) {
-            return Column(
-              mainAxisSize: MainAxisSize.min,
-              children: <Widget>[
-                Padding(
-                  padding: const EdgeInsets.only(top: 15, bottom: 15),
-                  child: Center(
-                    child: Text('buttonScan'.tr(), style: TextStyle(color: textColor, fontWeight: FontWeight.w600)),
+            return SafeArea(
+              child: Column(
+                mainAxisSize: MainAxisSize.min,
+                children: <Widget>[
+                  Padding(
+                    padding: const EdgeInsets.only(top: 15, bottom: 15),
+                    child: Center(
+                      child: Text('buttonScan'.tr(), style: TextStyle(color: textColor, fontWeight: FontWeight.w600)),
+                    ),
                   ),
-                ),
-                divider(),
-                ListTile(
-                  leading: Icon(Icons.image),
-                  title: Text('fromGallery'.tr(), style: TextStyle(color: textColor)),
-                  onTap: () async{
-                    Navigator.of(contextt).pop();
-                    XFile? file = await ImagePicker().pickImage(source: ImageSource.gallery);
-                    if(file != null){
-                      final BarcodeCapture? barcodeCapture = await MobileScannerController().analyzeImage(file.path);
-                      String? str = barcodeCapture?.barcodes.singleOrNull?.displayValue;
-                      if (str != null) {
-                        scan(str);
-                      }
-                      else{
-                        showError(context, 'messageInvalidCode'.tr());
+                  divider(),
+                  ListTile(
+                    leading: Icon(Icons.image),
+                    title: Text('fromGallery'.tr(), style: TextStyle(color: textColor)),
+                    onTap: () async{
+                      Navigator.of(contextt).pop();
+                      XFile? file = await ImagePicker().pickImage(source: ImageSource.gallery);
+                      if(file != null){
+                        final BarcodeCapture? barcodeCapture = await MobileScannerController().analyzeImage(file.path);
+                        String? str = barcodeCapture?.barcodes.singleOrNull?.displayValue;
+                        if (str != null) {
+                          scan(str);
+                        }
+                        else{
+                          showError(context, 'messageInvalidCode'.tr());
+                        }
                       }
-                    }
-                  },
-                ),
-                ListTile(
-                  leading: Icon(Icons.camera),
-                  title: Text('fromCamera'.tr(), style: TextStyle(color: textColor)),
-                  onTap: () async{
-                    Navigator.of(contextt).pop();
-                    Navigator.push(context, MaterialPageRoute(builder: (context) => const ScanBarcodePage())).then((barcode){
-                      if(barcode != null){
-                        scan(barcode);
-                      }
-                    });
-                  },
-                )
-              ],
+                    },
+                  ),
+                  ListTile(
+                    leading: Icon(Icons.camera),
+                    title: Text('fromCamera'.tr(), style: TextStyle(color: textColor)),
+                    onTap: () async{
+                      Navigator.of(contextt).pop();
+                      Navigator.push(context, MaterialPageRoute(builder: (context) => const ScanBarcodePage())).then((barcode){
+                        if(barcode != null){
+                          scan(barcode);
+                        }
+                      });
+                    },
+                  )
+                ],
+              ),
             );
           }
         );

+ 12 - 8
lib/src/layouts/functions/account.dart

@@ -28,14 +28,18 @@ class AccountFunction{
 
   switchLang(BuildContext context, code, user) async {
     showLoading(context);
-    var res = await apiAuthProvider.patchData('/api/informants/' + user['id'].toString(), {'userId': user['userId'], 'language': code.toUpperCase()}, context);
-    if (res != null) {
-      closeLoading(context);
-      context.setLocale(Locale(code));
-      notification.startNotification(context);
-      Navigator.of(context).pop();
-    }
-    else{
+    try{
+      var res = await apiAuthProvider.patchData('/api/informants/' + user['id'].toString(), {'userId': user['userId'], 'language': code.toUpperCase()}, context);
+      print(res);
+      if (res != null) {
+        closeLoading(context);
+        context.setLocale(Locale(code));
+        notification.startNotification(context);
+        Navigator.of(context).pop();
+      } else {
+        closeLoading(context);
+      }
+    }catch(e){
       closeLoading(context);
     }
   }

+ 28 - 26
lib/src/layouts/mobile/history_detail.dart

@@ -333,34 +333,36 @@ class _MobHistoryDetailPageState extends State<MobHistoryDetailPage> {
               child: list['currentState'] == 'DIMULAI' && list['_canNotCancel'] ? Text('canNotCancel2'.tr(), style: TextStyle(color: textColor, fontSize: 14), textAlign: TextAlign.center) : Container(
                 alignment: Alignment.bottomCenter,
                 width: U.bodyWidth(context),
-                child: Column(
-                  children: [
-                    SizedBox(
-                      width: double.infinity,
-                      child: TextField(
-                        controller: controllerNote,
-                        style: const TextStyle(fontSize: 14, color: Colors.black),
-                        maxLength: 128,
-                        decoration: InputDecoration(
-                            counterText: '',
-                            counterStyle: TextStyle(color: Colors.transparent, fontSize: 0),
-                            hintText: 'addNoteCancel'.tr(),
-                            hintStyle: TextStyle(color: textColor.withValues(alpha: 0.5), fontSize: 14),
-                            filled: true,
-                            fillColor: backgroundColor,
-                            hoverColor: Colors.black.withValues(alpha: 0.1),
-                            contentPadding: EdgeInsets.all(13),
-                            prefixIcon: Padding(padding: EdgeInsets.only(left: 13, right: 13), child: U.iconsax('edit-2', color: textColor, size: 24)),
-                            border: InputBorder.none,
-                            enabledBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(12), borderSide: BorderSide(color: Color(0xff262626).withValues(alpha: 0.5))),
-                            focusedBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(12), borderSide: const BorderSide(color: primaryColor)),
-                            isDense: true
+                child: SafeArea(
+                  child: Column(
+                    children: [
+                      SizedBox(
+                        width: double.infinity,
+                        child: TextField(
+                          controller: controllerNote,
+                          style: const TextStyle(fontSize: 14, color: Colors.black),
+                          maxLength: 128,
+                          decoration: InputDecoration(
+                              counterText: '',
+                              counterStyle: TextStyle(color: Colors.transparent, fontSize: 0),
+                              hintText: 'addNoteCancel'.tr(),
+                              hintStyle: TextStyle(color: textColor.withValues(alpha: 0.5), fontSize: 14),
+                              filled: true,
+                              fillColor: backgroundColor,
+                              hoverColor: Colors.black.withValues(alpha: 0.1),
+                              contentPadding: EdgeInsets.all(13),
+                              prefixIcon: Padding(padding: EdgeInsets.only(left: 13, right: 13), child: U.iconsax('edit-2', color: textColor, size: 24)),
+                              border: InputBorder.none,
+                              enabledBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(12), borderSide: BorderSide(color: Color(0xff262626).withValues(alpha: 0.5))),
+                              focusedBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(12), borderSide: const BorderSide(color: primaryColor)),
+                              isDense: true
+                          ),
                         ),
                       ),
-                    ),
-                    SizedBox(height: 10),
-                    buttonTemplate(text: 'buttonCancel'.tr(), backgroundColor: textColor.withValues(alpha: 0.1), textColor: textColor.withValues(alpha: 0.75), borderColor: textColor.withValues(alpha: 0.20), action: () => detFunc.cancelRequest(context, list, controllerNote))
-                  ],
+                      SizedBox(height: 10),
+                      buttonTemplate(text: 'buttonCancel'.tr(), backgroundColor: textColor.withValues(alpha: 0.1), textColor: textColor.withValues(alpha: 0.75), borderColor: textColor.withValues(alpha: 0.20), action: () => detFunc.cancelRequest(context, list, controllerNote))
+                    ],
+                  ),
                 ),
               ),
             )

+ 149 - 145
lib/src/layouts/mobile/history_forum.dart

@@ -453,158 +453,162 @@ class _MobHistoryForumPageState extends State<MobHistoryForumPage> {
             margin: EdgeInsets.all(20),
             child: Text('noInternetDesc'.tr(), style: TextStyle(color: textColor.withValues(alpha: 0.65), fontStyle: FontStyle.italic, height: 1.5, fontSize: 16.0), textAlign: TextAlign.center),
           ),
-          openChat?divider():Container(),
-          openChat?Container(
-            alignment: Alignment.bottomCenter,
-            width: U.bodyWidth(context), color: Colors.white,
-            padding: EdgeInsets.symmetric(vertical: 10, horizontal: 16),
-            child: Row(
-              children: [
-                Expanded(
-                  child: SizedBox(
-                    width: double.infinity,
-                    child: TextField(
-                      controller: controllerPesan,
-                      maxLength: 256,
-                      style: const TextStyle(fontSize: 14, color: Colors.black),
-                      keyboardType: TextInputType.multiline,
-                      minLines: 1,
-                      maxLines: 5,
-                      decoration: InputDecoration(
-                          counterText: '',
-                          hintText: 'writeMessage'.tr()+'..',
-                          hintStyle: TextStyle(color: textColor.withValues(alpha: 0.5), fontSize: 14),
-                          filled: true,
-                          fillColor: backgroundColor,
-                          hoverColor: Colors.black.withValues(alpha: 0.1),
-                          contentPadding: EdgeInsets.symmetric(horizontal: kIsWeb?15:13, vertical: kIsWeb?20:13),
-                          suffixIcon: GestureDetector(
-                            child: Padding(padding: EdgeInsets.only(left: 13, right: 13), child: U.iconsax('paperclip-2', color: textColor, size: 24)),
-                            onTap: ()async{
-                              var uuid = Uuid().v1().replaceAll('-', '');
-                              var data = {
-                                "uniqueId": uuid,
-                                "userId": username,
-                                "recipientId": "#forum",
-                                "senderType": "INFORMANT",
-                                "text": controllerPesan.text.trim(),
-                                "chatId": idChat,
-                                "images": null
-                              };
-
-                              if (kIsWeb) {
-                                await getImage(ImageSource.gallery).then((value) {
-                                  if (_image != null) {
-                                    navigateTo(context, PhotoChat(data, ImageSource.gallery, false, _image!)).then((value) {
-                                      if (value != null) {
-                                        sendMessage(value);
-                                      }
-                                    });
-                                  }
-                                });
-                              } else{
-                                showModalBottomSheet<void>(
-                                    context: context,
-                                    backgroundColor: Colors.white,
-                                    builder: (BuildContext context) {
-                                      return new Column(
-                                        mainAxisSize: MainAxisSize.min,
-                                        children: <Widget>[
-                                          Padding(
-                                            padding: const EdgeInsets.only(top: 15, bottom: 15),
-                                            child: Center(
-                                              child: Text('selectPicture'.tr()),
-                                            ),
-                                          ),
-                                          Padding(
-                                            padding: const EdgeInsets.only(left: 15, right: 15),
-                                            child: Divider(color: Colors.grey, height: 1.0),
-                                          ),
-                                          ListTile(
-                                            leading: Icon(Icons.image),
-                                            title: Text('fromGallery'.tr()),
-                                            onTap: () {
-                                              Navigator.of(context).pop();
-                                              navigateTo(context, PhotoChat(data, ImageSource.gallery, false, null)).then((value) {
-                                                if (value != null) {
-                                                  sendMessage(value);
-                                                }
-                                              });
-                                            },
-                                          ),
-                                          ListTile(
-                                            leading: Icon(Icons.camera),
-                                            title: Text('fromCamera'.tr()),
-                                            onTap: () {
-                                              Navigator.of(context).pop();
-                                              navigateTo(context, PhotoChat(data, ImageSource.camera, false, null)).then((value) {
-                                                if (value != null) {
-                                                  sendMessage(value);
-                                                }
-                                              });
-                                            },
-                                          )
-                                        ],
-                                      );
+          openChat ? divider() : Container(),
+          openChat ? SafeArea(
+            child: Container(
+              alignment: Alignment.bottomCenter,
+              width: U.bodyWidth(context), color: Colors.white,
+              padding: EdgeInsets.symmetric(vertical: 10, horizontal: 16),
+              child: Row(
+                children: [
+                  Expanded(
+                    child: SizedBox(
+                      width: double.infinity,
+                      child: TextField(
+                        controller: controllerPesan,
+                        maxLength: 256,
+                        style: const TextStyle(fontSize: 14, color: Colors.black),
+                        keyboardType: TextInputType.multiline,
+                        minLines: 1,
+                        maxLines: 5,
+                        decoration: InputDecoration(
+                            counterText: '',
+                            hintText: 'writeMessage'.tr()+'..',
+                            hintStyle: TextStyle(color: textColor.withValues(alpha: 0.5), fontSize: 14),
+                            filled: true,
+                            fillColor: backgroundColor,
+                            hoverColor: Colors.black.withValues(alpha: 0.1),
+                            contentPadding: EdgeInsets.symmetric(horizontal: kIsWeb?15:13, vertical: kIsWeb?20:13),
+                            suffixIcon: GestureDetector(
+                              child: Padding(padding: EdgeInsets.only(left: 13, right: 13), child: U.iconsax('paperclip-2', color: textColor, size: 24)),
+                              onTap: ()async{
+                                var uuid = Uuid().v1().replaceAll('-', '');
+                                var data = {
+                                  "uniqueId": uuid,
+                                  "userId": username,
+                                  "recipientId": "#forum",
+                                  "senderType": "INFORMANT",
+                                  "text": controllerPesan.text.trim(),
+                                  "chatId": idChat,
+                                  "images": null
+                                };
+
+                                if (kIsWeb) {
+                                  await getImage(ImageSource.gallery).then((value) {
+                                    if (_image != null) {
+                                      navigateTo(context, PhotoChat(data, ImageSource.gallery, false, _image!)).then((value) {
+                                        if (value != null) {
+                                          sendMessage(value);
+                                        }
+                                      });
                                     }
-                                );
+                                  });
+                                } else{
+                                  showModalBottomSheet<void>(
+                                      context: context,
+                                      backgroundColor: Colors.white,
+                                      builder: (BuildContext context) {
+                                        return SafeArea(
+                                          child: Column(
+                                            mainAxisSize: MainAxisSize.min,
+                                            children: <Widget>[
+                                              Padding(
+                                                padding: const EdgeInsets.only(top: 15, bottom: 15),
+                                                child: Center(
+                                                  child: Text('selectPicture'.tr()),
+                                                ),
+                                              ),
+                                              Padding(
+                                                padding: const EdgeInsets.only(left: 15, right: 15),
+                                                child: Divider(color: Colors.grey, height: 1.0),
+                                              ),
+                                              ListTile(
+                                                leading: Icon(Icons.image),
+                                                title: Text('fromGallery'.tr()),
+                                                onTap: () {
+                                                  Navigator.of(context).pop();
+                                                  navigateTo(context, PhotoChat(data, ImageSource.gallery, false, null)).then((value) {
+                                                    if (value != null) {
+                                                      sendMessage(value);
+                                                    }
+                                                  });
+                                                },
+                                              ),
+                                              ListTile(
+                                                leading: Icon(Icons.camera),
+                                                title: Text('fromCamera'.tr()),
+                                                onTap: () {
+                                                  Navigator.of(context).pop();
+                                                  navigateTo(context, PhotoChat(data, ImageSource.camera, false, null)).then((value) {
+                                                    if (value != null) {
+                                                      sendMessage(value);
+                                                    }
+                                                  });
+                                                },
+                                              )
+                                            ],
+                                          ),
+                                        );
+                                      }
+                                  );
+                                }
+                              },
+                            ),
+                            border: InputBorder.none,
+                            enabledBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(borderRadius), borderSide: BorderSide(color: textColor)),
+                            focusedBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(borderRadius), borderSide: BorderSide(color: primaryColor)),
+                            isDense: true
+                        ),
+                        onChanged: (val) {
+                          setState(() {
+                            if (val.trim() != '') {
+                              final tp = TextPainter(text: TextSpan(text: val), textDirection: ui.TextDirection.ltr);
+                              tp.layout(maxWidth: U.bodyWidth(context) - 100);
+                              final line = tp.computeLineMetrics().length;
+                              if (line == 1) {
+                                borderRadius = 50.0;
+                              } else {
+                                borderRadius = 25.0;
                               }
-                            },
-                          ),
-                          border: InputBorder.none,
-                          enabledBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(borderRadius), borderSide: BorderSide(color: textColor)),
-                          focusedBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(borderRadius), borderSide: BorderSide(color: primaryColor)),
-                          isDense: true
-                      ),
-                      onChanged: (val) {
-                        setState(() {
-                          if (val.trim() != '') {
-                            final tp = TextPainter(text: TextSpan(text: val), textDirection: ui.TextDirection.ltr);
-                            tp.layout(maxWidth: U.bodyWidth(context) - 100);
-                            final line = tp.computeLineMetrics().length;
-                            if (line == 1) {
-                              borderRadius = 50.0;
+
+                              isSend = true;
                             } else {
-                              borderRadius = 25.0;
+                              isSend = false;
                             }
-
-                            isSend = true;
-                          } else {
-                            isSend = false;
-                          }
-                        });
-                      },
+                          });
+                        },
+                      ),
                     ),
                   ),
-                ),
-                SizedBox(width: 12),
-                GestureDetector(
-                  child: Container(
-                    padding: EdgeInsets.all(12),
-                    child: Image.asset('assets/image/icon/Send.png', width: 25, height: 25),
-                    decoration: BoxDecoration(
-                        color: primaryColor,
-                        borderRadius: BorderRadius.all(Radius.circular(50))
+                  SizedBox(width: 12),
+                  GestureDetector(
+                    child: Container(
+                      padding: EdgeInsets.all(12),
+                      child: Image.asset('assets/image/icon/Send.png', width: 25, height: 25),
+                      decoration: BoxDecoration(
+                          color: primaryColor,
+                          borderRadius: BorderRadius.all(Radius.circular(50))
+                      ),
                     ),
-                  ),
-                  onTap: (){
-                    if(controllerPesan.text.isNotEmpty){
-                      var uuid = Uuid().v1().replaceAll('-', '');
-                      var data = {
-                        "uniqueId": uuid,
-                        "userId": username,
-                        "recipientId": "#forum",
-                        "senderType": "INFORMANT",
-                        "text": controllerPesan.text.trim(),
-                        "chatId": idChat,
-                        "images": null
-                      };
-
-                      sendMessage(data);
-                    }
-                  },
-                )
-              ],
+                    onTap: (){
+                      if(controllerPesan.text.isNotEmpty){
+                        var uuid = Uuid().v1().replaceAll('-', '');
+                        var data = {
+                          "uniqueId": uuid,
+                          "userId": username,
+                          "recipientId": "#forum",
+                          "senderType": "INFORMANT",
+                          "text": controllerPesan.text.trim(),
+                          "chatId": idChat,
+                          "images": null
+                        };
+
+                        sendMessage(data);
+                      }
+                    },
+                  )
+                ],
+              ),
             ),
           ):U.getInternetStatus()?Center(child: Padding(
             padding: EdgeInsets.symmetric(vertical: 20),

+ 50 - 40
lib/src/layouts/mobile/menu_account.dart

@@ -70,6 +70,7 @@ class _MobAccountPageState extends State<MobAccountPage> {
       "ja": 'japanese'.tr(),
       "zh": 'chinese'.tr(),
       "ko": 'korean'.tr(),
+      "ar": 'العربية'
     };
     return Provider.of<UserModule>(context).user().isNotEmpty ? Scaffold(
       backgroundColor: backgroundColor,
@@ -446,45 +447,54 @@ class _MobAccountPageState extends State<MobAccountPage> {
   }
 
   listOfLang(user){
-    return Column(
-      crossAxisAlignment: CrossAxisAlignment.start,
-      children: [
-        ListTile(
-          title: Text('bahasa'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
-          trailing: Icon(context.locale.toString()=='id'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
-          onTap: context.locale.toString() != 'id' ? () async {
-            accFunc.switchLang(context, 'id', user);
-          } : null,
-        ),
-        ListTile(
-          title: Text('english'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
-          trailing: Icon(context.locale.toString()=='en'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
-          onTap: context.locale.toString() != 'en' ? () async {
-            accFunc.switchLang(context, 'en', user);
-          } : null,
-        ),
-        lang.contains('ja') ? ListTile(
-          title: Text('japanese'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
-          trailing: Icon(context.locale.toString()=='ja'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
-          onTap: context.locale.toString() != 'ja' ? () async {
-            accFunc.switchLang(context, 'ja', user);
-          } : null,
-        ) : Container(),
-        lang.contains('zh') ? ListTile(
-          title: Text('chinese'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
-          trailing: Icon(context.locale.toString()=='zh'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
-          onTap: context.locale.toString() != 'zh' ? () async {
-            accFunc.switchLang(context, 'zh', user);
-          } : null,
-        ) : Container(),
-        lang.contains('ko') ? ListTile(
-          title: Text('korean'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
-          trailing: Icon(context.locale.toString()=='ko'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
-          onTap: context.locale.toString() != 'ko' ? () async {
-            accFunc.switchLang(context, 'ko', user);
-          } : null,
-        ) : Container()
-      ],
+    return SafeArea(
+      child: Column(
+        crossAxisAlignment: CrossAxisAlignment.start,
+        children: [
+          ListTile(
+            title: Text('bahasa'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
+            trailing: Icon(context.locale.toString()=='id'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
+            onTap: context.locale.toString() != 'id' ? () async {
+              accFunc.switchLang(context, 'id', user);
+            } : null,
+          ),
+          ListTile(
+            title: Text('english'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
+            trailing: Icon(context.locale.toString()=='en'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
+            onTap: context.locale.toString() != 'en' ? () async {
+              accFunc.switchLang(context, 'en', user);
+            } : null,
+          ),
+          lang.contains('ja') ? ListTile(
+            title: Text('japanese'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
+            trailing: Icon(context.locale.toString()=='ja'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
+            onTap: context.locale.toString() != 'ja' ? () async {
+              accFunc.switchLang(context, 'ja', user);
+            } : null,
+          ) : Container(),
+          lang.contains('zh') ? ListTile(
+            title: Text('chinese'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
+            trailing: Icon(context.locale.toString()=='zh'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
+            onTap: context.locale.toString() != 'zh' ? () async {
+              accFunc.switchLang(context, 'zh', user);
+            } : null,
+          ) : Container(),
+          lang.contains('ko') ? ListTile(
+            title: Text('korean'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
+            trailing: Icon(context.locale.toString()=='ko'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
+            onTap: context.locale.toString() != 'ko' ? () async {
+              accFunc.switchLang(context, 'ko', user);
+            } : null,
+          ) : Container(),
+          lang.contains('ar') ? ListTile(
+            title: Text('العربية', style: TextStyle(color: textColor, fontSize: 14)),
+            trailing: Icon(context.locale.toString()=='ar'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
+            onTap: context.locale.toString() != 'ar' ? () async {
+              accFunc.switchLang(context, 'ar', user);
+            } : null,
+          ) : Container()
+        ],
+      ),
     );
   }
-}
+}

+ 111 - 105
lib/src/layouts/mobile/menu_home.dart

@@ -172,55 +172,57 @@ class _MobHomePageState extends State<MobHomePage> with WidgetsBindingObserver {
                                     context: context,
                                     backgroundColor: Colors.white,
                                     builder: (BuildContext contexts) {
-                                      return Column(
-                                        mainAxisSize: MainAxisSize.min,
-                                        children: [
-                                          Container(
-                                            margin: EdgeInsets.symmetric(vertical: 16),
-                                            child: Text('changeScope'.tr(), style: TextStyle(color: textColor, fontSize: 14), textAlign: TextAlign.center),
-                                          ),
-                                          divider(),
-                                          SizedBox(height: 16),
-                                          Column(
-                                            children: List.generate(Provider.of<ServiceModule>(context).getScoopeLength(), (i){
-                                              return GestureDetector(
-                                                  child: Container(
-                                                    color: Colors.white,
-                                                    padding: EdgeInsets.symmetric(vertical: 16, horizontal: 16),
-                                                    child: Row(
-                                                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                                                      children: [
-                                                        Text(Provider.of<ServiceModule>(context).scoope()[i]['value'], style: TextStyle(color: textColor, fontSize: 14)),
-                                                        Icon(Provider.of<ServiceModule>(context).checkScoope(Provider.of<ServiceModule>(context).scoope()[i]['key'])?Icons.radio_button_checked:Icons.radio_button_off, color: Provider.of<ServiceModule>(context).checkScoope(Provider.of<ServiceModule>(context).scoope()[i]['key'])?primaryColor:Colors.black45, size: 22),
-                                                      ],
+                                      return SafeArea(
+                                        child: Column(
+                                          mainAxisSize: MainAxisSize.min,
+                                          children: [
+                                            Container(
+                                              margin: EdgeInsets.symmetric(vertical: 16),
+                                              child: Text('changeScope'.tr(), style: TextStyle(color: textColor, fontSize: 14), textAlign: TextAlign.center),
+                                            ),
+                                            divider(),
+                                            SizedBox(height: 16),
+                                            Column(
+                                              children: List.generate(Provider.of<ServiceModule>(context).getScoopeLength(), (i){
+                                                return GestureDetector(
+                                                    child: Container(
+                                                      color: Colors.white,
+                                                      padding: EdgeInsets.symmetric(vertical: 16, horizontal: 16),
+                                                      child: Row(
+                                                        mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                                                        children: [
+                                                          Text(Provider.of<ServiceModule>(context).scoope()[i]['value'], style: TextStyle(color: textColor, fontSize: 14)),
+                                                          Icon(Provider.of<ServiceModule>(context).checkScoope(Provider.of<ServiceModule>(context).scoope()[i]['key'])?Icons.radio_button_checked:Icons.radio_button_off, color: Provider.of<ServiceModule>(context).checkScoope(Provider.of<ServiceModule>(context).scoope()[i]['key'])?primaryColor:Colors.black45, size: 22),
+                                                        ],
+                                                      ),
                                                     ),
-                                                  ),
-                                                  onTap: () async{
-                                                    await sharedPreferencesManager.putString(SharedPreferencesManager.keyScoope, Provider.of<ServiceModule>(context, listen: false).scoope()[i]['key']);
-                                                    Provider.of<ServiceModule>(context, listen: false).setScoopeValue(Provider.of<ServiceModule>(context, listen: false).scoope()[i]['key']);
-                                                    Provider.of<ServiceModule>(context, listen: false).setScoopeName(Provider.of<ServiceModule>(context, listen: false).scoope()[i]['value']);
-                                                    Navigator.of(contexts).pop();
-
-                                                    var profile = Provider.of<UserModule>(context, listen: false).profile();
-                                                    if(profile['topMenu']['show'] != null && profile['topMenu']['show'] == true) {
-                                                      if(U.newServerVersion(1709864293)){
-                                                        homeFunc.getTopMenuNew(context);
-                                                      }
-                                                      else{
-                                                        homeFunc.getTopMenu(context);
-                                                        homeFunc.getReqGroup(context);
+                                                    onTap: () async{
+                                                      await sharedPreferencesManager.putString(SharedPreferencesManager.keyScoope, Provider.of<ServiceModule>(context, listen: false).scoope()[i]['key']);
+                                                      Provider.of<ServiceModule>(context, listen: false).setScoopeValue(Provider.of<ServiceModule>(context, listen: false).scoope()[i]['key']);
+                                                      Provider.of<ServiceModule>(context, listen: false).setScoopeName(Provider.of<ServiceModule>(context, listen: false).scoope()[i]['value']);
+                                                      Navigator.of(contexts).pop();
+                                        
+                                                      var profile = Provider.of<UserModule>(context, listen: false).profile();
+                                                      if(profile['topMenu']['show'] != null && profile['topMenu']['show'] == true) {
+                                                        if(U.newServerVersion(1709864293)){
+                                                          homeFunc.getTopMenuNew(context);
+                                                        }
+                                                        else{
+                                                          homeFunc.getTopMenu(context);
+                                                          homeFunc.getReqGroup(context);
+                                                        }
                                                       }
+                                                      if(profile['specialOffer'] != null && profile['specialOffer']['show'] == true) homeFunc.getSpecialOffer(context);
+                                                      if(profile['frequentlyRequested'] != null && profile['frequentlyRequested']['show'] == true) homeFunc.getFrequentlyRequested(context);
+                                                      if(profile['banner'] != null && profile['banner']['show'] == true) homeFunc.getBanner(context);
+                                                      if(profile['quickAction'] != null && profile['quickAction']['show'] == true) homeFunc.getQuickAction(context);
                                                     }
-                                                    if(profile['specialOffer'] != null && profile['specialOffer']['show'] == true) homeFunc.getSpecialOffer(context);
-                                                    if(profile['frequentlyRequested'] != null && profile['frequentlyRequested']['show'] == true) homeFunc.getFrequentlyRequested(context);
-                                                    if(profile['banner'] != null && profile['banner']['show'] == true) homeFunc.getBanner(context);
-                                                    if(profile['quickAction'] != null && profile['quickAction']['show'] == true) homeFunc.getQuickAction(context);
-                                                  }
-                                              );
-                                            }),
-                                          ),
-                                          SizedBox(height: 16),
-                                        ],
+                                                );
+                                              }),
+                                            ),
+                                            SizedBox(height: 16),
+                                          ],
+                                        ),
                                       );
                                     },
                                   );
@@ -669,30 +671,32 @@ class _MobMenuDisplayPageState extends State<MobMenuDisplayPage> {
           Expanded(
             child: SingleChildScrollView(
               padding: EdgeInsets.fromLTRB(16, 5, 16, 16),
-              child: Column(
-                children: List.generate((Provider.of<ServiceModule>(context).reqGroup()!.length/4).ceil(), (i){
-                  return Row(
-                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                    crossAxisAlignment: CrossAxisAlignment.start,
-                    children: List.generate(4, (j){
-                      int index = i==0?j:j+(4*i);
-                      return index < Provider.of<ServiceModule>(context).reqGroup()!.length ? GestureDetector(
-                        child: Column(
-                          children: [
-                            i>0?SizedBox(height: 16):Container(),
-                            categoryContainer(context: context, iconUrl: Provider.of<ServiceModule>(context).reqGroup()![index]['iconUrl']),
-                            SizedBox(height: 8),
-                            SizedBox(
-                              width: 70,
-                              child: Text(U.servantDisplay() ? Provider.of<ServiceModule>(context).reqGroup()![index]['description'] : Provider.of<ServiceModule>(context).reqGroup()![index][U.langColumn(context, 'description')], style: TextStyle(color: textColor, fontSize: 12, fontWeight: FontWeight.w300), maxLines: 2, overflow: TextOverflow.ellipsis, textAlign: TextAlign.center),
-                            )
-                          ],
-                        ),
-                        onTap: ()=>navigateTo(context, MobReqSelectPage(user: Provider.of<UserModule>(context, listen: false).user(), title: U.servantDisplay() ? Provider.of<ServiceModule>(context, listen: false).reqGroup()![index]['description'] : Provider.of<ServiceModule>(context, listen: false).reqGroup()![index][U.langColumn(context, 'description')], scope: widget.scope, groupCode: Provider.of<ServiceModule>(context, listen: false).reqGroup()![index]['code'])),
-                      ) : Container(width: 70);
-                    }),
-                  );
-                }),
+              child: SafeArea(
+                child: Column(
+                  children: List.generate((Provider.of<ServiceModule>(context).reqGroup()!.length/4).ceil(), (i){
+                    return Row(
+                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                      crossAxisAlignment: CrossAxisAlignment.start,
+                      children: List.generate(4, (j){
+                        int index = i==0?j:j+(4*i);
+                        return index < Provider.of<ServiceModule>(context).reqGroup()!.length ? GestureDetector(
+                          child: Column(
+                            children: [
+                              i>0?SizedBox(height: 16):Container(),
+                              categoryContainer(context: context, iconUrl: Provider.of<ServiceModule>(context).reqGroup()![index]['iconUrl']),
+                              SizedBox(height: 8),
+                              SizedBox(
+                                width: 70,
+                                child: Text(U.servantDisplay() ? Provider.of<ServiceModule>(context).reqGroup()![index]['description'] : Provider.of<ServiceModule>(context).reqGroup()![index][U.langColumn(context, 'description')], style: TextStyle(color: textColor, fontSize: 12, fontWeight: FontWeight.w300), maxLines: 2, overflow: TextOverflow.ellipsis, textAlign: TextAlign.center),
+                              )
+                            ],
+                          ),
+                          onTap: ()=>navigateTo(context, MobReqSelectPage(user: Provider.of<UserModule>(context, listen: false).user(), title: U.servantDisplay() ? Provider.of<ServiceModule>(context, listen: false).reqGroup()![index]['description'] : Provider.of<ServiceModule>(context, listen: false).reqGroup()![index][U.langColumn(context, 'description')], scope: widget.scope, groupCode: Provider.of<ServiceModule>(context, listen: false).reqGroup()![index]['code'])),
+                        ) : Container(width: 70);
+                      }),
+                    );
+                  }),
+                ),
               ),
             ),
           )
@@ -829,42 +833,44 @@ class _MobMenuEditorPageState extends State<MobMenuEditorPage> {
               margin: EdgeInsets.fromLTRB(16, 16, 16, 13),
               child: Text('availableMenu'.tr(), style: TextStyle(color: textColor, fontSize: 17, fontWeight: FontWeight.w500)),
             ),
-            Column(
-              children: List.generate(available.length, (i){
-                return Container(
-                  padding: EdgeInsets.symmetric(vertical: 8, horizontal: 16),
-                  child: Row(
-                    children: [
-                      categoryContainer(context: context, iconUrl: available[i]['iconUrl']),
-                      SizedBox(width: 12),
-                      Expanded(
-                        child: Column(
-                          crossAxisAlignment: CrossAxisAlignment.start,
-                          children: [
-                            Text(available[i][U.langColumn(context, 'description')], style: TextStyle(color: textColor, fontSize: 14), overflow: TextOverflow.ellipsis),
-                            SizedBox(height: 4),
-                            Text(available[i][U.langColumn(context, 'description')], style: TextStyle(color: textColor, fontSize: 12, fontWeight: FontWeight.w300), overflow: TextOverflow.ellipsis),
-                          ],
+            SafeArea(
+              child: Column(
+                children: List.generate(available.length, (i){
+                  return Container(
+                    padding: EdgeInsets.symmetric(vertical: 8, horizontal: 16),
+                    child: Row(
+                      children: [
+                        categoryContainer(context: context, iconUrl: available[i]['iconUrl']),
+                        SizedBox(width: 12),
+                        Expanded(
+                          child: Column(
+                            crossAxisAlignment: CrossAxisAlignment.start,
+                            children: [
+                              Text(available[i][U.langColumn(context, 'description')], style: TextStyle(color: textColor, fontSize: 14), overflow: TextOverflow.ellipsis),
+                              SizedBox(height: 4),
+                              Text(available[i][U.langColumn(context, 'description')], style: TextStyle(color: textColor, fontSize: 12, fontWeight: FontWeight.w300), overflow: TextOverflow.ellipsis),
+                            ],
+                          ),
                         ),
-                      ),
-                      GestureDetector(
-                        child: U.iconsax('bold/add-circle', color: Color(0xffD81010)),
-                        onTap: (){
-                          if(data.length < 7){
-                            setState(() {
-                              data.add(available[i]);
-                              available.remove(available[i]);
-                            });
-                          }
-                          else{
-                            showError(context, 'maxMenu'.tr());
-                          }
-                        },
-                      ),
-                    ],
-                  ),
-                );
-              }),
+                        GestureDetector(
+                          child: U.iconsax('bold/add-circle', color: Color(0xffD81010)),
+                          onTap: (){
+                            if(data.length < 7){
+                              setState(() {
+                                data.add(available[i]);
+                                available.remove(available[i]);
+                              });
+                            }
+                            else{
+                              showError(context, 'maxMenu'.tr());
+                            }
+                          },
+                        ),
+                      ],
+                    ),
+                  );
+                }),
+              ),
             ),
             SizedBox(height: 8),
           ],

+ 37 - 35
lib/src/layouts/mobile/password.dart

@@ -73,46 +73,48 @@ class _MobPasswordPageState extends State<MobPasswordPage> {
               ),
             ),
           ),
-          Container(
-            padding: EdgeInsets.symmetric(vertical: 10, horizontal: 16),
-            decoration: BoxDecoration(
-                color: Colors.white,
-                border: Border(top: BorderSide(color: textColor.withValues(alpha: 0.15)))
-            ),
-            child: buttonTemplate(text: 'buttonSave'.tr(), action: ()async{
-              if(controllerOld.trim().isNotEmpty && controllerNew.trim().isNotEmpty && controllerConfirm.trim().isNotEmpty){
-                if(controllerNew == controllerConfirm){
-                  var data = {
-                    'oldPassword':controllerOld.trim(),
-                    'password':controllerNew.trim()
-                  };
-
-                  var res = await apiAuthProvider.patchData('/api/informants/'+widget.user['id'].toString()+'/changePassword', data, context);
-                  if(res != null){
-                    String username = widget.user['_isRelated']?widget.user['relatedTo']:widget.user['userId'];
-                    String? password = widget.user['_isRelated'] && widget.user['tenantCode']!=null && widget.user['tenantCode']!=''?widget.user['tenantCode']+' '+data['password']:data['password'];
-
-                    LoginBody loginBody = LoginBody(username, password!, 'password');
-                    Token token = await apiAuthRepository.postLoginUser(loginBody);
-                    if (token.error != null) {
-                      showError(context, token.error);
-                    }
-                    else{
-                      await sharedPreferencesManager.putString(SharedPreferencesManager.keyAccessToken, token.accessToken!);
-                      await sharedPreferencesManager.putString(SharedPreferencesManager.keyRefreshToken, token.refreshToken!);
-                      await sharedPreferencesManager.putString(SharedPreferencesManager.keyUsername, widget.user['_isRelated']?widget.user['tenantCode']!=null && widget.user['tenantCode']!=''?widget.user['tenantCode']+' '+data['password']!:data['password']!:widget.user['userId']);
-                      Navigator.of(context).pop(true);
+          SafeArea(
+            child: Container(
+              padding: EdgeInsets.symmetric(vertical: 10, horizontal: 16),
+              decoration: BoxDecoration(
+                  color: Colors.white,
+                  border: Border(top: BorderSide(color: textColor.withValues(alpha: 0.15)))
+              ),
+              child: buttonTemplate(text: 'buttonSave'.tr(), action: ()async{
+                if(controllerOld.trim().isNotEmpty && controllerNew.trim().isNotEmpty && controllerConfirm.trim().isNotEmpty){
+                  if(controllerNew == controllerConfirm){
+                    var data = {
+                      'oldPassword':controllerOld.trim(),
+                      'password':controllerNew.trim()
+                    };
+            
+                    var res = await apiAuthProvider.patchData('/api/informants/'+widget.user['id'].toString()+'/changePassword', data, context);
+                    if(res != null){
+                      String username = widget.user['_isRelated']?widget.user['relatedTo']:widget.user['userId'];
+                      String? password = widget.user['_isRelated'] && widget.user['tenantCode']!=null && widget.user['tenantCode']!=''?widget.user['tenantCode']+' '+data['password']:data['password'];
+            
+                      LoginBody loginBody = LoginBody(username, password!, 'password');
+                      Token token = await apiAuthRepository.postLoginUser(loginBody);
+                      if (token.error != null) {
+                        showError(context, token.error);
+                      }
+                      else{
+                        await sharedPreferencesManager.putString(SharedPreferencesManager.keyAccessToken, token.accessToken!);
+                        await sharedPreferencesManager.putString(SharedPreferencesManager.keyRefreshToken, token.refreshToken!);
+                        await sharedPreferencesManager.putString(SharedPreferencesManager.keyUsername, widget.user['_isRelated']?widget.user['tenantCode']!=null && widget.user['tenantCode']!=''?widget.user['tenantCode']+' '+data['password']!:data['password']!:widget.user['userId']);
+                        Navigator.of(context).pop(true);
+                      }
                     }
                   }
+                  else{
+                    showError(context, 'checkNewPass'.tr());
+                  }
                 }
                 else{
-                  showError(context, 'checkNewPass'.tr());
+                  showError(context, 'cannotEmpty'.tr());
                 }
-              }
-              else{
-                showError(context, 'cannotEmpty'.tr());
-              }
-            }),
+              }),
+            ),
           )
         ],
       ),

+ 74 - 70
lib/src/layouts/mobile/request_create.dart

@@ -513,58 +513,60 @@ class _MobReqCreatePageState extends State<MobReqCreatePage> {
             alignment: Alignment.bottomCenter,
             width: U.bodyWidth(context), color: Colors.white,
             padding: EdgeInsets.symmetric(vertical: 10, horizontal: 16),
-            child: Column(
-              children: [
-                widget.request['autoResponse'] ? Container() : Container(
-                  margin: EdgeInsets.only(bottom: 10),
-                  width: double.infinity,
-                  child: TextField(
-                    controller: controllerNote,
-                    style: TextStyle(fontSize: 14, color: Colors.black),
-                    minLines: 1,
-                    maxLines: 3,
-                    keyboardType: widget.request['noteFormat'] == 'NUMBER' ? TextInputType.number : null,
-                    decoration: InputDecoration(
-                        hintText: 'placeholderNote'.tr(),
-                        hintStyle: TextStyle(color: textColor.withValues(alpha: 0.5), fontSize: 14),
-                        filled: true,
-                        fillColor: backgroundColor,
-                        hoverColor: Colors.black.withValues(alpha: 0.1),
-                        contentPadding: EdgeInsets.all(13),
-                        prefixIcon: Padding(padding: EdgeInsets.only(left: 13, right: 13), child: U.iconsax('edit-2', color: textColor, size: 24)),
-                        border: InputBorder.none,
-                        enabledBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(12), borderSide: BorderSide(color: Color(0xff262626).withValues(alpha: 0.5))),
-                        focusedBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(12), borderSide: const BorderSide(color: primaryColor)),
-                        isDense: true
+            child: SafeArea(
+              child: Column(
+                children: [
+                  widget.request['autoResponse'] ? Container() : Container(
+                    margin: EdgeInsets.only(bottom: 10),
+                    width: double.infinity,
+                    child: TextField(
+                      controller: controllerNote,
+                      style: TextStyle(fontSize: 14, color: Colors.black),
+                      minLines: 1,
+                      maxLines: 3,
+                      keyboardType: widget.request['noteFormat'] == 'NUMBER' ? TextInputType.number : null,
+                      decoration: InputDecoration(
+                          hintText: 'placeholderNote'.tr(),
+                          hintStyle: TextStyle(color: textColor.withValues(alpha: 0.5), fontSize: 14),
+                          filled: true,
+                          fillColor: backgroundColor,
+                          hoverColor: Colors.black.withValues(alpha: 0.1),
+                          contentPadding: EdgeInsets.all(13),
+                          prefixIcon: Padding(padding: EdgeInsets.only(left: 13, right: 13), child: U.iconsax('edit-2', color: textColor, size: 24)),
+                          border: InputBorder.none,
+                          enabledBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(12), borderSide: BorderSide(color: Color(0xff262626).withValues(alpha: 0.5))),
+                          focusedBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(12), borderSide: const BorderSide(color: primaryColor)),
+                          isDense: true
+                      ),
                     ),
                   ),
-                ),
-                buttonTemplate(text: 'buttonSendRequest'.tr(), action: () async{
-                  if ((Provider.of<CreateSerModule>(context, listen: false).locationType() == 2 && controllerLocation.text.trim().isNotEmpty) || (Provider.of<CreateSerModule>(context, listen: false).locationType() == 1 && Provider.of<CreateSerModule>(context, listen: false).defaultLocation() != '')) {
-                    if (controllerNote.text.length <= 128) {
-                      if (widget.user['roomAttendant'] && Provider.of<CreateSerModule>(context, listen: false).others() == 1){
-                        if (controllerUserId.text.trim().isNotEmpty){
-                          if (controllerDateString.text.trim().isEmpty && widget.request['noteFormat'] == 'DATE'){
-                            showError(context, 'dateRequired'.tr());
+                  buttonTemplate(text: 'buttonSendRequest'.tr(), action: () async{
+                    if ((Provider.of<CreateSerModule>(context, listen: false).locationType() == 2 && controllerLocation.text.trim().isNotEmpty) || (Provider.of<CreateSerModule>(context, listen: false).locationType() == 1 && Provider.of<CreateSerModule>(context, listen: false).defaultLocation() != '')) {
+                      if (controllerNote.text.length <= 128) {
+                        if (widget.user['roomAttendant'] && Provider.of<CreateSerModule>(context, listen: false).others() == 1){
+                          if (controllerUserId.text.trim().isNotEmpty){
+                            if (controllerDateString.text.trim().isEmpty && widget.request['noteFormat'] == 'DATE'){
+                              showError(context, 'dateRequired'.tr());
+                            } else {
+                              reqFunc.sendRequestToOthers(context, widget, controllerUserId, controllerNote, controllerReferenceNumber, controllerLocation, controllerDateString, _currentSliderValue);
+                            }
                           } else {
-                            reqFunc.sendRequestToOthers(context, widget, controllerUserId, controllerNote, controllerReferenceNumber, controllerLocation, controllerDateString, _currentSliderValue);
+                            showError(context, 'idRequired'.tr());
                           }
+                        } else if (controllerDateString.text.trim().isNotEmpty && widget.request['noteFormat'] == 'DATE'){
+                          dialogSendLater();
                         } else {
-                          showError(context, 'idRequired'.tr());
+                          reqFunc.sendRequest(context, widget, controllerNote, controllerReferenceNumber, controllerLocation, controllerDateString, _currentSliderValue);
                         }
-                      } else if (controllerDateString.text.trim().isNotEmpty && widget.request['noteFormat'] == 'DATE'){
-                        dialogSendLater();
                       } else {
-                        reqFunc.sendRequest(context, widget, controllerNote, controllerReferenceNumber, controllerLocation, controllerDateString, _currentSliderValue);
+                        showError(context, 'lengthMax'.tr());
                       }
                     } else {
-                      showError(context, 'lengthMax'.tr());
+                      showError(context, 'locRequired'.tr()+(!kIsWeb && widget.request['scanToRequest']?' ${'pleaseScan'.tr()}.':''));
                     }
-                  } else {
-                    showError(context, 'locRequired'.tr()+(!kIsWeb && widget.request['scanToRequest']?' ${'pleaseScan'.tr()}.':''));
-                  }
-                })
-              ],
+                  })
+                ],
+              ),
             ),
           )
         ],
@@ -674,35 +676,37 @@ class _MobReqCreatePageState extends State<MobReqCreatePage> {
             context: context,
             backgroundColor: Colors.white,
             builder: (BuildContext context) {
-              return Column(
-                mainAxisSize: MainAxisSize.min,
-                children: <Widget>[
-                  Padding(
-                    padding: const EdgeInsets.only(top: 15, bottom: 15),
-                    child: Center(
-                      child: Text('selectPicture'.tr(), style: TextStyle(color: textColor, fontWeight: FontWeight.w600)),
+              return SafeArea(
+                child: Column(
+                  mainAxisSize: MainAxisSize.min,
+                  children: <Widget>[
+                    Padding(
+                      padding: const EdgeInsets.only(top: 15, bottom: 15),
+                      child: Center(
+                        child: Text('selectPicture'.tr(), style: TextStyle(color: textColor, fontWeight: FontWeight.w600)),
+                      ),
                     ),
-                  ),
-                  divider(),
-                  ListTile(
-                    leading: Icon(Icons.image),
-                    title: Text('fromGallery'.tr(), style: TextStyle(color: textColor)),
-                    onTap: () async{
-                      var image = await reqFunc.getImageNew(context, ImageSource.gallery);
-                      Provider.of<CreateSerModule>(context, listen: false).setImages(image);
-                      Navigator.of(context).pop();
-                    },
-                  ),
-                  ListTile(
-                    leading: Icon(Icons.camera),
-                    title: Text('fromCamera'.tr(), style: TextStyle(color: textColor)),
-                    onTap: () async{
-                      var image = await reqFunc.getImageNew(context, ImageSource.camera);
-                      Provider.of<CreateSerModule>(context, listen: false).setImages(image);
-                      Navigator.of(context).pop();
-                    },
-                  )
-                ],
+                    divider(),
+                    ListTile(
+                      leading: Icon(Icons.image),
+                      title: Text('fromGallery'.tr(), style: TextStyle(color: textColor)),
+                      onTap: () async{
+                        var image = await reqFunc.getImageNew(context, ImageSource.gallery);
+                        Provider.of<CreateSerModule>(context, listen: false).setImages(image);
+                        Navigator.of(context).pop();
+                      },
+                    ),
+                    ListTile(
+                      leading: Icon(Icons.camera),
+                      title: Text('fromCamera'.tr(), style: TextStyle(color: textColor)),
+                      onTap: () async{
+                        var image = await reqFunc.getImageNew(context, ImageSource.camera);
+                        Provider.of<CreateSerModule>(context, listen: false).setImages(image);
+                        Navigator.of(context).pop();
+                      },
+                    )
+                  ],
+                ),
               );
             }
         );