From 08ac38a64b63603865de517d38f4abcb5e13fae9 Mon Sep 17 00:00:00 2001 From: venbaittech Date: Wed, 29 Oct 2025 12:34:19 +0530 Subject: [PATCH] travel_agent_remarks_access --- assets/images/login/sign.png | Bin 0 -> 3567 bytes lib/Screens/myTemplates/templateForex.dart | 121 +++++++++++++-------- lib/utils/travelAgent_remarks.dart | 23 ++-- 3 files changed, 87 insertions(+), 57 deletions(-) create mode 100644 assets/images/login/sign.png diff --git a/assets/images/login/sign.png b/assets/images/login/sign.png new file mode 100644 index 0000000000000000000000000000000000000000..1af185b81dcb18a448f164a0f7093821d4a33226 GIT binary patch literal 3567 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 { if (pickedFile != null && kIsWeb) { try { + final allowedExtensions = ['jpg', 'jpeg', 'png']; + final fileExtension = pickedFile.name.split('.').last.toLowerCase(); + + if (!allowedExtensions.contains(fileExtension)) { + print('❌ Invalid file type. Please select a JPG or PNG image.'); + + return; + } + final bytes = await pickedFile.readAsBytes(); print('✅ Image loaded, size: ${bytes.length} bytes'); setState(() { @@ -796,7 +805,7 @@ class TemplateForexState extends State { // color: Color(0xFF575A74), // ), // ), - const SizedBox(height: 10), + // const SizedBox(height: 10), Container( color: Color(0xFFFFFEF0), width: isDesktop ? MediaQuery.of(context).size.width * 0.8 : null, @@ -950,54 +959,74 @@ class TemplateForexState extends State { ), ), ), - SizedBox(height: 4), + SizedBox(height: 2), Container( - child: Row( - // mainAxisAlignment: MainAxisAlignment.end, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - "Upload Signature", - style: GoogleFonts.poppins(fontSize: 11.5), - ), - SizedBox(width: 5), - GestureDetector( - onTap: _pickImage, + Row( + // mainAxisAlignment: MainAxisAlignment.end, + children: [ + Text( + "Upload Signature", + style: GoogleFonts.poppins(fontSize: 11.5), + ), + SizedBox(width: 5), + GestureDetector( + onTap: _pickImage, - child: - _imageBytes != null - ? ClipOval( - child: Image.memory( - _imageBytes!, - // width: 50, - // height: 50, - width: 50, // Use responsive width - height: 50, - fit: BoxFit.cover, - ), - ) - : selectedOrglogo != null - ? ClipRect( - child: Image.network( - selectedOrglogo!, - width: 50, // Use responsive width - height: 50, - // width: 250, - // height: 55, - fit: BoxFit.contain, - errorBuilder: (context, error, stackTrace) { - return const CircleAvatar( - radius: 20, - backgroundColor: Colors.redAccent, - child: Icon(Icons.error, size: 10), - ); - }, - ), - ) - : const CircleAvatar( - radius: 20, - backgroundColor: Colors.amber, - child: Icon(Icons.add_a_photo, size: 10), - ), + child: + _imageBytes != null + ? ClipOval( + child: Image.memory( + _imageBytes!, + // width: 50, + // height: 50, + width: 50, // Use responsive width + height: 50, + fit: BoxFit.cover, + ), + ) + : selectedOrglogo != null + ? ClipRect( + child: Image.network( + selectedOrglogo!, + width: 50, // Use responsive width + height: 50, + // width: 250, + // height: 55, + fit: BoxFit.contain, + errorBuilder: (context, error, stackTrace) { + return const CircleAvatar( + radius: 20, + backgroundColor: Colors.redAccent, + child: Icon(Icons.error, size: 10), + ); + }, + ), + ) + : const CircleAvatar( + radius: 20, + backgroundColor: Colors.amber, + child: Icon(Icons.add_a_photo, size: 10), + ), + ), + ], + ), + SizedBox( + // width: 200, + child: Text( + "* Allow types jpg, jpeg, png", + // maxLines: 2, + // softWrap: true, + style: GoogleFonts.poppins( + fontSize: 9, + fontWeight: FontWeight.w400, + + color: Colors.grey, + ), + ), ), ], ), diff --git a/lib/utils/travelAgent_remarks.dart b/lib/utils/travelAgent_remarks.dart index 815d615..f05b391 100644 --- a/lib/utils/travelAgent_remarks.dart +++ b/lib/utils/travelAgent_remarks.dart @@ -77,25 +77,26 @@ class CommentModalState extends State { role = await getRoleUser(); print("Role - $role"); + print("RoleuserId - $userId"); userId = int.tryParse(userIdString); if (userId == null) { throw Exception('Invalid user ID format.'); } - if (role != null && (role == 'Org Admin' || role == 'Travel Admin')) { - final data = await getRemarks(userId); + // if (role != null && (role == 'Org Admin' || role == 'Travel Admin' || role == )) { + final data = await getRemarks(userId); - setState(() { - remarksData = data; + setState(() { + remarksData = data; - isLoading = false; - }); - print("Remarks -"); - print("Remarks - ${jsonEncode(remarksData)}"); - } else { - apiService.logout(context); - } + isLoading = false; + }); + print("Remarks -"); + print("Remarks - ${jsonEncode(remarksData)}"); + // } else { + // apiService.logout(context); + // } } catch (e) { setState(() { errorMessage = e.toString();