diff --git a/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Adv1/Adv1View/Adv1_api_service.dart b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Adv1/Adv1View/Adv1_api_service.dart new file mode 100644 index 0000000..69e2fb9 --- /dev/null +++ b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Adv1/Adv1View/Adv1_api_service.dart @@ -0,0 +1,120 @@ +import 'dart:typed_data'; +import 'package:dio/dio.dart'; +import 'package:http_parser/http_parser.dart'; +import '../../../../resources/api_constants.dart'; +import '../../../../data/network/base_network_service.dart'; +import '../../../../data/network/network_api_service.dart'; + +class adv1ApiService { + final String baseUrl = ApiConstants.baseUrl; + + final BaseNetworkService _helper = NetworkApiService(); + + + + Future>> getEntities() async { + + try { + final response = await _helper.getGetApiResponse('$baseUrl/Adv1/Adv1'); + final entities = (response as List).cast>(); + return entities; + } catch (e) { + throw Exception('Failed to get all entities: $e'); + } + } +Future>> getAllWithPagination( + int page, int size) async { + try { + final response = + await _helper.getGetApiResponse('$baseUrl/Adv1/Adv1/getall/page?page=$page&size=$size'); + final entities = + (response['content'] as List).cast>(); + return entities; + } catch (e) { + throw Exception('Failed to get all without pagination: $e'); + } + } + Future> createEntity( + Map entity) async { + try { + print("in post api$entity"); + final response = + await _helper.getPostApiResponse('$baseUrl/Adv1/Adv1', entity); + + print(entity); + + // Assuming the response is a Map + Map responseData = response; + + return responseData; + } catch (e) { + throw Exception('Failed to create entity: $e'); + } + } + + + + + + + + + + + + + + + + + + + + + + + + + + Future updateEntity( int entityId, Map entity) async { + try { + await _helper.getPutApiResponse('$baseUrl/Adv1/Adv1/$entityId', + entity); print(entity); + + } catch (e) { + throw Exception('Failed to update entity: $e'); + } + } + + Future deleteEntity( int entityId) async { + try { + await _helper.getDeleteApiResponse('$baseUrl/Adv1/Adv1/$entityId'); + } catch (e) { + throw Exception('Failed to delete entity: $e'); + } + } + + + + + + + + + + + + + + + + + + + + + + + + +} \ No newline at end of file diff --git a/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Adv1/Adv1View/Adv1_create_entity_screen.dart b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Adv1/Adv1View/Adv1_create_entity_screen.dart new file mode 100644 index 0000000..5dd99ef --- /dev/null +++ b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Adv1/Adv1View/Adv1_create_entity_screen.dart @@ -0,0 +1,1766 @@ +// ignore_for_file: use_build_context_synchronously +import 'dart:convert'; +import 'package:flutter/material.dart'; +import 'package:file_picker/file_picker.dart'; +import 'package:image_picker/image_picker.dart'; +import 'package:provider/provider.dart'; +import '../Adv1_viewModel/Adv1_view_model_screen.dart'; +import '../../../../utils/image_constant.dart'; +import '../../../../utils/size_utils.dart'; +import '../../../../theme/app_style.dart'; +import '../../../../widgets/app_bar/appbar_image.dart'; +import '../../../../widgets/app_bar/appbar_title.dart'; +import '../../../../widgets/app_bar/custom_app_bar.dart'; +import '../../../../widgets/custom_button.dart'; +import '../../../../widgets/custom_text_form_field.dart'; +import '../../../../widgets/custom_dropdown_field.dart'; +import 'dart:math'; +import 'package:qr_flutter/qr_flutter.dart'; +import 'package:barcode_widget/barcode_widget.dart'; +import 'package:intl/intl.dart'; + +import 'package:autocomplete_textfield/autocomplete_textfield.dart'; +import 'package:http/http.dart' as http; +import 'package:flutter/services.dart'; +import 'package:image_picker/image_picker.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import '../../../../Reuseable/reusable_date_picker_field.dart'; +import '../../../../Reuseable/reusable_date_time_picker_field.dart' +;import 'package:multi_select_flutter/multi_select_flutter.dart'; +import 'package:just_audio/just_audio.dart'; +import 'package:video_player/video_player.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:lottie/lottie.dart'; +import '../../../../utils/toast_messages/toast_message_util.dart'; +import 'dart:io'; +import '../../../../Reuseable/reusable_text_field.dart'; +import '../../../../Reuseable/reusable_dropdown_field.dart'; + + + + + + + + + + + + + + + + + + + + + + + + +class adv1CreateEntityScreen extends StatefulWidget { + const adv1CreateEntityScreen({super.key}); + + @override + _adv1CreateEntityScreenState createState() => _adv1CreateEntityScreenState(); +} + +class _adv1CreateEntityScreenState extends State { + +final Map formData = {}; + final _formKey = GlobalKey(); + String? selectedismale; + + Future _showismaleSelectionDialog(BuildContext context) async { + final result = await showDialog( + context: context, + builder: (BuildContext context) { + return SimpleDialog( + title: const Text('Select ismale'), + children: [ + + + RadioListTile( + title: const Text('no'), + value: 'no', + groupValue: selectedismale, + onChanged: (value) { + setState(() { + selectedismale = value; + Navigator.pop(context, value); + }); + }, + ), + + + + RadioListTile( + title: const Text('yes'), + value: 'yes', + groupValue: selectedismale, + onChanged: (value) { + setState(() { + selectedismale = value; + Navigator.pop(context, value); + }); + }, + ), + + + + ], + ); + }, + ); + + if (result != null) { + setState(() { + selectedismale = result; + }); + } + } + + String? selectedidfemale; + + Future _showidfemaleSelectionDialog(BuildContext context) async { + final result = await showDialog( + context: context, + builder: (BuildContext context) { + return SimpleDialog( + title: const Text('Select idfemale'), + children: [ + + + RadioListTile( + title: const Text('no'), + value: 'no', + groupValue: selectedidfemale, + onChanged: (value) { + setState(() { + selectedidfemale = value; + Navigator.pop(context, value); + }); + }, + ), + + + + RadioListTile( + title: const Text('yes'), + value: 'yes', + groupValue: selectedidfemale, + onChanged: (value) { + setState(() { + selectedidfemale = value; + Navigator.pop(context, value); + }); + }, + ), + + + + ], + ); + }, + ); + + if (result != null) { + setState(() { + selectedidfemale = result; + }); + } + } + + + + + bool test1cBox = false; + + + + + + + bool t1cBox = false; + + + + List> selectedfileupload_field = []; + + Future _pickfileupload_field(Map newFile, StateSetter setState) async { + FilePickerResult? result = await FilePicker.platform.pickFiles(); + + if (result != null) { + setState(() { + newFile['fileBytes'] = result.files.first.bytes; + newFile['fileFileName'] = result.files.first.name; + }); + ToastMessageUtil.showToast( + message: "File Uploaded", + toastType: ToastType.success); + } else { + print("No files selected"); + } + } + + Widget _fileupload_fieldbuildUploadRow(Map newFile) { + return StatefulBuilder(builder: (context, setState) { + String? selectedFileName = newFile['fileFileName']; + return Card( + margin: const EdgeInsets.symmetric(vertical: 8.0), + child: ListTile( + leading: Icon(Icons.file_copy, color: Colors.blueAccent), + title: Text(selectedFileName ?? 'No file selected', style: TextStyle(color: Colors.grey[700])), + trailing: ElevatedButton( + onPressed: () => _pickfileupload_field(newFile, setState), + child: const Text('Select File'), + ), + ), + ); + }); + } + + void _addfileupload_fieldUploadRow() { + Map newFile = {}; + setState(() { + selectedfileupload_field.add(newFile); + }); + } + + void _removefileupload_fieldUploadRow(int index) { + setState(() { + selectedfileupload_field.removeAt(index); + }); + } + + Future _uploadfileupload_field(int entityId) async { + // Check if selectedfileupload_field is null or empty + if (selectedfileupload_field == null || selectedfileupload_field.isEmpty) { + print("No files selected for upload."); + return; + } + + final provider = Provider.of(context, listen: false); + + for (var selectedfile in selectedfileupload_field) { + // Ensure selectedfile is not null and has valid data + if (selectedfile == null || + selectedfile['fileFileName'] == null || + selectedfile['fileBytes'] == null) { + print("Skipping a file due to missing data: $selectedfile"); + continue; // Skip this iteration + } + + try { + await provider.uploadfileupload_field( + entityId.toString(), + 'Adv1', + selectedfile['fileFileName'], + selectedfile['fileBytes'], + ); + print("File uploaded successfully: ${selectedfile['fileFileName']}"); + } catch (e) { + print("Failed to upload file: ${selectedfile['fileFileName']} - Error: $e"); + } + } +} + + + List> selectedfileupload_field2 = []; + + Future _pickfileupload_field2(Map newFile, StateSetter setState) async { + FilePickerResult? result = await FilePicker.platform.pickFiles(); + + if (result != null) { + setState(() { + newFile['fileBytes'] = result.files.first.bytes; + newFile['fileFileName'] = result.files.first.name; + }); + ToastMessageUtil.showToast( + message: "File Uploaded", + toastType: ToastType.success); + } else { + print("No files selected"); + } + } + + Widget _fileupload_field2buildUploadRow(Map newFile) { + return StatefulBuilder(builder: (context, setState) { + String? selectedFileName = newFile['fileFileName']; + return Card( + margin: const EdgeInsets.symmetric(vertical: 8.0), + child: ListTile( + leading: Icon(Icons.file_copy, color: Colors.blueAccent), + title: Text(selectedFileName ?? 'No file selected', style: TextStyle(color: Colors.grey[700])), + trailing: ElevatedButton( + onPressed: () => _pickfileupload_field2(newFile, setState), + child: const Text('Select File'), + ), + ), + ); + }); + } + + void _addfileupload_field2UploadRow() { + Map newFile = {}; + setState(() { + selectedfileupload_field2.add(newFile); + }); + } + + void _removefileupload_field2UploadRow(int index) { + setState(() { + selectedfileupload_field2.removeAt(index); + }); + } + + Future _uploadfileupload_field2(int entityId) async { + // Check if selectedfileupload_field2 is null or empty + if (selectedfileupload_field2 == null || selectedfileupload_field2.isEmpty) { + print("No files selected for upload."); + return; + } + + final provider = Provider.of(context, listen: false); + + for (var selectedfile in selectedfileupload_field2) { + // Ensure selectedfile is not null and has valid data + if (selectedfile == null || + selectedfile['fileFileName'] == null || + selectedfile['fileBytes'] == null) { + print("Skipping a file due to missing data: $selectedfile"); + continue; // Skip this iteration + } + + try { + await provider.uploadfileupload_field2( + entityId.toString(), + 'Adv1', + selectedfile['fileFileName'], + selectedfile['fileBytes'], + ); + print("File uploaded successfully: ${selectedfile['fileFileName']}"); + } catch (e) { + print("Failed to upload file: ${selectedfile['fileFileName']} - Error: $e"); + } + } +} + + + List> selectedimageupload_field = []; + + Future _showimageupload_fieldImage(Map newImage, StateSetter setState) async { + final ImagePicker picker = ImagePicker(); + + // Show a dialog to choose the source + final ImageSource? source = await showDialog( + context: context, + builder: (BuildContext context) => AlertDialog( + title: const Text('Select Image Source'), + actions: [ + TextButton( + onPressed: () => Navigator.of(context).pop(ImageSource.camera), + child: const Text('Camera'), + ), + TextButton( + onPressed: () => Navigator.of(context).pop(ImageSource.gallery), + child: const Text('Gallery'), + ), + ], + ), + ); + + if (source != null) { + final XFile? pickedImage = await picker.pickImage(source: source); + + if (pickedImage != null) { + Uint8List imageBytes = await pickedImage.readAsBytes(); + setState(() { + newImage['imageBytes'] = imageBytes; + newImage['imageFileName'] = pickedImage.name; + }); + ToastMessageUtil.showToast( + message: "File Uploaded", + toastType: ToastType.success); + } else { + print("No image selected"); + } + } + } + + Widget _buildUploadRowimageupload_field(Map newImage) { + return StatefulBuilder(builder: (context, setState) { + String? selectedFileName = newImage['imageFileName']; + Uint8List? imageBytes = newImage['imageBytes']; + return Card( + margin: const EdgeInsets.symmetric(vertical: 8.0), + child: ListTile( + leading: imageBytes != null + ? Image.memory(imageBytes, width: 50, height: 50, fit: BoxFit.cover) + : Icon(Icons.image, color: Colors.blueAccent), + title: Text(selectedFileName ?? 'No image selected', style: TextStyle(color: Colors.grey[700])), + trailing: ElevatedButton( + onPressed: () => _showimageupload_fieldImage(newImage, setState), + child: const Text('Select Image'), + ), + ), + ); + }); + } + + void _addUploadRowimageupload_field() { + Map newImage = {}; + setState(() { + selectedimageupload_field.add(newImage); + }); + } + + void _removeUploadRowimageupload_field(int index) { + setState(() { + selectedimageupload_field.removeAt(index); + }); + } + + Future _uploadimageupload_field(int entityId) async { + + // Check if the selectedimageupload_field list is null or empty + if (selectedimageupload_field == null || + selectedimageupload_field.isEmpty) { + print("No images selected for upload."); + return; + } +final provider = + Provider.of(context, listen: false); + for (var selectedImage in selectedimageupload_field) { + if (selectedImage == null || + selectedImage['imageFileName'] == null || + selectedImage['imageBytes'] == null) { + print("Skipping an image due to missing data: $selectedImage"); + continue; // Skip this iteration + } + + try { + + await provider.uploadimageupload_field( + entityId.toString(), + 'Adv1', + selectedImage['imageFileName'], + selectedImage['imageBytes'], + ); + print("Image uploaded successfully: ${selectedImage['imageFileName']}"); + } catch (e) { + print( + "Failed to upload image: ${selectedImage['imageFileName']} - Error: $e"); + } + } + } + + List> selectedimageupload_field2 = []; + + Future _showimageupload_field2Image(Map newImage, StateSetter setState) async { + final ImagePicker picker = ImagePicker(); + + // Show a dialog to choose the source + final ImageSource? source = await showDialog( + context: context, + builder: (BuildContext context) => AlertDialog( + title: const Text('Select Image Source'), + actions: [ + TextButton( + onPressed: () => Navigator.of(context).pop(ImageSource.camera), + child: const Text('Camera'), + ), + TextButton( + onPressed: () => Navigator.of(context).pop(ImageSource.gallery), + child: const Text('Gallery'), + ), + ], + ), + ); + + if (source != null) { + final XFile? pickedImage = await picker.pickImage(source: source); + + if (pickedImage != null) { + Uint8List imageBytes = await pickedImage.readAsBytes(); + setState(() { + newImage['imageBytes'] = imageBytes; + newImage['imageFileName'] = pickedImage.name; + }); + ToastMessageUtil.showToast( + message: "File Uploaded", + toastType: ToastType.success); + } else { + print("No image selected"); + } + } + } + + Widget _buildUploadRowimageupload_field2(Map newImage) { + return StatefulBuilder(builder: (context, setState) { + String? selectedFileName = newImage['imageFileName']; + Uint8List? imageBytes = newImage['imageBytes']; + return Card( + margin: const EdgeInsets.symmetric(vertical: 8.0), + child: ListTile( + leading: imageBytes != null + ? Image.memory(imageBytes, width: 50, height: 50, fit: BoxFit.cover) + : Icon(Icons.image, color: Colors.blueAccent), + title: Text(selectedFileName ?? 'No image selected', style: TextStyle(color: Colors.grey[700])), + trailing: ElevatedButton( + onPressed: () => _showimageupload_field2Image(newImage, setState), + child: const Text('Select Image'), + ), + ), + ); + }); + } + + void _addUploadRowimageupload_field2() { + Map newImage = {}; + setState(() { + selectedimageupload_field2.add(newImage); + }); + } + + void _removeUploadRowimageupload_field2(int index) { + setState(() { + selectedimageupload_field2.removeAt(index); + }); + } + + Future _uploadimageupload_field2(int entityId) async { + + // Check if the selectedimageupload_field list is null or empty + if (selectedimageupload_field2 == null || + selectedimageupload_field2.isEmpty) { + print("No images selected for upload."); + return; + } +final provider = + Provider.of(context, listen: false); + for (var selectedImage in selectedimageupload_field2) { + if (selectedImage == null || + selectedImage['imageFileName'] == null || + selectedImage['imageBytes'] == null) { + print("Skipping an image due to missing data: $selectedImage"); + continue; // Skip this iteration + } + + try { + + await provider.uploadimageupload_field2( + entityId.toString(), + 'Adv1', + selectedImage['imageFileName'], + selectedImage['imageBytes'], + ); + print("Image uploaded successfully: ${selectedImage['imageFileName']}"); + } catch (e) { + print( + "Failed to upload image: ${selectedImage['imageFileName']} - Error: $e"); + } + } + } + + AudioPlayer _audioPlayeraudio_field = AudioPlayer(); + String? _filePathaudio_field; + String? _fileNameaudio_field; + bool _isPlayingaudio_field = false; + Duration _durationaudio_field = Duration(); + Duration _positionaudio_field = Duration(); + + Future _pickAudioaudio_field() async { + FilePickerResult? result = await FilePicker.platform.pickFiles(type: FileType.audio); + + if (result != null) { + setState(() { + _filePathaudio_field = result.files.single.path; + _fileNameaudio_field = result.files.single.name; + }); + await _audioPlayeraudio_field.setFilePath(_filePathaudio_field!); + _playPauseAudioaudio_field(); + } + } + + void _playPauseAudioaudio_field() { + if (_isPlayingaudio_field) { + _audioPlayeraudio_field.pause(); + } else { + _audioPlayeraudio_field.play(); + } + setState(() { + _isPlayingaudio_field = !_isPlayingaudio_field; + }); + } + void _stopAudioaudio_field() { + _audioPlayeraudio_field.stop(); + setState(() { + _isPlayingaudio_field = false; + _positionaudio_field = Duration(seconds: 0); + }); + } + + void _seekAudioaudio_field(Duration position) { + _audioPlayeraudio_field.seek(position); + } + + Future _uploadaudio_field(int entityId) async { + + try { + // Check if the file path and file name are available + if (_filePathaudio_field == null ) { + print('No file selected for upload.'); + return; + } + // Read the file as bytes + Uint8List fileBytes = await File(_filePathaudio_field!).readAsBytes(); + String fileName = _fileNameaudio_field!; + final provider = Provider.of(context, listen: false); + + await provider.uploadaudio_field( + + + entityId.toString(), + 'Adv1', + fileName, + fileBytes, + ); + print('Audio uploaded successfully'); + + } catch (error) { + print('Error uploading video: $error'); + } + } + + AudioPlayer _audioPlayeraudio_field2 = AudioPlayer(); + String? _filePathaudio_field2; + String? _fileNameaudio_field2; + bool _isPlayingaudio_field2 = false; + Duration _durationaudio_field2 = Duration(); + Duration _positionaudio_field2 = Duration(); + + Future _pickAudioaudio_field2() async { + FilePickerResult? result = await FilePicker.platform.pickFiles(type: FileType.audio); + + if (result != null) { + setState(() { + _filePathaudio_field2 = result.files.single.path; + _fileNameaudio_field2 = result.files.single.name; + }); + await _audioPlayeraudio_field2.setFilePath(_filePathaudio_field2!); + _playPauseAudioaudio_field2(); + } + } + + void _playPauseAudioaudio_field2() { + if (_isPlayingaudio_field2) { + _audioPlayeraudio_field2.pause(); + } else { + _audioPlayeraudio_field2.play(); + } + setState(() { + _isPlayingaudio_field2 = !_isPlayingaudio_field2; + }); + } + void _stopAudioaudio_field2() { + _audioPlayeraudio_field2.stop(); + setState(() { + _isPlayingaudio_field2 = false; + _positionaudio_field2 = Duration(seconds: 0); + }); + } + + void _seekAudioaudio_field2(Duration position) { + _audioPlayeraudio_field2.seek(position); + } + + Future _uploadaudio_field2(int entityId) async { + + try { + // Check if the file path and file name are available + if (_filePathaudio_field2 == null ) { + print('No file selected for upload.'); + return; + } + // Read the file as bytes + Uint8List fileBytes = await File(_filePathaudio_field2!).readAsBytes(); + String fileName = _fileNameaudio_field2!; + final provider = Provider.of(context, listen: false); + + await provider.uploadaudio_field2( + + + entityId.toString(), + 'Adv1', + fileName, + fileBytes, + ); + print('Audio uploaded successfully'); + + } catch (error) { + print('Error uploading video: $error'); + } + } + + VideoPlayerController? _controllervideo_field; + final ImagePicker _pickervideo_field = ImagePicker(); + bool _isPlayingvideo_field = false; + bool _isFullScreenvideo_field = false; + bool _showControlsvideo_field = true; + + XFile? pickedFilevideo_field; + + Future _pickVideovideo_field() async { + pickedFilevideo_field = await _pickervideo_field.pickVideo(source: ImageSource.gallery); + + if (pickedFilevideo_field != null) { + _controllervideo_field = VideoPlayerController.file(File(pickedFilevideo_field!.path)) + ..initialize().then((_) { + setState(() {}); + _controllervideo_field!.play(); + _isPlayingvideo_field = true; + }); + } + } + + void _playPauseVideovideo_field() { + if (_controllervideo_field != null && _controllervideo_field!.value.isInitialized) { + setState(() { + if (_controllervideo_field!.value.isPlaying) { + _controllervideo_field!.pause(); + _isPlayingvideo_field = false; + } else { + _controllervideo_field!.play(); + _isPlayingvideo_field = true; + } + }); + } + } + + void _skipForwardvideo_field() { + if (_controllervideo_field != null && _controllervideo_field!.value.isInitialized) { + final position = _controllervideo_field!.value.position; + final duration = _controllervideo_field!.value.duration; + if (position != null && duration != null) { + final newPosition = position + const Duration(seconds: 10); + _controllervideo_field!.seekTo(newPosition > duration ? duration : newPosition); + } + } + } + + void _skipBackwardvideo_field() { + if (_controllervideo_field != null && _controllervideo_field!.value.isInitialized) { + final position = _controllervideo_field!.value.position; + if (position != null) { + final newPosition = position - const Duration(seconds: 10); + _controllervideo_field!.seekTo(newPosition < const Duration(seconds: 0) + ? const Duration(seconds: 0) + : newPosition); + } + } + } + + void _toggleFullScreenvideo_field() { + setState(() { + _isFullScreenvideo_field = !_isFullScreenvideo_field; + }); + } + +Future _uploadvideo_field(int entityId) async { + try { + // Check if a file is selected + if (pickedFilevideo_field == null) { + print('No file selected for upload.'); + return; + } + + // Extract file path and name safely + String filePath = pickedFilevideo_field!.path; + String fileName = pickedFilevideo_field!.name; + + // Ensure file exists before reading + File file = File(filePath); + if (!await file.exists()) { + print('File not found at path: $filePath'); + return; + } + + // Read the file as bytes safely + Uint8List? fileBytes; + try { + fileBytes = await file.readAsBytes(); + } catch (e) { + print('Error reading file: $e'); + return; + } + + // Ensure fileBytes is not empty + if (fileBytes.isEmpty) { + print('File is empty, upload aborted.'); + return; + } + + // Get the provider instance safely + final provider = Provider.of(context, listen: false); + + // Upload the file + await provider.uploadvideo_field( + entityId.toString(), + 'Adv1', + fileName, + fileBytes, + ); + + print('Video uploaded successfully: $fileName'); + } catch (error) { + print('Error uploading Video: $error'); + } +} + + + VideoPlayerController? _controllervideo_field2; + final ImagePicker _pickervideo_field2 = ImagePicker(); + bool _isPlayingvideo_field2 = false; + bool _isFullScreenvideo_field2 = false; + bool _showControlsvideo_field2 = true; + + XFile? pickedFilevideo_field2; + + Future _pickVideovideo_field2() async { + pickedFilevideo_field2 = await _pickervideo_field2.pickVideo(source: ImageSource.gallery); + + if (pickedFilevideo_field2 != null) { + _controllervideo_field2 = VideoPlayerController.file(File(pickedFilevideo_field2!.path)) + ..initialize().then((_) { + setState(() {}); + _controllervideo_field2!.play(); + _isPlayingvideo_field2 = true; + }); + } + } + + void _playPauseVideovideo_field2() { + if (_controllervideo_field2 != null && _controllervideo_field2!.value.isInitialized) { + setState(() { + if (_controllervideo_field2!.value.isPlaying) { + _controllervideo_field2!.pause(); + _isPlayingvideo_field2 = false; + } else { + _controllervideo_field2!.play(); + _isPlayingvideo_field2 = true; + } + }); + } + } + + void _skipForwardvideo_field2() { + if (_controllervideo_field2 != null && _controllervideo_field2!.value.isInitialized) { + final position = _controllervideo_field2!.value.position; + final duration = _controllervideo_field2!.value.duration; + if (position != null && duration != null) { + final newPosition = position + const Duration(seconds: 10); + _controllervideo_field2!.seekTo(newPosition > duration ? duration : newPosition); + } + } + } + + void _skipBackwardvideo_field2() { + if (_controllervideo_field2 != null && _controllervideo_field2!.value.isInitialized) { + final position = _controllervideo_field2!.value.position; + if (position != null) { + final newPosition = position - const Duration(seconds: 10); + _controllervideo_field2!.seekTo(newPosition < const Duration(seconds: 0) + ? const Duration(seconds: 0) + : newPosition); + } + } + } + + void _toggleFullScreenvideo_field2() { + setState(() { + _isFullScreenvideo_field2 = !_isFullScreenvideo_field2; + }); + } + +Future _uploadvideo_field2(int entityId) async { + try { + // Check if a file is selected + if (pickedFilevideo_field2 == null) { + print('No file selected for upload.'); + return; + } + + // Extract file path and name safely + String filePath = pickedFilevideo_field2!.path; + String fileName = pickedFilevideo_field2!.name; + + // Ensure file exists before reading + File file = File(filePath); + if (!await file.exists()) { + print('File not found at path: $filePath'); + return; + } + + // Read the file as bytes safely + Uint8List? fileBytes; + try { + fileBytes = await file.readAsBytes(); + } catch (e) { + print('Error reading file: $e'); + return; + } + + // Ensure fileBytes is not empty + if (fileBytes.isEmpty) { + print('File is empty, upload aborted.'); + return; + } + + // Get the provider instance safely + final provider = Provider.of(context, listen: false); + + // Upload the file + await provider.uploadvideo_field2( + entityId.toString(), + 'Adv1', + fileName, + fileBytes, + ); + + print('Video uploaded successfully: $fileName'); + } catch (error) { + print('Error uploading Video: $error'); + } +} + + + @override + void initState() { + super.initState(); + final provider = Provider.of(context, listen: false); + + + + + + + + + + + + + + + + +_audioPlayeraudio_field.durationStream.listen((Duration? d) { + setState(() { + _durationaudio_field = d ?? Duration.zero; + }); + }); + + + _audioPlayeraudio_field.positionStream.listen((Duration p) { + setState(() { + _positionaudio_field = p; + }); + }); + + _audioPlayeraudio_field.playerStateStream.listen((PlayerState state) { + if (state.processingState == ProcessingState.completed) { + setState(() { + _isPlayingaudio_field = false; + _positionaudio_field = Duration(seconds: 0); + }); + } + }); + +_audioPlayeraudio_field2.durationStream.listen((Duration? d) { + setState(() { + _durationaudio_field2 = d ?? Duration.zero; + }); + }); + + + _audioPlayeraudio_field2.positionStream.listen((Duration p) { + setState(() { + _positionaudio_field2 = p; + }); + }); + + _audioPlayeraudio_field2.playerStateStream.listen((PlayerState state) { + if (state.processingState == ProcessingState.completed) { + setState(() { + _isPlayingaudio_field2 = false; + _positionaudio_field2 = Duration(seconds: 0); + }); + } + }); + + + + + +} + + + + @override + Widget build(BuildContext context) { + final provider = Provider.of(context, listen: false); + return Scaffold( + appBar: CustomAppBar( + height: getVerticalSize(49), + leadingWidth: 40, + leading: AppbarImage( + height: getSize(24), + width: getSize(24), + svgPath: ImageConstant.imgArrowleftBlueGray900, + margin: getMargin(left: 16, top: 12, bottom: 13), + onTap: () { + Navigator.pop(context); + }), + centerTitle: true, + title: AppbarTitle(text: "Create Adv1"), + + + + + + + + + + + + + + + + + + + + + + + +), + body: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(16), + child: Form( + key: _formKey, + child: Column( + children: [ + Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "ismale", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + color: Colors.blueGrey[900], + ), + ), + const SizedBox(height: 6), + GestureDetector( + onTap: () => _showismaleSelectionDialog(context), + child: AbsorbPointer( + child: TextFormField( + decoration: InputDecoration( + hintText: "Enter ismale", + border: OutlineInputBorder(), + contentPadding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 12.0), + ), + controller: TextEditingController(text: selectedismale), + onSaved: (value) { + formData['ismale'] = value; + }, + ), + ), + ), + const SizedBox(height: 16), + + ], + ), + ), + +Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "idfemale", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + color: Colors.blueGrey[900], + ), + ), + const SizedBox(height: 6), + GestureDetector( + onTap: () => _showidfemaleSelectionDialog(context), + child: AbsorbPointer( + child: TextFormField( + decoration: InputDecoration( + hintText: "Enter idfemale", + border: OutlineInputBorder(), + contentPadding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 12.0), + ), + controller: TextEditingController(text: selectedidfemale), + onSaved: (value) { + formData['idfemale'] = value; + }, + ), + ), + ), + const SizedBox(height: 16), + + ], + ), + ), + + Row( + children: [ + + + + Checkbox( + value: test1cBox, + onChanged: (newValue) { + setState(() { + test1cBox = newValue!; + }); + }, + ), + const SizedBox(width: 8), + Text('Test1'), + + + ], + ), + SizedBox(height: 16), + + Row( + children: [ + + + + Checkbox( + value: t1cBox, + onChanged: (newValue) { + setState(() { + t1cBox = newValue!; + }); + }, + ), + const SizedBox(width: 8), + Text('T1'), + + + ], + ), + SizedBox(height: 16), + + SizedBox( + height: MediaQuery.of(context).size.height*0.5, +child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + children: [ + Expanded( + child: ListView.builder( + itemCount: selectedfileupload_field.length, + itemBuilder: (context, index) { + return Stack( + children: [ + _fileupload_fieldbuildUploadRow(selectedfileupload_field[index]), + Positioned( + right: 8, + top: 8, + child: IconButton( + icon: const Icon(Icons.remove_circle, color: Colors.redAccent), + onPressed: () { + _removefileupload_fieldUploadRow(index); + }, + ), + ), + ], + ); + }, + ), + ), + const SizedBox(height: 16), + ElevatedButton.icon( + icon: const Icon(Icons.add), + label: const Text('Add File Upload Row'), + onPressed: _addfileupload_fieldUploadRow, + style: ElevatedButton.styleFrom( + foregroundColor: Colors.white, backgroundColor: Colors.blueAccent, + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 12), + textStyle: const TextStyle(fontSize: 16), + ), + ), + const SizedBox(height: 16), + + ], + ), + ),), + const SizedBox(height: 16), + + SizedBox( + height: MediaQuery.of(context).size.height*0.5, +child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + children: [ + Expanded( + child: ListView.builder( + itemCount: selectedfileupload_field2.length, + itemBuilder: (context, index) { + return Stack( + children: [ + _fileupload_field2buildUploadRow(selectedfileupload_field2[index]), + Positioned( + right: 8, + top: 8, + child: IconButton( + icon: const Icon(Icons.remove_circle, color: Colors.redAccent), + onPressed: () { + _removefileupload_field2UploadRow(index); + }, + ), + ), + ], + ); + }, + ), + ), + const SizedBox(height: 16), + ElevatedButton.icon( + icon: const Icon(Icons.add), + label: const Text('Add File Upload Row'), + onPressed: _addfileupload_field2UploadRow, + style: ElevatedButton.styleFrom( + foregroundColor: Colors.white, backgroundColor: Colors.blueAccent, + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 12), + textStyle: const TextStyle(fontSize: 16), + ), + ), + const SizedBox(height: 16), + + ], + ), + ),), + const SizedBox(height: 16), + + SizedBox( + height: MediaQuery.of(context).size.height*0.5, +child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + children: [ + Expanded( + child: ListView.builder( + itemCount: selectedimageupload_field.length, + itemBuilder: (context, index) { + return Stack( + children: [ + _buildUploadRowimageupload_field(selectedimageupload_field[index]), + Positioned( + right: 8, + top: 8, + child: IconButton( + icon: const Icon(Icons.remove_circle, color: Colors.redAccent), + onPressed: () { + _removeUploadRowimageupload_field(index); + }, + ), + ), + ], + ); + }, + ), + ), + const SizedBox(height: 16), + ElevatedButton.icon( + icon: const Icon(Icons.add), + label: const Text('Add Image Upload Row'), + onPressed: _addUploadRowimageupload_field, + style: ElevatedButton.styleFrom( + foregroundColor: Colors.white, + backgroundColor: Colors.blueAccent, + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 12), + textStyle: const TextStyle(fontSize: 16), + ), + ), + const SizedBox(height: 16), + + ], + ), + ), + ), + + const SizedBox(height: 16), + + SizedBox( + height: MediaQuery.of(context).size.height*0.5, +child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + children: [ + Expanded( + child: ListView.builder( + itemCount: selectedimageupload_field2.length, + itemBuilder: (context, index) { + return Stack( + children: [ + _buildUploadRowimageupload_field2(selectedimageupload_field2[index]), + Positioned( + right: 8, + top: 8, + child: IconButton( + icon: const Icon(Icons.remove_circle, color: Colors.redAccent), + onPressed: () { + _removeUploadRowimageupload_field2(index); + }, + ), + ), + ], + ); + }, + ), + ), + const SizedBox(height: 16), + ElevatedButton.icon( + icon: const Icon(Icons.add), + label: const Text('Add Image Upload Row'), + onPressed: _addUploadRowimageupload_field2, + style: ElevatedButton.styleFrom( + foregroundColor: Colors.white, + backgroundColor: Colors.blueAccent, + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 12), + textStyle: const TextStyle(fontSize: 16), + ), + ), + const SizedBox(height: 16), + + ], + ), + ), + ), + + const SizedBox(height: 16), + + Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + children: [ + if (_fileNameaudio_field != null) + Text( + _fileNameaudio_field!, + style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), + ), + if (_filePathaudio_field != null) + Slider( + value: _positionaudio_field.inSeconds.toDouble(), + min: 0.0, + max: _durationaudio_field.inSeconds.toDouble(), + onChanged: (double value) { + setState(() { + _seekAudioaudio_field(Duration(seconds: value.toInt())); + }); + }, + ), + if (_filePathaudio_field != null) + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + IconButton( + icon: Icon(Icons.skip_previous), + onPressed: () { + final newPosition = _positionaudio_field - Duration(seconds: 10); + _seekAudioaudio_field(newPosition < Duration(seconds: 0) ? Duration(seconds: 0) : newPosition); + }, + ), + IconButton( + icon: Icon(_isPlayingaudio_field ? Icons.pause : Icons.play_arrow), + onPressed: _playPauseAudioaudio_field, + ), + IconButton( + icon: Icon(Icons.skip_next), + onPressed: () { + final newPosition = _positionaudio_field + Duration(seconds: 10); + _seekAudioaudio_field(newPosition > _durationaudio_field ? _durationaudio_field : newPosition); + }, + ), + IconButton( + icon: Icon(Icons.stop), + onPressed: _stopAudioaudio_field, + ), + ], + ), + const SizedBox(height: 20), + ElevatedButton.icon( + icon: Icon(Icons.audiotrack), + label: Text('Pick Audio'), + onPressed: _pickAudioaudio_field, + ), + ], + ), + ), + + Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + children: [ + if (_fileNameaudio_field2 != null) + Text( + _fileNameaudio_field2!, + style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), + ), + if (_filePathaudio_field2 != null) + Slider( + value: _positionaudio_field2.inSeconds.toDouble(), + min: 0.0, + max: _durationaudio_field2.inSeconds.toDouble(), + onChanged: (double value) { + setState(() { + _seekAudioaudio_field2(Duration(seconds: value.toInt())); + }); + }, + ), + if (_filePathaudio_field2 != null) + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + IconButton( + icon: Icon(Icons.skip_previous), + onPressed: () { + final newPosition = _positionaudio_field2 - Duration(seconds: 10); + _seekAudioaudio_field2(newPosition < Duration(seconds: 0) ? Duration(seconds: 0) : newPosition); + }, + ), + IconButton( + icon: Icon(_isPlayingaudio_field2 ? Icons.pause : Icons.play_arrow), + onPressed: _playPauseAudioaudio_field2, + ), + IconButton( + icon: Icon(Icons.skip_next), + onPressed: () { + final newPosition = _positionaudio_field2 + Duration(seconds: 10); + _seekAudioaudio_field2(newPosition > _durationaudio_field2 ? _durationaudio_field2 : newPosition); + }, + ), + IconButton( + icon: Icon(Icons.stop), + onPressed: _stopAudioaudio_field2, + ), + ], + ), + const SizedBox(height: 20), + ElevatedButton.icon( + icon: Icon(Icons.audiotrack), + label: Text('Pick Audio'), + onPressed: _pickAudioaudio_field2, + ), + ], + ), + ), + +Column( + children: [ + Center( + child: _controllervideo_field == null + ? const Text('No video selected') + : _controllervideo_field!.value.isInitialized + ? GestureDetector( + onTap: () { + setState(() { + _showControlsvideo_field = !_showControlsvideo_field; + }); + }, + child: Stack( + alignment: Alignment.center, + children: [ + AspectRatio( + aspectRatio: 16 / 9, + child: VideoPlayer(_controllervideo_field!), + ), + if (_showControlsvideo_field) + Positioned( + bottom: 0, + left: 0, + right: 0, + child: Container( + color: Colors.black54, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + IconButton( + icon: const Icon(Icons.replay_10, color: Colors.white), + onPressed: _skipBackwardvideo_field, + ), + IconButton( + icon: Icon( + _isPlayingvideo_field ? Icons.pause : Icons.play_arrow, + color: Colors.white, + ), + onPressed: _playPauseVideovideo_field, + ), + IconButton( + icon: const Icon(Icons.forward_10, color: Colors.white), + onPressed: _skipForwardvideo_field, + ), + IconButton( + icon: Icon( + _isFullScreenvideo_field ? Icons.fullscreen_exit : Icons.fullscreen, + color: Colors.white, + ), + onPressed: _toggleFullScreenvideo_field, + ), + ], + ), + ), + ), + ], + ), + ) + : const CircularProgressIndicator(), + ), + const SizedBox(height: 20), + ElevatedButton( + onPressed: _pickVideovideo_field, + child: Row( + mainAxisSize: MainAxisSize.min, + children: const [ + Icon(Icons.video_library), + SizedBox(width: 8), + Text('Pick Video'), + ], + ), + ), + ], + ), + +Column( + children: [ + Center( + child: _controllervideo_field2 == null + ? const Text('No video selected') + : _controllervideo_field2!.value.isInitialized + ? GestureDetector( + onTap: () { + setState(() { + _showControlsvideo_field2 = !_showControlsvideo_field2; + }); + }, + child: Stack( + alignment: Alignment.center, + children: [ + AspectRatio( + aspectRatio: 16 / 9, + child: VideoPlayer(_controllervideo_field2!), + ), + if (_showControlsvideo_field2) + Positioned( + bottom: 0, + left: 0, + right: 0, + child: Container( + color: Colors.black54, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + IconButton( + icon: const Icon(Icons.replay_10, color: Colors.white), + onPressed: _skipBackwardvideo_field2, + ), + IconButton( + icon: Icon( + _isPlayingvideo_field2 ? Icons.pause : Icons.play_arrow, + color: Colors.white, + ), + onPressed: _playPauseVideovideo_field2, + ), + IconButton( + icon: const Icon(Icons.forward_10, color: Colors.white), + onPressed: _skipForwardvideo_field2, + ), + IconButton( + icon: Icon( + _isFullScreenvideo_field2 ? Icons.fullscreen_exit : Icons.fullscreen, + color: Colors.white, + ), + onPressed: _toggleFullScreenvideo_field2, + ), + ], + ), + ), + ), + ], + ), + ) + : const CircularProgressIndicator(), + ), + const SizedBox(height: 20), + ElevatedButton( + onPressed: _pickVideovideo_field2, + child: Row( + mainAxisSize: MainAxisSize.min, + children: const [ + Icon(Icons.video_library), + SizedBox(width: 8), + Text('Pick Video'), + ], + ), + ), + ], + ), + + const SizedBox(width: 8), + CustomButton( + height: getVerticalSize(50), + text: "Submit", + margin: getMargin(top: 24, bottom: 5), + onTap: () async { + if (_formKey.currentState!.validate()) { + _formKey.currentState!.save(); + + + + + + + formData['test1'] = test1cBox; + + + + + + formData['t1'] = t1cBox; + + + + + + + + + + + + + + + + + + + + + try { + print(formData); + Map createdEntity = await provider.createEntity(formData); + + + + + + + + + await _uploadfileupload_field(createdEntity['id']); + + + await _uploadfileupload_field2(createdEntity['id']); + + + await _uploadimageupload_field(createdEntity['id']); + + + await _uploadimageupload_field2(createdEntity['id']); + + + await _uploadaudio_field(createdEntity['id']); + + + await _uploadaudio_field2(createdEntity['id']); + + + await _uploadvideo_field(createdEntity['id']); + + + await _uploadvideo_field2(createdEntity['id']); + + + + + Navigator.pop(context); + } catch (e) { + // ignore: use_build_context_synchronously + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: const Text('Error'), + content: Text('Failed to create Adv1: $e'), + actions: [ + TextButton( + child: const Text('OK'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ], + ); + }, + ); + } + } + }, + ), + + + + + + + + + + + + + + + + + + + + + + + + + ], + ), + ), + ), + ), + ); + } +} \ No newline at end of file diff --git a/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Adv1/Adv1View/Adv1_entity_list_screen.dart b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Adv1/Adv1View/Adv1_entity_list_screen.dart new file mode 100644 index 0000000..0cc542f --- /dev/null +++ b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Adv1/Adv1View/Adv1_entity_list_screen.dart @@ -0,0 +1,757 @@ +// ignore_for_file: use_build_context_synchronously +import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; +import 'Adv1_create_entity_screen.dart'; +import 'Adv1_update_entity_screen.dart'; +import '../Adv1_viewModel/Adv1_view_model_screen.dart'; +import 'package:flutter/services.dart'; +import 'package:speech_to_text/speech_to_text.dart' as stt; +import '../../../../theme/app_style.dart'; +import '../../../../utils/size_utils.dart'; +import '../../../../widgets/custom_icon_button.dart'; +import '../../../../utils/image_constant.dart'; +import '../../../../widgets/app_bar/appbar_image.dart'; +import '../../../../widgets/app_bar/appbar_title.dart'; +import '../../../../widgets/app_bar/custom_app_bar.dart'; +import '../../../../theme/app_decoration.dart'; +import 'package:multi_select_flutter/multi_select_flutter.dart'; +import '../../../../Reuseable/reusable_text_field.dart'; +import 'package:provider/provider.dart'; +import 'package:fluttertoast/fluttertoast.dart'; + +class adv1_entity_list_screen extends StatefulWidget { + static const String routeName = '/entity-list'; + + @override + _adv1_entity_list_screenState createState() => _adv1_entity_list_screenState(); +} + +class _adv1_entity_list_screenState extends State { + List> entities = []; + List> filteredEntities = []; + List> serachEntities = []; + + bool showCardView = true; // Add this variable to control the view mode + TextEditingController searchController = TextEditingController(); + late stt.SpeechToText _speech; + + bool isLoading = false; // Add this variable to track loading state + int currentPage = 0; + int pageSize = 10; // Adjust this based on your backend API + + final ScrollController _scrollController = ScrollController(); + @override + void initState() { + _speech = stt.SpeechToText(); + super.initState(); + fetchEntities(); + _scrollController.addListener(_scrollListener); + fetchwithoutpaging(); + } + + + + + + + + + + + + + + + + + + + + + + + + + + Future fetchwithoutpaging() async { + try { + final provider = + Provider.of(context, listen: false); + final fetchedEntities = await provider.getEntities(); + print('withoutpaging data is $fetchedEntities'); + setState(() { + serachEntities = fetchedEntities; // Update only filteredEntities + }); + print('Adv1 entity is .. $serachEntities'); + } catch (e) { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: const Text('Error'), + content: Text('Failed to fetch Adv1: $e'), + actions: [ + TextButton( + child: const Text('OK'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ], + ); + }, + ); + } + } +Future fetchEntities() async { + try { + setState(() { + isLoading = true; + }); + + + + final provider = + Provider.of(context, listen: false); + final fetchedEntities = + await provider.getAllWithPagination(currentPage, pageSize); + print('pagination data is $fetchedEntities'); + setState(() { + entities.addAll(fetchedEntities); // Add new data to the existing list + filteredEntities = entities.toList(); // Update only filteredEntities + currentPage++; + }); + + print(' entity is .. $filteredEntities'); + } catch (e) { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: const Text('Error'), + content: Text('Failed to fetch Adv1 data: $e'), + actions: [ + TextButton( + child: const Text('OK'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ], + ); + }, + ); + } finally { + setState(() { + isLoading = false; + }); + } + } + + void _scrollListener() { + if (_scrollController.position.pixels == + _scrollController.position.maxScrollExtent) { + fetchEntities(); + } + } + + Future deleteEntity(Map entity) async { + try { + final provider = + Provider.of(context, listen: false); + + await provider.deleteEntity(entity['id']);; + setState(() { + entities.remove(entity); + }); + } catch (e) { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: const Text('Error'), + content: Text('Failed to delete entity: $e'), + actions: [ + TextButton( + child: const Text('OK'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ], + ); + }, + ); + } + } + + void _searchEntities(String keyword) { + setState(() { + filteredEntities = serachEntities + .where((entity) => + + + + entity['ismale'].toString().toLowerCase().contains(keyword.toLowerCase()) || + + + + + + entity['idfemale'].toString().toLowerCase().contains(keyword.toLowerCase()) || + + + + + + + + + + + + + + + + + + entity['audio_field'].toString().toLowerCase().contains(keyword.toLowerCase()) || + + + + + + entity['audio_field2'].toString().toLowerCase().contains(keyword.toLowerCase()) || + + + + + + entity['video_field'].toString().toLowerCase().contains(keyword.toLowerCase()) || + + + + + + entity['video_field2'].toString().toLowerCase().contains(keyword.toLowerCase()) + + + ).toList(); + }); + } + + void _startListening() async { + if (!_speech.isListening) { + bool available = await _speech.initialize( + onStatus: (status) { + print('Speech recognition status: $status'); + }, + onError: (error) { + print('Speech recognition error: $error'); + }, + ); + + if (available) { + _speech.listen( + onResult: (result) { + if (result.finalResult) { + searchController.text = result.recognizedWords; + _searchEntities(result.recognizedWords); + } + }, + ); + } + } + } + + void _stopListening() { + if (_speech.isListening) { + _speech.stop(); + } + } + + @override + void dispose() { + _speech.cancel(); + super.dispose(); + } + +onTapArrowleft1(BuildContext context) { + Navigator.pop(context); + } + @override + Widget build(BuildContext context) { + return SafeArea( + child: Scaffold( + appBar: CustomAppBar( + height: getVerticalSize(49), + leadingWidth: 40, + leading: AppbarImage( + height: getSize(24), + width: getSize(24), + svgPath: ImageConstant.imgArrowleft, + margin: getMargin(left: 16, top: 12, bottom: 13), + onTap: () { + onTapArrowleft1(context); + }), + centerTitle: true, + title: AppbarTitle(text: " Adv1"), + actions: [ + Row( + children: [ + Switch( + activeColor: Colors.greenAccent, + inactiveThumbColor: Colors.white, + value: showCardView, + onChanged: (value) { + setState(() { + showCardView = value; + }); + }, + ), + + + + + + + + + + + + + + + + + + + + + + + + + + ], + ), ], + ), + body: RefreshIndicator( + onRefresh: () async { + currentPage = 1; + entities.clear(); + await fetchEntities(); + }, + child: Column( + children: [ + Padding( + padding: const EdgeInsets.all(8.0), + child: TextField( + controller: searchController, + onChanged: (value) { + _searchEntities(value); + }, + decoration: InputDecoration( + hintText: 'Search...', + contentPadding: const EdgeInsets.symmetric(horizontal: 16.0), + filled: true, + fillColor: Colors.grey[200], + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(10.0), + borderSide: BorderSide.none, + ), + suffixIcon: IconButton( + icon: const Icon(Icons.mic), + onPressed: () { + _startListening(); + }, + ), + ), + ), + ), + Expanded( + child: ListView.builder( + itemCount: filteredEntities.length + (isLoading ? 1 : 0), + itemBuilder: (BuildContext context, int index) { + if (index < filteredEntities.length) { + final entity = filteredEntities[index]; + return _buildListItem(entity); + } else { + // Display the loading indicator at the bottom when new data is loading + return const Padding( + padding: EdgeInsets.all(8.0), + child: Center( + child: CircularProgressIndicator(), + ), + ); + } + }, + controller: _scrollController, + ), + ), + ], + ), + ), + floatingActionButton: FloatingActionButton( + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => ChangeNotifierProvider( + create: (context) => Adv1ViewModelScreen(), + child: adv1CreateEntityScreen(), + ), + ), + ).then((_) { + fetchEntities(); + }); + }, + child: const Icon(Icons.add), + ), + )); + } + + Widget _buildListItem(Map entity) { + return showCardView ? _buildCardView(entity) : _buildNormalView(entity); + } + + + // Function to build card view for a list item + Widget _buildCardView(Map entity) { + return Card( + elevation: 2, + margin: const EdgeInsets.symmetric(vertical: 8, horizontal: 16), + child: _buildNormalView(entity)) + ; } + + // Function to build normal view for a list item + + // Function to build normal view for a list item + + Widget _buildNormalView(Map entity) { + final values = entity.values.elementAt(21) ?? 'Authsec'; + + return SizedBox( + width: double.maxFinite, + child: Container( + padding: getPadding( + left: 16, + top: 5, + right: 5, + bottom: 17, + ), + decoration: AppDecoration.outlineGray70011.copyWith( + borderRadius: BorderRadiusStyle.roundedBorder6, + color: Colors.grey[100]), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: getPadding( + //right: 13, + ), + child: Row( + children: [ + Container( + width: MediaQuery.of(context).size.width * 0.30, + margin: getMargin( + left: 8, + top: 3, + bottom: 1, + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text( + entity['id'].toString(), + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGreenSemiBold16, + ), + ], + ), + ), + const Spacer(), + PopupMenuButton( + icon: const Icon( + Icons.more_vert, + color: Colors.black, + size: 16, + ), + itemBuilder: (BuildContext context) { + return [ + PopupMenuItem( + value: 'edit', + child: Row( + children: [ + const Icon( + Icons.edit, + size: 16, // Adjust the icon size as needed + ), + const SizedBox(width: 8), + Text( + 'Edit', + style: AppStyle + .txtGilroySemiBold16, // Adjust the text size as needed + ), + ], + ), + ), + PopupMenuItem( + value: 'delete', + child: Row( + children: [ + const Icon( + Icons.delete, + size: 16, // Adjust the icon size as needed + ), + const SizedBox(width: 8), + Text( + 'Delete', + style: AppStyle + .txtGilroySemiBold16, // Adjust the text size as needed + ), + ], + ), + ), + ]; + }, + onSelected: (String value) { + if (value == 'edit') { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => ChangeNotifierProvider( + create: (context) => Adv1ViewModelScreen(), + child: adv1UpdateEntityScreen(entity: entity), + ), + ), + ).then((_) { + fetchEntities(); + }); + } else if (value == 'delete') { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: const Text('Confirm Deletion'), + content: const Text( + 'Are you sure you want to delete?'), + actions: [ + TextButton( + child: const Text('Cancel'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + TextButton( + child: const Text('Delete'), + onPressed: () { + Navigator.of(context).pop(); + deleteEntity(entity) + .then((value) => {fetchEntities()}); + }, + ), + ], + ); + }, + ); + } + }, + ), + ], + ), + ), + + Padding( + padding: getPadding( + top: 10, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "ismale : ", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16, + ), + Text( + entity['ismale'].toString() ?? 'No ismale Available', + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16Bluegray900, + ), + ], + ), + ), + + + Padding( + padding: getPadding( + top: 10, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "idfemale : ", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16, + ), + Text( + entity['idfemale'].toString() ?? 'No idfemale Available', + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16Bluegray900, + ), + ], + ), + ), + + + + + Padding( + padding: getPadding( + top: 10, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "Test1 : ", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16, + ), + Text( + entity['test1'].toString() ?? 'No Test1 Available', + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16Bluegray900, + ), + ], + ), + ), + + + + + + + + Padding( + padding: getPadding( + top: 10, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "T1 : ", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16, + ), + Text( + entity['t1'].toString() ?? 'No T1 Available', + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16Bluegray900, + ), + ], + ), + ), + + + + + + + + + + + + + + + + + + + + + + ], + ), + ), + ); + } + + Widget _buildLeadingIcon(String title) { + return CircleAvatar( + backgroundColor: Colors.blue, + child: Text( + title.isNotEmpty ? title[0].toUpperCase() : 'NA', + style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold), + ), + ); + } + + void _showAdditionalFieldsDialog( + BuildContext context, + Map entity, + ) { + final dateFormat = DateFormat('yyyy-MM-dd HH:mm:ss'); + + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: const Text('Additional Fields'), + content: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + 'Created At: ${_formatTimestamp(entity['createdAt'], dateFormat)}'), + Text('Created By: ${entity['createdBy'] ?? 'N/A'}'), + Text('Updated By: ${entity['updatedBy'] ?? 'N/A'}'), + Text( + 'Updated At: ${_formatTimestamp(entity['updatedAt'], dateFormat)}'), + Text('Account ID: ${entity['accountId'] ?? 'N/A'}'), + ], + ), + actions: [ + TextButton( + child: const Text('Close'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ], + ); + }, + ); + } + + String _formatTimestamp(dynamic timestamp, DateFormat dateFormat) { + if (timestamp is int) { + final DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(timestamp); + return dateFormat.format(dateTime); + } else if (timestamp is String) { + return timestamp; + } else { + return 'N/A'; + } + } +} + \ No newline at end of file diff --git a/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Adv1/Adv1View/Adv1_update_entity_screen.dart b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Adv1/Adv1View/Adv1_update_entity_screen.dart new file mode 100644 index 0000000..e9a6790 --- /dev/null +++ b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Adv1/Adv1View/Adv1_update_entity_screen.dart @@ -0,0 +1,552 @@ +// ignore_for_file: use_build_context_synchronously +import 'dart:convert'; +import 'package:provider/provider.dart'; +import '../Adv1_viewModel/Adv1_view_model_screen.dart'; +import '../../../../utils/image_constant.dart'; +import '../../../../utils/size_utils.dart'; +import '../../../../theme/app_style.dart'; +import '../../../../widgets/app_bar/appbar_image.dart'; +import '../../../../widgets/app_bar/appbar_title.dart'; +import '../../../../widgets/app_bar/custom_app_bar.dart'; +import 'package:barcode_widget/barcode_widget.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import '../../../../widgets/custom_button.dart'; +import '../../../../widgets/custom_text_form_field.dart'; +import 'package:flutter/material.dart'; +import 'package:autocomplete_textfield/autocomplete_textfield.dart'; +import 'package:qr_flutter/qr_flutter.dart'; +import 'package:intl/intl.dart'; + +import 'dart:math'; +import '../../../../Reuseable/reusable_text_field.dart'; +import '../../../../Reuseable/reusable_date_picker_field.dart'; +import '../../../../Reuseable/reusable_date_time_picker_field.dart'; +import '../../../../Reuseable/reusable_dropdown_field.dart'; +import 'package:flutter/services.dart'; +class adv1UpdateEntityScreen extends StatefulWidget { + final Map entity; + + + adv1UpdateEntityScreen({required this.entity}); + + @override + _adv1UpdateEntityScreenState createState() => _adv1UpdateEntityScreenState(); +} + +class _adv1UpdateEntityScreenState extends State { + final _formKey = GlobalKey(); + + String? selectedismale; + + + Future _showismaleSelectionDialog(BuildContext context) async { + final result = await showDialog( + context: context, + builder: (BuildContext context) { + return SimpleDialog( + title: const Text('Select ismale'), + children: [ + + + RadioListTile( + title: const Text('no'), + value: 'no', + groupValue: selectedismale, + onChanged: (value) { + setState(() { + selectedismale = value; + Navigator.pop(context, value); + }); + }, + ), + + + + RadioListTile( + title: const Text('yes'), + value: 'yes', + groupValue: selectedismale, + onChanged: (value) { + setState(() { + selectedismale = value; + Navigator.pop(context, value); + }); + }, + ), + + + + ], + ); + }, + ); + + if (result != null) { + setState(() { + selectedismale = result; + }); + } + } + + String? selectedidfemale; + + + Future _showidfemaleSelectionDialog(BuildContext context) async { + final result = await showDialog( + context: context, + builder: (BuildContext context) { + return SimpleDialog( + title: const Text('Select idfemale'), + children: [ + + + RadioListTile( + title: const Text('no'), + value: 'no', + groupValue: selectedidfemale, + onChanged: (value) { + setState(() { + selectedidfemale = value; + Navigator.pop(context, value); + }); + }, + ), + + + + RadioListTile( + title: const Text('yes'), + value: 'yes', + groupValue: selectedidfemale, + onChanged: (value) { + setState(() { + selectedidfemale = value; + Navigator.pop(context, value); + }); + }, + ), + + + + ], + ); + }, + ); + + if (result != null) { + setState(() { + selectedidfemale = result; + }); + } + } + + + + + bool test1cBox = false; + + + + + + + bool t1cBox = false; + + + + + + + + + + + + + + + + + + + + + @override + void initState() { + super.initState(); + final provider = Provider.of(context, listen: false); +selectedismale = widget.entity['ismale'] ?? ''; // Initialize selected ismale + +selectedidfemale = widget.entity['idfemale'] ?? ''; // Initialize selected idfemale + + + + +test1cBox = widget.entity['test1'] ?? false; + + + + + + +t1cBox = widget.entity['t1'] ?? false; + + + + + + + + + + + + + + + + + + + +} + + + @override + Widget build(BuildContext context) { + final provider = Provider.of(context, listen: false); + return Scaffold( + appBar: CustomAppBar( + height: getVerticalSize(49), + leadingWidth: 40, + leading: AppbarImage( + height: getSize(24), + width: getSize(24), + svgPath: ImageConstant.imgArrowleftBlueGray900, + margin: getMargin(left: 16, top: 12, bottom: 13), + onTap: () { + Navigator.pop(context); + }), + centerTitle: true, + title: AppbarTitle(text: "Update Adv1"), actions: [ + + + + + + + + + + + + + + + + + + + + + + + + + ], +), + body: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(16), + child: Form( + key: _formKey, + child: Column( + children: [ + Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "ismale", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + color: Colors.blueGrey[900], + ), + ), + const SizedBox(height: 6), + GestureDetector( + onTap: () => _showismaleSelectionDialog(context), + child: AbsorbPointer( + child: TextFormField( + decoration: InputDecoration( + hintText: "Enter ismale", + border: OutlineInputBorder(), + contentPadding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 12.0), + ), + controller: TextEditingController(text: selectedismale), + onSaved: (value) { + widget.entity['ismale'] = value; + }, + ), + ), + ), + const SizedBox(height: 16), + + ], + ), + ), + +Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "idfemale", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + color: Colors.blueGrey[900], + ), + ), + const SizedBox(height: 6), + GestureDetector( + onTap: () => _showidfemaleSelectionDialog(context), + child: AbsorbPointer( + child: TextFormField( + decoration: InputDecoration( + hintText: "Enter idfemale", + border: OutlineInputBorder(), + contentPadding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 12.0), + ), + controller: TextEditingController(text: selectedidfemale), + onSaved: (value) { + widget.entity['idfemale'] = value; + }, + ), + ), + ), + const SizedBox(height: 16), + + ], + ), + ), + + Row( + children: [ + + + + Checkbox( + value: test1cBox, + onChanged: (newValue) { + setState(() { + test1cBox = newValue!; + }); + }, + ), + const SizedBox(width: 8), + Text('Test1'), + + + + ], + ), + SizedBox(height: 16), + + Row( + children: [ + + + + Checkbox( + value: t1cBox, + onChanged: (newValue) { + setState(() { + t1cBox = newValue!; + }); + }, + ), + const SizedBox(width: 8), + Text('T1'), + + + + ], + ), + SizedBox(height: 16), + + + + + + + + + + + ReusableTextField( + + label: "Please Enter audio Field", + initialValue: widget.entity['audio_field'] ?? '', + + // ValidationProperties + onSaved: (value) => widget.entity['audio_field'] = value, +), + + SizedBox(height: 16), + + + + ReusableTextField( + + label: "Please Enter audio Field2", + initialValue: widget.entity['audio_field2'] ?? '', + + // ValidationProperties + onSaved: (value) => widget.entity['audio_field2'] = value, +), + + SizedBox(height: 16), + + + + ReusableTextField( + + label: "Please Enter video Field", + initialValue: widget.entity['video_field'] ?? '', + + // ValidationProperties + onSaved: (value) => widget.entity['video_field'] = value, +), + + SizedBox(height: 16), + + + + ReusableTextField( + + label: "Please Enter video Field2", + initialValue: widget.entity['video_field2'] ?? '', + + // ValidationProperties + onSaved: (value) => widget.entity['video_field2'] = value, +), + + SizedBox(height: 16), + + + + CustomButton( + height: getVerticalSize(50), + text: "Update", + margin: getMargin(top: 24, bottom: 5), + onTap: () async { + if (_formKey.currentState!.validate()) { + _formKey.currentState!.save(); + + + + + + + + + widget.entity['test1'] = test1cBox; + + + + + + + + widget.entity['t1'] = t1cBox; + + + + + + + + + + + + + + + + + + + + + try { + await provider.updateEntity( + widget.entity[ + 'id'], // Assuming 'id' is the key in your entity map + widget.entity); + + + + + + + + + + + + + + + + + + + + + + + + + + Navigator.pop(context); + } catch (e) { + // ignore: use_build_context_synchronously + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: const Text('Error'), + content: + Text('Failed to update Adv1: $e'), + actions: [ + TextButton( + child: const Text('OK'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ], + ); + }, + ); + } + } + }, + ), + ], + ), + ), + ), + ), + ); + } +} \ No newline at end of file diff --git a/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Adv1/Adv1_Repo/Adv1_repo_screen.dart b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Adv1/Adv1_Repo/Adv1_repo_screen.dart new file mode 100644 index 0000000..902e774 --- /dev/null +++ b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Adv1/Adv1_Repo/Adv1_repo_screen.dart @@ -0,0 +1,158 @@ +import 'package:dio/dio.dart'; +import '../../../../data/network/base_network_service.dart'; +import '../../../../data/network/network_api_service.dart'; +import '../../../../resources/api_constants.dart'; + +class Adv1RepoScreen { + final String baseUrl = ApiConstants.baseUrl; + final BaseNetworkService _helper = NetworkApiService(); + + Future getEntities() async { + try { + final response = + await _helper.getGetApiResponse('$baseUrl/Adv1/Adv1'); + return response; + } catch (e) { + throw Exception('Failed to get all entities: $e'); + } + } + + Future getAllWithPagination(int page, int size) async { + try { + final response = await _helper.getGetApiResponse( + '$baseUrl/Adv1/Adv1/getall/page?page=$page&size=$size'); + return response; + } catch (e) { + throw Exception('Failed to get all without pagination: $e'); + } + } + + Future createEntity(Map entity) async { + try { + print("in post api$entity"); + final response = await _helper.getPostApiResponse( + '$baseUrl/Adv1/Adv1', entity); + + print(entity); + + return response; + } catch (e) { + throw Exception('Failed to create entity: $e'); + } + } + + Future updateEntity(int entityId, Map entity) async { + try { + await _helper.getPutApiResponse( + '$baseUrl/Adv1/Adv1/$entityId', entity); + print(entity); + } catch (e) { + throw Exception('Failed to update entity: $e'); + } + } + + Future deleteEntity(int entityId) async { + try { + await _helper + .getDeleteApiResponse('$baseUrl/Adv1/Adv1/$entityId'); + } catch (e) { + throw Exception('Failed to delete entity: $e'); + } + } + + + + + + + + + Future fileupload_fieldUpload( + String ref, String refTableNmae, FormData entity) async { + try { + String apiUrl = "$baseUrl/FileUpload/Uploadeddocs/$ref/$refTableNmae"; + final response = await _helper.getPostApiResponse(apiUrl, entity); + return response; + } catch (e) { + throw Exception('Failed to Upload File: $e'); + } + } + + Future fileupload_field2Upload( + String ref, String refTableNmae, FormData entity) async { + try { + String apiUrl = "$baseUrl/FileUpload/Uploadeddocs/$ref/$refTableNmae"; + final response = await _helper.getPostApiResponse(apiUrl, entity); + return response; + } catch (e) { + throw Exception('Failed to Upload File: $e'); + } + } + + Future imageupload_fieldUpload( + String ref, String refTableNmae, FormData entity) async { + try { + String apiUrl = "$baseUrl/FileUpload/Uploadeddocs/$ref/$refTableNmae"; + final response = await _helper.getPostApiResponse(apiUrl, entity); + return response; + } catch (e) { + throw Exception('Failed to Upload Imageupload Field: $e'); + } + } + + Future imageupload_field2Upload( + String ref, String refTableNmae, FormData entity) async { + try { + String apiUrl = "$baseUrl/FileUpload/Uploadeddocs/$ref/$refTableNmae"; + final response = await _helper.getPostApiResponse(apiUrl, entity); + return response; + } catch (e) { + throw Exception('Failed to Upload Imageupload Field2: $e'); + } + } + + Future audio_fieldUpload( + String ref, String refTableNmae, FormData entity) async { + try { + String apiUrl = "$baseUrl/FileUpload/Uploadeddocs/$ref/$refTableNmae"; + final response = await _helper.getPostApiResponse(apiUrl, entity); + return response; + } catch (e) { + throw Exception('Failed to Upload File: $e'); + } + } + + Future audio_field2Upload( + String ref, String refTableNmae, FormData entity) async { + try { + String apiUrl = "$baseUrl/FileUpload/Uploadeddocs/$ref/$refTableNmae"; + final response = await _helper.getPostApiResponse(apiUrl, entity); + return response; + } catch (e) { + throw Exception('Failed to Upload File: $e'); + } + } + + Future video_fieldUpload( + String ref, String refTableNmae, FormData entity) async { + try { + String apiUrl = "$baseUrl/FileUpload/Uploadeddocs/$ref/$refTableNmae"; + final response = await _helper.getPostApiResponse(apiUrl, entity); + return response; + } catch (e) { + throw Exception('Failed to Upload File: $e'); + } + } + + Future video_field2Upload( + String ref, String refTableNmae, FormData entity) async { + try { + String apiUrl = "$baseUrl/FileUpload/Uploadeddocs/$ref/$refTableNmae"; + final response = await _helper.getPostApiResponse(apiUrl, entity); + return response; + } catch (e) { + throw Exception('Failed to Upload File: $e'); + } + } + +} diff --git a/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Adv1/Adv1_viewModel/Adv1_view_model_screen.dart b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Adv1/Adv1_viewModel/Adv1_view_model_screen.dart new file mode 100644 index 0000000..0f4e8e2 --- /dev/null +++ b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Adv1/Adv1_viewModel/Adv1_view_model_screen.dart @@ -0,0 +1,543 @@ +import 'dart:typed_data'; +import 'package:dio/dio.dart'; +import 'package:http_parser/http_parser.dart'; +import '../../../../utils/toast_messages/toast_message_util.dart'; +import 'package:flutter/material.dart'; +import '../Adv1_Repo/Adv1_repo_screen.dart'; + +class Adv1ViewModelScreen extends ChangeNotifier{ + final Adv1RepoScreen repo = Adv1RepoScreen(); + + Future>> getEntities() async { + try { + final response = await repo.getEntities(); + final entities = (response as List).cast>(); + return entities; + } catch (e) { + throw Exception('Failed to get all entities: $e'); + } + } + + + Future>> getAllWithPagination( + int page, int size) async { + try { + final response = + await repo.getAllWithPagination(page, size); // ✅ Use await + + print('res - $response'); + + // ✅ Ensure response is a Map + if (response is! Map) { + throw Exception('Unexpected response format: $response'); + } + + // ✅ Extract 'content' and ensure it's a list + final entities = (response['content'] as List) + .cast>() // ✅ Ensure list of maps + .toList(); + return entities; + } catch (e) { + print(e); + throw Exception('Failed to get all without pagination :- $e'); + } + } + + + Future> createEntity(Map entity) async { + try { + print("in post api - $entity"); + // Wait for API response + final responseData = + await repo.createEntity(entity) as Map; + print('after value - $responseData'); + ToastMessageUtil.showToast( + message: "Added Successfully", toastType: ToastType.success); + + return responseData; // Return the data AFTER it is received + } catch (error) { + print("error--$error"); + ToastMessageUtil.showToast( + message: "Got Error", toastType: ToastType.error); + + throw Exception( + 'Failed to Create Entity: $error'); // Properly rethrow the error + } + } + Future updateEntity(int entityId, Map entity) async { + try { + repo.updateEntity(entityId, entity).then((value) { + ToastMessageUtil.showToast( + message: "Updated Successfully", toastType: ToastType.success); + }).onError( + (error, stackTrace) { + print("error--$error"); + ToastMessageUtil.showToast( + message: "Got Error", toastType: ToastType.error); + }, + ); + print(entity); + } catch (e) { + throw Exception('Failed to update entity: $e'); + } + } + + Future deleteEntity(int entityId) async { + try { + repo.deleteEntity(entityId).then((value) { + ToastMessageUtil.showToast( + message: "Deleted Successfully", toastType: ToastType.success); + }).onError( + (error, stackTrace) { + print("error--$error"); + ToastMessageUtil.showToast( + message: "Got Error", toastType: ToastType.error); + }, + ); + } catch (e) { + throw Exception('Failed to delete entity: $e'); + } + } + + + + + + + + + +// Modify the uploadfileupload_fieldimage function + Future uploadfileupload_field(String ref, String refTableNmae, + String selectedFilePath, Uint8List imageTimageBytes) async { + try { + + final Uint8List fileBytes = imageTimageBytes!; + final mimeType = fileupload_fieldlookupMimeType(selectedFilePath); + + FormData formData = FormData.fromMap({ + 'file': MultipartFile.fromBytes( + fileBytes, + filename: selectedFilePath + .split('/') + .last, // Get the file name from the path + contentType: MediaType.parse(mimeType!), + ), + }); + + + await repo.fileupload_fieldUpload(ref, refTableNmae, formData).then((value) { + ToastMessageUtil.showToast( + message: "File uploaded successfully", + toastType: ToastType.success); + }).onError( + (error, stackTrace) { + print("error--$error"); + ToastMessageUtil.showToast( + message: "Failed to upload file", toastType: ToastType.error); + }, + ); + } catch (error) { + print('Error occurred during form submission: $error'); + } + } + +// Modify the lookupMimeType function if needed + String fileupload_fieldlookupMimeType(String filePath) { + final ext = filePath.split('.').last; + switch (ext) { + case 'jpg': + case 'jpeg': + return 'image/jpeg'; + case 'png': + return 'image/png'; + case 'pdf': + return 'application/pdf'; + // Add more cases for other file types as needed + default: + return 'application/octet-stream'; // Default MIME type + } + } + + +// Modify the uploadfileupload_field2image function + Future uploadfileupload_field2(String ref, String refTableNmae, + String selectedFilePath, Uint8List imageTimageBytes) async { + try { + + final Uint8List fileBytes = imageTimageBytes!; + final mimeType = fileupload_field2lookupMimeType(selectedFilePath); + + FormData formData = FormData.fromMap({ + 'file': MultipartFile.fromBytes( + fileBytes, + filename: selectedFilePath + .split('/') + .last, // Get the file name from the path + contentType: MediaType.parse(mimeType!), + ), + }); + + + await repo.fileupload_field2Upload(ref, refTableNmae, formData).then((value) { + ToastMessageUtil.showToast( + message: "File uploaded successfully", + toastType: ToastType.success); + }).onError( + (error, stackTrace) { + print("error--$error"); + ToastMessageUtil.showToast( + message: "Failed to upload file", toastType: ToastType.error); + }, + ); + } catch (error) { + print('Error occurred during form submission: $error'); + } + } + +// Modify the lookupMimeType function if needed + String fileupload_field2lookupMimeType(String filePath) { + final ext = filePath.split('.').last; + switch (ext) { + case 'jpg': + case 'jpeg': + return 'image/jpeg'; + case 'png': + return 'image/png'; + case 'pdf': + return 'application/pdf'; + // Add more cases for other file types as needed + default: + return 'application/octet-stream'; // Default MIME type + } + } + + +// Modify the uploadimageupload_fieldimage function + Future uploadimageupload_field(String ref, String refTableNmae, + String selectedFilePath, Uint8List image_timageBytes) async { + try { + + final Uint8List fileBytes = image_timageBytes!; + final mimeType = imageupload_fieldlookupMimeType(selectedFilePath); + + FormData formData = FormData.fromMap({ + 'file': MultipartFile.fromBytes( + fileBytes, + filename: selectedFilePath + .split('/') + .last, // Get the file name from the path + contentType: MediaType.parse(mimeType!), + ), + }); +await repo.imageupload_fieldUpload(ref, refTableNmae, formData).then((value) { + ToastMessageUtil.showToast( + message: "File uploaded successfully", + toastType: ToastType.success); + }).onError( + (error, stackTrace) { + print("error--$error"); + ToastMessageUtil.showToast( + message: "Failed to upload file", toastType: ToastType.error); + }, + ); + } catch (error) { + print('Error occurred during form submission: $error'); + } + } + +// Modify the lookupMimeType function if needed + String imageupload_fieldlookupMimeType(String filePath) { + final ext = filePath.split('.').last; + switch (ext) { + case 'jpg': + case 'jpeg': + return 'image/jpeg'; + case 'png': + return 'image/png'; + case 'pdf': + return 'application/pdf'; + // Add more cases for other file types as needed + default: + return 'application/octet-stream'; // Default MIME type + } + } + + +// Modify the uploadimageupload_field2image function + Future uploadimageupload_field2(String ref, String refTableNmae, + String selectedFilePath, Uint8List image_timageBytes) async { + try { + + final Uint8List fileBytes = image_timageBytes!; + final mimeType = imageupload_field2lookupMimeType(selectedFilePath); + + FormData formData = FormData.fromMap({ + 'file': MultipartFile.fromBytes( + fileBytes, + filename: selectedFilePath + .split('/') + .last, // Get the file name from the path + contentType: MediaType.parse(mimeType!), + ), + }); +await repo.imageupload_field2Upload(ref, refTableNmae, formData).then((value) { + ToastMessageUtil.showToast( + message: "File uploaded successfully", + toastType: ToastType.success); + }).onError( + (error, stackTrace) { + print("error--$error"); + ToastMessageUtil.showToast( + message: "Failed to upload file", toastType: ToastType.error); + }, + ); + } catch (error) { + print('Error occurred during form submission: $error'); + } + } + +// Modify the lookupMimeType function if needed + String imageupload_field2lookupMimeType(String filePath) { + final ext = filePath.split('.').last; + switch (ext) { + case 'jpg': + case 'jpeg': + return 'image/jpeg'; + case 'png': + return 'image/png'; + case 'pdf': + return 'application/pdf'; + // Add more cases for other file types as needed + default: + return 'application/octet-stream'; // Default MIME type + } + } + + +// Modify the uploadaudio_fieldimage function + Future uploadaudio_field(String ref, String refTableNmae, + String selectedFilePath, Uint8List image_timageBytes) async { + try { + + final Uint8List fileBytes = image_timageBytes!; + final mimeType = audio_fieldlookupMimeType(selectedFilePath); + + FormData formData = FormData.fromMap({ + 'file': MultipartFile.fromBytes( + fileBytes, + filename: selectedFilePath + .split('/') + .last, // Get the file name from the path + contentType: MediaType.parse(mimeType!), + ), + }); + + + await repo.audio_fieldUpload(ref, refTableNmae, formData).then((value) { + ToastMessageUtil.showToast( + message: "File uploaded successfully", + toastType: ToastType.success); + }).onError( + (error, stackTrace) { + print("error--$error"); + ToastMessageUtil.showToast( + message: "Failed to upload file", toastType: ToastType.error); + }, + ); + } catch (error) { + print('Error occurred during form submission: $error'); + } + } + +// Modify the lookupMimeType function if needed + String audio_fieldlookupMimeType(String filePath) { + final ext = filePath.split('.').last.toLowerCase(); + switch (ext) { + case 'mp3': + return 'audio/mpeg'; + case 'wav': + return 'audio/wav'; + case 'm4a': + return 'audio/mp4'; + case 'flac': + return 'audio/flac'; + // Add more cases for other audio formats as needed + default: + return 'application/octet-stream'; // Default MIME type + } +} + + +// Modify the uploadaudio_field2image function + Future uploadaudio_field2(String ref, String refTableNmae, + String selectedFilePath, Uint8List image_timageBytes) async { + try { + + final Uint8List fileBytes = image_timageBytes!; + final mimeType = audio_field2lookupMimeType(selectedFilePath); + + FormData formData = FormData.fromMap({ + 'file': MultipartFile.fromBytes( + fileBytes, + filename: selectedFilePath + .split('/') + .last, // Get the file name from the path + contentType: MediaType.parse(mimeType!), + ), + }); + + + await repo.audio_field2Upload(ref, refTableNmae, formData).then((value) { + ToastMessageUtil.showToast( + message: "File uploaded successfully", + toastType: ToastType.success); + }).onError( + (error, stackTrace) { + print("error--$error"); + ToastMessageUtil.showToast( + message: "Failed to upload file", toastType: ToastType.error); + }, + ); + } catch (error) { + print('Error occurred during form submission: $error'); + } + } + +// Modify the lookupMimeType function if needed + String audio_field2lookupMimeType(String filePath) { + final ext = filePath.split('.').last.toLowerCase(); + switch (ext) { + case 'mp3': + return 'audio/mpeg'; + case 'wav': + return 'audio/wav'; + case 'm4a': + return 'audio/mp4'; + case 'flac': + return 'audio/flac'; + // Add more cases for other audio formats as needed + default: + return 'application/octet-stream'; // Default MIME type + } +} + + +// Modify the uploadvideo_fieldimage function + Future uploadvideo_field(String ref, String refTableNmae, + String selectedFilePath, Uint8List image_timageBytes) async { + try { + + final Uint8List fileBytes = image_timageBytes!; + final mimeType = video_fieldlookupMimeType(selectedFilePath); + + FormData formData = FormData.fromMap({ + 'file': MultipartFile.fromBytes( + fileBytes, + filename: selectedFilePath + .split('/') + .last, // Get the file name from the path + contentType: MediaType.parse(mimeType!), + ), + }); + + + + await repo.video_fieldUpload(ref, refTableNmae, formData).then((value) { + ToastMessageUtil.showToast( + message: "File uploaded successfully", + toastType: ToastType.success); + }).onError( + (error, stackTrace) { + print("error--$error"); + ToastMessageUtil.showToast( + message: "Failed to upload file", toastType: ToastType.error); + }, + ); + } catch (error) { + print('Error occurred during form submission: $error'); + } + } + +// Modify the lookupMimeType function if needed + String video_fieldlookupMimeType(String filePath) { + final ext = filePath.split('.').last.toLowerCase(); + switch (ext) { + case 'mp4': + return 'video/mp4'; + case 'mov': + return 'video/quicktime'; + case 'avi': + return 'video/x-msvideo'; + case 'wmv': + return 'video/x-ms-wmv'; + case 'flv': + return 'video/x-flv'; + case 'mkv': + return 'video/x-matroska'; + // Add more cases for other file types as needed + default: + return 'application/octet-stream'; // Default MIME type + } + } + + +// Modify the uploadvideo_field2image function + Future uploadvideo_field2(String ref, String refTableNmae, + String selectedFilePath, Uint8List image_timageBytes) async { + try { + + final Uint8List fileBytes = image_timageBytes!; + final mimeType = video_field2lookupMimeType(selectedFilePath); + + FormData formData = FormData.fromMap({ + 'file': MultipartFile.fromBytes( + fileBytes, + filename: selectedFilePath + .split('/') + .last, // Get the file name from the path + contentType: MediaType.parse(mimeType!), + ), + }); + + + + await repo.video_field2Upload(ref, refTableNmae, formData).then((value) { + ToastMessageUtil.showToast( + message: "File uploaded successfully", + toastType: ToastType.success); + }).onError( + (error, stackTrace) { + print("error--$error"); + ToastMessageUtil.showToast( + message: "Failed to upload file", toastType: ToastType.error); + }, + ); + } catch (error) { + print('Error occurred during form submission: $error'); + } + } + +// Modify the lookupMimeType function if needed + String video_field2lookupMimeType(String filePath) { + final ext = filePath.split('.').last.toLowerCase(); + switch (ext) { + case 'mp4': + return 'video/mp4'; + case 'mov': + return 'video/quicktime'; + case 'avi': + return 'video/x-msvideo'; + case 'wmv': + return 'video/x-ms-wmv'; + case 'flv': + return 'video/x-flv'; + case 'mkv': + return 'video/x-matroska'; + // Add more cases for other file types as needed + default: + return 'application/octet-stream'; // Default MIME type + } + } + +} \ No newline at end of file diff --git a/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Dv2/Dv2View/Dv2_api_service.dart b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Dv2/Dv2View/Dv2_api_service.dart new file mode 100644 index 0000000..ce135d5 --- /dev/null +++ b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Dv2/Dv2View/Dv2_api_service.dart @@ -0,0 +1,108 @@ +import 'dart:typed_data'; +import 'package:dio/dio.dart'; +import 'package:http_parser/http_parser.dart'; +import '../../../../resources/api_constants.dart'; +import '../../../../data/network/base_network_service.dart'; +import '../../../../data/network/network_api_service.dart'; + +class dv2ApiService { + final String baseUrl = ApiConstants.baseUrl; + + final BaseNetworkService _helper = NetworkApiService(); + + + + Future>> getEntities() async { + + try { + final response = await _helper.getGetApiResponse('$baseUrl/Dv2/Dv2'); + final entities = (response as List).cast>(); + return entities; + } catch (e) { + throw Exception('Failed to get all entities: $e'); + } + } +Future>> getAllWithPagination( + int page, int size) async { + try { + final response = + await _helper.getGetApiResponse('$baseUrl/Dv2/Dv2/getall/page?page=$page&size=$size'); + final entities = + (response['content'] as List).cast>(); + return entities; + } catch (e) { + throw Exception('Failed to get all without pagination: $e'); + } + } + Future> createEntity( + Map entity) async { + try { + print("in post api$entity"); + final response = + await _helper.getPostApiResponse('$baseUrl/Dv2/Dv2', entity); + + print(entity); + + // Assuming the response is a Map + Map responseData = response; + + return responseData; + } catch (e) { + throw Exception('Failed to create entity: $e'); + } + } + + + + + + + + + + + + + + + + + + + + Future updateEntity( int entityId, Map entity) async { + try { + await _helper.getPutApiResponse('$baseUrl/Dv2/Dv2/$entityId', + entity); print(entity); + + } catch (e) { + throw Exception('Failed to update entity: $e'); + } + } + + Future deleteEntity( int entityId) async { + try { + await _helper.getDeleteApiResponse('$baseUrl/Dv2/Dv2/$entityId'); + } catch (e) { + throw Exception('Failed to delete entity: $e'); + } + } + + + + + + + + + + + + + + + + + + +} \ No newline at end of file diff --git a/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Dv2/Dv2View/Dv2_create_entity_screen.dart b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Dv2/Dv2View/Dv2_create_entity_screen.dart new file mode 100644 index 0000000..93dd9e0 --- /dev/null +++ b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Dv2/Dv2View/Dv2_create_entity_screen.dart @@ -0,0 +1,566 @@ +// ignore_for_file: use_build_context_synchronously +import 'dart:convert'; +import 'package:flutter/material.dart'; +import 'package:file_picker/file_picker.dart'; +import 'package:image_picker/image_picker.dart'; +import 'package:provider/provider.dart'; +import '../Dv2_viewModel/Dv2_view_model_screen.dart'; +import '../../../../utils/image_constant.dart'; +import '../../../../utils/size_utils.dart'; +import '../../../../theme/app_style.dart'; +import '../../../../widgets/app_bar/appbar_image.dart'; +import '../../../../widgets/app_bar/appbar_title.dart'; +import '../../../../widgets/app_bar/custom_app_bar.dart'; +import '../../../../widgets/custom_button.dart'; +import '../../../../widgets/custom_text_form_field.dart'; +import '../../../../widgets/custom_dropdown_field.dart'; +import 'dart:math'; +import 'package:qr_flutter/qr_flutter.dart'; +import 'package:barcode_widget/barcode_widget.dart'; +import 'package:intl/intl.dart'; + +import 'package:autocomplete_textfield/autocomplete_textfield.dart'; +import 'package:http/http.dart' as http; +import 'package:flutter/services.dart'; +import 'package:image_picker/image_picker.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import '../../../../Reuseable/reusable_date_picker_field.dart'; +import '../../../../Reuseable/reusable_date_time_picker_field.dart' +;import 'package:multi_select_flutter/multi_select_flutter.dart'; +import 'package:just_audio/just_audio.dart'; +import 'package:video_player/video_player.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:lottie/lottie.dart'; +import '../../../../utils/toast_messages/toast_message_util.dart'; +import 'dart:io'; +import '../../../../Reuseable/reusable_text_field.dart'; +import '../../../../Reuseable/reusable_dropdown_field.dart'; + + + + + + + + + + + + + + + + + + +class dv2CreateEntityScreen extends StatefulWidget { + const dv2CreateEntityScreen({super.key}); + + @override + _dv2CreateEntityScreenState createState() => _dv2CreateEntityScreenState(); +} + +class _dv2CreateEntityScreenState extends State { + +final Map formData = {}; + final _formKey = GlobalKey(); + final TextEditingController addressController = TextEditingController(); + + + final TextEditingController per_addressController = TextEditingController(); + + +String inputValuecurrency = ''; +String outputValuecurrency = ''; + +void _convertCurrency_currency() { + String inputText = inputValuecurrency.replaceAll(',', ''); // Remove commas + try { + double parsedValue = double.parse(inputText); // Parse the value + String formattedValue = + parsedValue.toStringAsFixed(2); // Format to 2 decimal places + setState(() { + outputValuecurrency = formattedValue; + }); + } catch (e) { + setState(() { + outputValuecurrency = "Invalid input"; + }); + } +} + + +String inputValuecurrency2 = ''; +String outputValuecurrency2 = ''; + +void _convertCurrency_currency2() { + String inputText = inputValuecurrency2.replaceAll(',', ''); // Remove commas + try { + double parsedValue = double.parse(inputText); // Parse the value + String formattedValue = + parsedValue.toStringAsFixed(2); // Format to 2 decimal places + setState(() { + outputValuecurrency2 = formattedValue; + }); + } catch (e) { + setState(() { + outputValuecurrency2 = "Invalid input"; + }); + } +} + + + String inputDataqrcode_field = 'Hello QR!'; // Default data for QR code generation + TextEditingController controllerInputqrcode_field = TextEditingController(); + + String inputDataqrcode_field2 = 'Hello QR!'; // Default data for QR code generation + TextEditingController controllerInputqrcode_field2 = TextEditingController(); + + String inputDatabarcode_field = 'Hello BarCode'; // By default barcode + TextEditingController controllerInputbarcode_field = TextEditingController(); + + String inputDatabarcode_field2 = 'Hello BarCode'; // By default barcode + TextEditingController controllerInputbarcode_field2 = TextEditingController(); + + + + @override + void initState() { + super.initState(); + final provider = Provider.of(context, listen: false); + + + + + + + + +controllerInputqrcode_field.text = inputDataqrcode_field; + +controllerInputqrcode_field2.text = inputDataqrcode_field2; + + controllerInputbarcode_field.text = inputDatabarcode_field; + + controllerInputbarcode_field2.text = inputDatabarcode_field2; + + + +} + + + + @override + Widget build(BuildContext context) { + final provider = Provider.of(context, listen: false); + return Scaffold( + appBar: CustomAppBar( + height: getVerticalSize(49), + leadingWidth: 40, + leading: AppbarImage( + height: getSize(24), + width: getSize(24), + svgPath: ImageConstant.imgArrowleftBlueGray900, + margin: getMargin(left: 16, top: 12, bottom: 13), + onTap: () { + Navigator.pop(context); + }), + centerTitle: true, + title: AppbarTitle(text: "Create Dv2"), + + + + + + + + + + + + + + + + + +), + body: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(16), + child: Form( + key: _formKey, + child: Column( + children: [ + Container( + padding: EdgeInsets.all(16.0), + decoration: BoxDecoration( + color: Colors.grey[200], + borderRadius: BorderRadius.circular(8.0), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.2), + spreadRadius: 2, + blurRadius: 4, + offset: Offset(0, 2), + ), + ], + ), + child: Column( + children: [ + Text( + "Address", + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + SizedBox(height: 16), + + +ReusableTextField( + onSaved:(value) => formData['name'] = value , + label:"Enter Name", + // ValidationProperties +), + + SizedBox(height: 16), + + + +ReusableTextField( + onSaved:(value) => formData['last_name'] = value , + label:"Enter Last_name", + // ValidationProperties +), + + SizedBox(height: 16), + + + SizedBox(height: 16), + ], + ), +), +const SizedBox(height: 16), + + +Container( + padding: EdgeInsets.all(16.0), + decoration: BoxDecoration( + color: Colors.grey[200], + borderRadius: BorderRadius.circular(8.0), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.2), + spreadRadius: 2, + blurRadius: 4, + offset: Offset(0, 2), + ), + ], + ), + child: Column( + children: [ + Text( + "per address", + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + SizedBox(height: 16), + + +ReusableTextField( + onSaved:(value) => formData['test'] = value , + label:"Enter Test", + // ValidationProperties +), + + SizedBox(height: 16), + + + SizedBox(height: 16), + ], + ), +), +const SizedBox(height: 16), + + + TextFormField( + keyboardType: TextInputType.number, + onChanged: (text) { + setState(() { + inputValuecurrency = text; + }); + }, + decoration: const InputDecoration( + labelText: + 'Enter Currency Value (with or without commas)', + prefixIcon: Icon(Icons.currency_rupee), + border: OutlineInputBorder(), + + ), + onSaved: (value) { + _convertCurrency_currency(); + formData['currency'] = outputValuecurrency; + }), + const SizedBox(height: 16), + + TextFormField( + keyboardType: TextInputType.number, + onChanged: (text) { + setState(() { + inputValuecurrency2 = text; + }); + }, + decoration: const InputDecoration( + labelText: + 'Enter Currency Value (with or without commas)', + prefixIcon: Icon(Icons.currency_rupee), + border: OutlineInputBorder(), + + ), + onSaved: (value) { + _convertCurrency_currency2(); + formData['currency2'] = outputValuecurrency2; + }), + const SizedBox(height: 16), + + Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + 'Generate QR Code', + style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), + ), + const SizedBox(height: 16), + QrImageView( + data: inputDataqrcode_field, + version: QrVersions.auto, + size: 200.0, + gapless: false, + ), + const SizedBox(height: 16), + TextField( + controller: controllerInputqrcode_field, + decoration: InputDecoration( + border: OutlineInputBorder(), + labelText: 'Enter data for QR code', + ), + onChanged: (value) { + setState(() { + inputDataqrcode_field = value; + }); + }, + ), + ], + ), + ), + + + Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + 'Generate QR Code', + style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), + ), + const SizedBox(height: 16), + QrImageView( + data: inputDataqrcode_field2, + version: QrVersions.auto, + size: 200.0, + gapless: false, + ), + const SizedBox(height: 16), + TextField( + controller: controllerInputqrcode_field2, + decoration: InputDecoration( + border: OutlineInputBorder(), + labelText: 'Enter data for QR code', + ), + onChanged: (value) { + setState(() { + inputDataqrcode_field2 = value; + }); + }, + ), + ], + ), + ), + + + Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const Text( + 'Generate Barcode', + style: TextStyle(fontSize: 18), + ), + const SizedBox(height: 16), + if (inputDatabarcode_field.isNotEmpty) + BarcodeWidget( + barcode: Barcode.code128(), // Choose the type of barcode + data: inputDatabarcode_field, + width: 200, + height: 80, + ), + const SizedBox(height: 16), + TextField( + controller: controllerInputbarcode_field, + decoration: const InputDecoration( + border: OutlineInputBorder(), + labelText: 'Enter data for barcode', + ), + onChanged: (value) { + setState(() { + inputDatabarcode_field = value; + formData['barcode_field'] = inputDatabarcode_field; + }); + }, + ), + const SizedBox(height: 16), + + ], + ), + + Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const Text( + 'Generate Barcode', + style: TextStyle(fontSize: 18), + ), + const SizedBox(height: 16), + if (inputDatabarcode_field2.isNotEmpty) + BarcodeWidget( + barcode: Barcode.code128(), // Choose the type of barcode + data: inputDatabarcode_field2, + width: 200, + height: 80, + ), + const SizedBox(height: 16), + TextField( + controller: controllerInputbarcode_field2, + decoration: const InputDecoration( + border: OutlineInputBorder(), + labelText: 'Enter data for barcode', + ), + onChanged: (value) { + setState(() { + inputDatabarcode_field2 = value; + formData['barcode_field2'] = inputDatabarcode_field2; + }); + }, + ), + const SizedBox(height: 16), + + ], + ), + + + + const SizedBox(width: 8), + CustomButton( + height: getVerticalSize(50), + text: "Submit", + margin: getMargin(top: 24, bottom: 5), + onTap: () async { + if (_formKey.currentState!.validate()) { + _formKey.currentState!.save(); + + + + + + + + + + + + + + + + + + + + try { + print(formData); + Map createdEntity = await provider.createEntity(formData); + + + + + + + + + + + + + + + + + + + + + Navigator.pop(context); + } catch (e) { + // ignore: use_build_context_synchronously + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: const Text('Error'), + content: Text('Failed to create Dv2: $e'), + actions: [ + TextButton( + child: const Text('OK'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ], + ); + }, + ); + } + } + }, + ), + + + + + + + + + + + + + + + + + + + ], + ), + ), + ), + ), + ); + } +} \ No newline at end of file diff --git a/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Dv2/Dv2View/Dv2_entity_list_screen.dart b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Dv2/Dv2View/Dv2_entity_list_screen.dart new file mode 100644 index 0000000..426e4e3 --- /dev/null +++ b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Dv2/Dv2View/Dv2_entity_list_screen.dart @@ -0,0 +1,873 @@ +// ignore_for_file: use_build_context_synchronously +import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; +import 'Dv2_create_entity_screen.dart'; +import 'Dv2_update_entity_screen.dart'; +import '../Dv2_viewModel/Dv2_view_model_screen.dart'; +import 'package:flutter/services.dart'; +import 'package:speech_to_text/speech_to_text.dart' as stt; +import '../../../../theme/app_style.dart'; +import '../../../../utils/size_utils.dart'; +import '../../../../widgets/custom_icon_button.dart'; +import '../../../../utils/image_constant.dart'; +import '../../../../widgets/app_bar/appbar_image.dart'; +import '../../../../widgets/app_bar/appbar_title.dart'; +import '../../../../widgets/app_bar/custom_app_bar.dart'; +import '../../../../theme/app_decoration.dart'; +import 'package:multi_select_flutter/multi_select_flutter.dart'; +import '../../../../Reuseable/reusable_text_field.dart'; +import 'package:provider/provider.dart'; +import 'package:fluttertoast/fluttertoast.dart'; + +class dv2_entity_list_screen extends StatefulWidget { + static const String routeName = '/entity-list'; + + @override + _dv2_entity_list_screenState createState() => _dv2_entity_list_screenState(); +} + +class _dv2_entity_list_screenState extends State { + List> entities = []; + List> filteredEntities = []; + List> serachEntities = []; + + bool showCardView = true; // Add this variable to control the view mode + TextEditingController searchController = TextEditingController(); + late stt.SpeechToText _speech; + + bool isLoading = false; // Add this variable to track loading state + int currentPage = 0; + int pageSize = 10; // Adjust this based on your backend API + + final ScrollController _scrollController = ScrollController(); + @override + void initState() { + _speech = stt.SpeechToText(); + super.initState(); + fetchEntities(); + _scrollController.addListener(_scrollListener); + fetchwithoutpaging(); + } + + + + + + + + + + + + + + + + + + + + Future fetchwithoutpaging() async { + try { + final provider = + Provider.of(context, listen: false); + final fetchedEntities = await provider.getEntities(); + print('withoutpaging data is $fetchedEntities'); + setState(() { + serachEntities = fetchedEntities; // Update only filteredEntities + }); + print('Dv2 entity is .. $serachEntities'); + } catch (e) { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: const Text('Error'), + content: Text('Failed to fetch Dv2: $e'), + actions: [ + TextButton( + child: const Text('OK'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ], + ); + }, + ); + } + } +Future fetchEntities() async { + try { + setState(() { + isLoading = true; + }); + + + + final provider = + Provider.of(context, listen: false); + final fetchedEntities = + await provider.getAllWithPagination(currentPage, pageSize); + print('pagination data is $fetchedEntities'); + setState(() { + entities.addAll(fetchedEntities); // Add new data to the existing list + filteredEntities = entities.toList(); // Update only filteredEntities + currentPage++; + }); + + print(' entity is .. $filteredEntities'); + } catch (e) { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: const Text('Error'), + content: Text('Failed to fetch Dv2 data: $e'), + actions: [ + TextButton( + child: const Text('OK'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ], + ); + }, + ); + } finally { + setState(() { + isLoading = false; + }); + } + } + + void _scrollListener() { + if (_scrollController.position.pixels == + _scrollController.position.maxScrollExtent) { + fetchEntities(); + } + } + + Future deleteEntity(Map entity) async { + try { + final provider = + Provider.of(context, listen: false); + + await provider.deleteEntity(entity['id']);; + setState(() { + entities.remove(entity); + }); + } catch (e) { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: const Text('Error'), + content: Text('Failed to delete entity: $e'), + actions: [ + TextButton( + child: const Text('OK'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ], + ); + }, + ); + } + } + + void _searchEntities(String keyword) { + setState(() { + filteredEntities = serachEntities + .where((entity) => + + + + + + entity['name'].toString().toLowerCase().contains(keyword.toLowerCase()) || + + + + + + + + + entity['last_name'].toString().toLowerCase().contains(keyword.toLowerCase()) || + + + + + + + + + + + entity['test'].toString().toLowerCase().contains(keyword.toLowerCase()) || + + + + + + + + + entity['currency'].toString().toLowerCase().contains(keyword.toLowerCase()) || + + + + + + entity['currency2'].toString().toLowerCase().contains(keyword.toLowerCase()) || + + + + + + entity['qrcode_field'].toString().toLowerCase().contains(keyword.toLowerCase()) || + + + + + + entity['qrcode_field2'].toString().toLowerCase().contains(keyword.toLowerCase()) || + + + + + + entity['barcode_field'].toString().toLowerCase().contains(keyword.toLowerCase()) || + + + + + + entity['barcode_field2'].toString().toLowerCase().contains(keyword.toLowerCase()) + + + + + ).toList(); + }); + } + + void _startListening() async { + if (!_speech.isListening) { + bool available = await _speech.initialize( + onStatus: (status) { + print('Speech recognition status: $status'); + }, + onError: (error) { + print('Speech recognition error: $error'); + }, + ); + + if (available) { + _speech.listen( + onResult: (result) { + if (result.finalResult) { + searchController.text = result.recognizedWords; + _searchEntities(result.recognizedWords); + } + }, + ); + } + } + } + + void _stopListening() { + if (_speech.isListening) { + _speech.stop(); + } + } + + @override + void dispose() { + _speech.cancel(); + super.dispose(); + } + +onTapArrowleft1(BuildContext context) { + Navigator.pop(context); + } + @override + Widget build(BuildContext context) { + return SafeArea( + child: Scaffold( + appBar: CustomAppBar( + height: getVerticalSize(49), + leadingWidth: 40, + leading: AppbarImage( + height: getSize(24), + width: getSize(24), + svgPath: ImageConstant.imgArrowleft, + margin: getMargin(left: 16, top: 12, bottom: 13), + onTap: () { + onTapArrowleft1(context); + }), + centerTitle: true, + title: AppbarTitle(text: " Dv2"), + actions: [ + Row( + children: [ + Switch( + activeColor: Colors.greenAccent, + inactiveThumbColor: Colors.white, + value: showCardView, + onChanged: (value) { + setState(() { + showCardView = value; + }); + }, + ), + + + + + + + + + + + + + + + + + + + + ], + ), ], + ), + body: RefreshIndicator( + onRefresh: () async { + currentPage = 1; + entities.clear(); + await fetchEntities(); + }, + child: Column( + children: [ + Padding( + padding: const EdgeInsets.all(8.0), + child: TextField( + controller: searchController, + onChanged: (value) { + _searchEntities(value); + }, + decoration: InputDecoration( + hintText: 'Search...', + contentPadding: const EdgeInsets.symmetric(horizontal: 16.0), + filled: true, + fillColor: Colors.grey[200], + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(10.0), + borderSide: BorderSide.none, + ), + suffixIcon: IconButton( + icon: const Icon(Icons.mic), + onPressed: () { + _startListening(); + }, + ), + ), + ), + ), + Expanded( + child: ListView.builder( + itemCount: filteredEntities.length + (isLoading ? 1 : 0), + itemBuilder: (BuildContext context, int index) { + if (index < filteredEntities.length) { + final entity = filteredEntities[index]; + return _buildListItem(entity); + } else { + // Display the loading indicator at the bottom when new data is loading + return const Padding( + padding: EdgeInsets.all(8.0), + child: Center( + child: CircularProgressIndicator(), + ), + ); + } + }, + controller: _scrollController, + ), + ), + ], + ), + ), + floatingActionButton: FloatingActionButton( + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => ChangeNotifierProvider( + create: (context) => Dv2ViewModelScreen(), + child: dv2CreateEntityScreen(), + ), + ), + ).then((_) { + fetchEntities(); + }); + }, + child: const Icon(Icons.add), + ), + )); + } + + Widget _buildListItem(Map entity) { + return showCardView ? _buildCardView(entity) : _buildNormalView(entity); + } + + + // Function to build card view for a list item + Widget _buildCardView(Map entity) { + return Card( + elevation: 2, + margin: const EdgeInsets.symmetric(vertical: 8, horizontal: 16), + child: _buildNormalView(entity)) + ; } + + // Function to build normal view for a list item + + // Function to build normal view for a list item + + Widget _buildNormalView(Map entity) { + final values = entity.values.elementAt(21) ?? 'Authsec'; + + return SizedBox( + width: double.maxFinite, + child: Container( + padding: getPadding( + left: 16, + top: 5, + right: 5, + bottom: 17, + ), + decoration: AppDecoration.outlineGray70011.copyWith( + borderRadius: BorderRadiusStyle.roundedBorder6, + color: Colors.grey[100]), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: getPadding( + //right: 13, + ), + child: Row( + children: [ + Container( + width: MediaQuery.of(context).size.width * 0.30, + margin: getMargin( + left: 8, + top: 3, + bottom: 1, + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text( + entity['id'].toString(), + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGreenSemiBold16, + ), + ], + ), + ), + const Spacer(), + PopupMenuButton( + icon: const Icon( + Icons.more_vert, + color: Colors.black, + size: 16, + ), + itemBuilder: (BuildContext context) { + return [ + PopupMenuItem( + value: 'edit', + child: Row( + children: [ + const Icon( + Icons.edit, + size: 16, // Adjust the icon size as needed + ), + const SizedBox(width: 8), + Text( + 'Edit', + style: AppStyle + .txtGilroySemiBold16, // Adjust the text size as needed + ), + ], + ), + ), + PopupMenuItem( + value: 'delete', + child: Row( + children: [ + const Icon( + Icons.delete, + size: 16, // Adjust the icon size as needed + ), + const SizedBox(width: 8), + Text( + 'Delete', + style: AppStyle + .txtGilroySemiBold16, // Adjust the text size as needed + ), + ], + ), + ), + ]; + }, + onSelected: (String value) { + if (value == 'edit') { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => ChangeNotifierProvider( + create: (context) => Dv2ViewModelScreen(), + child: dv2UpdateEntityScreen(entity: entity), + ), + ), + ).then((_) { + fetchEntities(); + }); + } else if (value == 'delete') { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: const Text('Confirm Deletion'), + content: const Text( + 'Are you sure you want to delete?'), + actions: [ + TextButton( + child: const Text('Cancel'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + TextButton( + child: const Text('Delete'), + onPressed: () { + Navigator.of(context).pop(); + deleteEntity(entity) + .then((value) => {fetchEntities()}); + }, + ), + ], + ); + }, + ); + } + }, + ), + ], + ), + ), + + + + Padding( + padding: getPadding( + top: 10, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "Name : ", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16, + ), + Text( + entity['name'].toString() ?? 'No Name Available', + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16Bluegray900, + ), + ], + ), + ), + + + + + Padding( + padding: getPadding( + top: 10, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "Last_name : ", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16, + ), + Text( + entity['last_name'].toString() ?? 'No Last_name Available', + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16Bluegray900, + ), + ], + ), + ), + + + + + + + Padding( + padding: getPadding( + top: 10, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "Test : ", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16, + ), + Text( + entity['test'].toString() ?? 'No Test Available', + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16Bluegray900, + ), + ], + ), + ), + + + + + Padding( + padding: getPadding( + top: 10, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "Currency : ", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16, + ), + Text( + entity['currency'].toString() ?? 'No Currency Available', + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16Bluegray900, + ), + ], + ), + ), + + + Padding( + padding: getPadding( + top: 10, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "Currency2 : ", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16, + ), + Text( + entity['currency2'].toString() ?? 'No Currency2 Available', + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16Bluegray900, + ), + ], + ), + ), + + + Padding( + padding: getPadding( + top: 10, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "QRCode Field : ", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16, + ), + Text( + entity['qrcode_field'].toString() ?? 'No QRCode Field Available', + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16Bluegray900, + ), + ], + ), + ), + + + Padding( + padding: getPadding( + top: 10, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "QRCode Field2 : ", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16, + ), + Text( + entity['qrcode_field2'].toString() ?? 'No QRCode Field2 Available', + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16Bluegray900, + ), + ], + ), + ), + + + Padding( + padding: getPadding( + top: 10, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "BarCode Field : ", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16, + ), + Text( + entity['barcode_field'].toString() ?? 'No BarCode Field Available', + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16Bluegray900, + ), + ], + ), + ), + + + Padding( + padding: getPadding( + top: 10, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "BarCode Field2 : ", + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16, + ), + Text( + entity['barcode_field2'].toString() ?? 'No BarCode Field2 Available', + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.left, + style: AppStyle.txtGilroyMedium16Bluegray900, + ), + ], + ), + ), + + + + + + ], + ), + ), + ); + } + + Widget _buildLeadingIcon(String title) { + return CircleAvatar( + backgroundColor: Colors.blue, + child: Text( + title.isNotEmpty ? title[0].toUpperCase() : 'NA', + style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold), + ), + ); + } + + void _showAdditionalFieldsDialog( + BuildContext context, + Map entity, + ) { + final dateFormat = DateFormat('yyyy-MM-dd HH:mm:ss'); + + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: const Text('Additional Fields'), + content: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + 'Created At: ${_formatTimestamp(entity['createdAt'], dateFormat)}'), + Text('Created By: ${entity['createdBy'] ?? 'N/A'}'), + Text('Updated By: ${entity['updatedBy'] ?? 'N/A'}'), + Text( + 'Updated At: ${_formatTimestamp(entity['updatedAt'], dateFormat)}'), + Text('Account ID: ${entity['accountId'] ?? 'N/A'}'), + ], + ), + actions: [ + TextButton( + child: const Text('Close'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ], + ); + }, + ); + } + + String _formatTimestamp(dynamic timestamp, DateFormat dateFormat) { + if (timestamp is int) { + final DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(timestamp); + return dateFormat.format(dateTime); + } else if (timestamp is String) { + return timestamp; + } else { + return 'N/A'; + } + } +} + \ No newline at end of file diff --git a/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Dv2/Dv2View/Dv2_update_entity_screen.dart b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Dv2/Dv2View/Dv2_update_entity_screen.dart new file mode 100644 index 0000000..447b0ae --- /dev/null +++ b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Dv2/Dv2View/Dv2_update_entity_screen.dart @@ -0,0 +1,592 @@ +// ignore_for_file: use_build_context_synchronously +import 'dart:convert'; +import 'package:provider/provider.dart'; +import '../Dv2_viewModel/Dv2_view_model_screen.dart'; +import '../../../../utils/image_constant.dart'; +import '../../../../utils/size_utils.dart'; +import '../../../../theme/app_style.dart'; +import '../../../../widgets/app_bar/appbar_image.dart'; +import '../../../../widgets/app_bar/appbar_title.dart'; +import '../../../../widgets/app_bar/custom_app_bar.dart'; +import 'package:barcode_widget/barcode_widget.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import '../../../../widgets/custom_button.dart'; +import '../../../../widgets/custom_text_form_field.dart'; +import 'package:flutter/material.dart'; +import 'package:autocomplete_textfield/autocomplete_textfield.dart'; +import 'package:qr_flutter/qr_flutter.dart'; +import 'package:intl/intl.dart'; + +import 'dart:math'; +import '../../../../Reuseable/reusable_text_field.dart'; +import '../../../../Reuseable/reusable_date_picker_field.dart'; +import '../../../../Reuseable/reusable_date_time_picker_field.dart'; +import '../../../../Reuseable/reusable_dropdown_field.dart'; +import 'package:flutter/services.dart'; +class dv2UpdateEntityScreen extends StatefulWidget { + final Map entity; + + + dv2UpdateEntityScreen({required this.entity}); + + @override + _dv2UpdateEntityScreenState createState() => _dv2UpdateEntityScreenState(); +} + +class _dv2UpdateEntityScreenState extends State { + final _formKey = GlobalKey(); + + + + + +final TextEditingController _inputcurrencyController = TextEditingController(); +double editedcurrencyValue = 0.0; + +final TextEditingController _inputcurrency2Controller = TextEditingController(); +double editedcurrency2Value = 0.0; + +late String inputDataqrcode_field; + late TextEditingController controllerInputqrcode_field; + + +late String inputDataqrcode_field2; + late TextEditingController controllerInputqrcode_field2; + + + late String inputDatabarcode_field; // By default barcode + TextEditingController controllerInputbarcode_field = TextEditingController(); + + + late String inputDatabarcode_field2; // By default barcode + TextEditingController controllerInputbarcode_field2 = TextEditingController(); + + + + + + @override + void initState() { + super.initState(); + final provider = Provider.of(context, listen: false); + + + + + // Convert the currency value to double if it's not already + if (widget.entity['currency'] is String) { + widget.entity['currency'] = + double.tryParse(widget.entity['currency']) ?? 0.0; + } + + // Initially set the controller text without formatting + _inputcurrencyController.text = widget.entity['currency'].toString(); + editedcurrencyValue = widget.entity['currency']; + + // Convert the currency value to double if it's not already + if (widget.entity['currency'] is String) { + widget.entity['currency'] = + double.tryParse(widget.entity['currency']) ?? 0.0; + } + + // Initially set the controller text without formatting + _inputcurrency2Controller.text = widget.entity['currency'].toString(); + editedcurrency2Value = widget.entity['currency']; + + inputDataqrcode_field = widget.entity['qrcode_field'] ?? "Hello"; + controllerInputqrcode_field = TextEditingController(text: inputDataqrcode_field); + + inputDataqrcode_field2 = widget.entity['qrcode_field2'] ?? "Hello"; + controllerInputqrcode_field2 = TextEditingController(text: inputDataqrcode_field2); + + inputDatabarcode_field = widget.entity['barcode_field'] ?? "Hello"; + controllerInputbarcode_field.text = inputDatabarcode_field; + + + inputDatabarcode_field2 = widget.entity['barcode_field2'] ?? "Hello"; + controllerInputbarcode_field2.text = inputDatabarcode_field2; + + + + +} + + + @override + Widget build(BuildContext context) { + final provider = Provider.of(context, listen: false); + return Scaffold( + appBar: CustomAppBar( + height: getVerticalSize(49), + leadingWidth: 40, + leading: AppbarImage( + height: getSize(24), + width: getSize(24), + svgPath: ImageConstant.imgArrowleftBlueGray900, + margin: getMargin(left: 16, top: 12, bottom: 13), + onTap: () { + Navigator.pop(context); + }), + centerTitle: true, + title: AppbarTitle(text: "Update Dv2"), actions: [ + + + + + + + + + + + + + + + + + + + ], +), + body: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(16), + child: Form( + key: _formKey, + child: Column( + children: [ + Container( + padding: EdgeInsets.all(16.0), + decoration: BoxDecoration( + color: Colors.grey[200], + borderRadius: BorderRadius.circular(8.0), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.2), + spreadRadius: 2, + blurRadius: 4, + offset: Offset(0, 2), + ), + ], + ), + child: Column( + children: [ + Text( + "Address", + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + SizedBox(height: 16), + + + + SizedBox(height: 16), + TextFormField( + initialValue: widget.entity['name'], + decoration: InputDecoration( + labelText: 'address name', + ), + onChanged: (value) { + setState(() { + widget.entity['name'] = value; + }); + }, + ), + + + + SizedBox(height: 16), + TextFormField( + initialValue: widget.entity['last_name'], + decoration: InputDecoration( + labelText: 'address last_name', + ), + onChanged: (value) { + setState(() { + widget.entity['last_name'] = value; + }); + }, + ), + + + SizedBox(height: 16), + ], + ), +), +const SizedBox(height: 16), + + + +Container( + padding: EdgeInsets.all(16.0), + decoration: BoxDecoration( + color: Colors.grey[200], + borderRadius: BorderRadius.circular(8.0), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.2), + spreadRadius: 2, + blurRadius: 4, + offset: Offset(0, 2), + ), + ], + ), + child: Column( + children: [ + Text( + "per address", + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + SizedBox(height: 16), + + + + SizedBox(height: 16), + TextFormField( + initialValue: widget.entity['test'], + decoration: InputDecoration( + labelText: 'per_address test', + ), + onChanged: (value) { + setState(() { + widget.entity['test'] = value; + }); + }, + ), + + + SizedBox(height: 16), + ], + ), +), +const SizedBox(height: 16), + + + +Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + TextFormField( + controller: _inputcurrencyController, + keyboardType: TextInputType.number, + decoration: const InputDecoration( + labelText: 'Edit Currency Value', + prefixIcon: Icon(Icons.money), + border: OutlineInputBorder(), + + ), + onChanged: (text) { + setState(() { + try { + String currencyString = text; + currencyString = currencyString.replaceAll(',', ''); // Remove commas + currencyString = currencyString.replaceAll('₹', ''); // Remove currency symbol + editedcurrencyValue = double.parse(currencyString); + print("Parsed double value: $editedcurrencyValue"); + } catch (e) { + print("Invalid input: $text"); + editedcurrencyValue = 0.0; // Set to a default value or handle the error accordingly + } + }); + }, + onSaved: (value) { + widget.entity['currency'] = editedcurrencyValue; + }, + ), + SizedBox(height: 16), + Text( + 'Edited Currency Value: ${editedcurrencyValue.toStringAsFixed(2)}', // Display formatted currency value + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + ), + ), + SizedBox(height: 16), + // Add other form fields here + ], +), + + +Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + TextFormField( + controller: _inputcurrency2Controller, + keyboardType: TextInputType.number, + decoration: const InputDecoration( + labelText: 'Edit Currency Value', + prefixIcon: Icon(Icons.money), + border: OutlineInputBorder(), + + ), + onChanged: (text) { + setState(() { + try { + String currencyString = text; + currencyString = currencyString.replaceAll(',', ''); // Remove commas + currencyString = currencyString.replaceAll('₹', ''); // Remove currency symbol + editedcurrency2Value = double.parse(currencyString); + print("Parsed double value: $editedcurrency2Value"); + } catch (e) { + print("Invalid input: $text"); + editedcurrency2Value = 0.0; // Set to a default value or handle the error accordingly + } + }); + }, + onSaved: (value) { + widget.entity['currency2'] = editedcurrency2Value; + }, + ), + SizedBox(height: 16), + Text( + 'Edited Currency Value: ${editedcurrency2Value.toStringAsFixed(2)}', // Display formatted currency value + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + ), + ), + SizedBox(height: 16), + // Add other form fields here + ], +), + + +Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + 'Generate QR Code', + style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), + ), + const SizedBox(height: 16), + QrImageView( + data: inputDataqrcode_field, + version: QrVersions.auto, + size: 200.0, + gapless: false, + ), + const SizedBox(height: 16), + TextField( + controller: controllerInputqrcode_field, + decoration: InputDecoration( + border: OutlineInputBorder(), + labelText: 'Enter data for QR code', + ), + onChanged: (value) { + setState(() { + inputDataqrcode_field = value; + widget.entity['qrcode_field'] = inputDataqrcode_field; + }); + }, + ), + ], + ), + +Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + 'Generate QR Code', + style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), + ), + const SizedBox(height: 16), + QrImageView( + data: inputDataqrcode_field2, + version: QrVersions.auto, + size: 200.0, + gapless: false, + ), + const SizedBox(height: 16), + TextField( + controller: controllerInputqrcode_field2, + decoration: InputDecoration( + border: OutlineInputBorder(), + labelText: 'Enter data for QR code', + ), + onChanged: (value) { + setState(() { + inputDataqrcode_field2 = value; + widget.entity['qrcode_field2'] = inputDataqrcode_field2; + }); + }, + ), + ], + ), + + Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const Text( + 'Generate Barcode', + style: TextStyle(fontSize: 18), + ), + const SizedBox(height: 16), + if (inputDatabarcode_field.isNotEmpty) + BarcodeWidget( + barcode: Barcode.code128(), // Choose the type of barcode + data: inputDatabarcode_field, + width: 200, + height: 80, + ), + const SizedBox(height: 16), + TextField( + controller: controllerInputbarcode_field, + decoration: const InputDecoration( + border: OutlineInputBorder(), + labelText: 'Enter data for barcode', + ), + onChanged: (value) { + setState(() { + inputDatabarcode_field = value; + widget.entity['barcode_field'] = inputDatabarcode_field; + }); + }, + ), + const SizedBox(height: 16), + // ElevatedButton( + // onPressed: () { + // setState(() { + // inputData = controllerInput.text; + // }); + // }, + // child: const Text('Generate Barcode'), + // ), + ], + ), + const SizedBox(height: 16), + + Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const Text( + 'Generate Barcode', + style: TextStyle(fontSize: 18), + ), + const SizedBox(height: 16), + if (inputDatabarcode_field2.isNotEmpty) + BarcodeWidget( + barcode: Barcode.code128(), // Choose the type of barcode + data: inputDatabarcode_field2, + width: 200, + height: 80, + ), + const SizedBox(height: 16), + TextField( + controller: controllerInputbarcode_field2, + decoration: const InputDecoration( + border: OutlineInputBorder(), + labelText: 'Enter data for barcode', + ), + onChanged: (value) { + setState(() { + inputDatabarcode_field2 = value; + widget.entity['barcode_field2'] = inputDatabarcode_field2; + }); + }, + ), + const SizedBox(height: 16), + // ElevatedButton( + // onPressed: () { + // setState(() { + // inputData = controllerInput.text; + // }); + // }, + // child: const Text('Generate Barcode'), + // ), + ], + ), + const SizedBox(height: 16), + + + + + + CustomButton( + height: getVerticalSize(50), + text: "Update", + margin: getMargin(top: 24, bottom: 5), + onTap: () async { + if (_formKey.currentState!.validate()) { + _formKey.currentState!.save(); + + + + + + + + + + + + + + + + + + + + try { + await provider.updateEntity( + widget.entity[ + 'id'], // Assuming 'id' is the key in your entity map + widget.entity); + + + + + + + + + + + + + + + + + + + + Navigator.pop(context); + } catch (e) { + // ignore: use_build_context_synchronously + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: const Text('Error'), + content: + Text('Failed to update Dv2: $e'), + actions: [ + TextButton( + child: const Text('OK'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ], + ); + }, + ); + } + } + }, + ), + ], + ), + ), + ), + ), + ); + } +} \ No newline at end of file diff --git a/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Dv2/Dv2_Repo/Dv2_repo_screen.dart b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Dv2/Dv2_Repo/Dv2_repo_screen.dart new file mode 100644 index 0000000..fd6563e --- /dev/null +++ b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Dv2/Dv2_Repo/Dv2_repo_screen.dart @@ -0,0 +1,80 @@ +import 'package:dio/dio.dart'; +import '../../../../data/network/base_network_service.dart'; +import '../../../../data/network/network_api_service.dart'; +import '../../../../resources/api_constants.dart'; + +class Dv2RepoScreen { + final String baseUrl = ApiConstants.baseUrl; + final BaseNetworkService _helper = NetworkApiService(); + + Future getEntities() async { + try { + final response = + await _helper.getGetApiResponse('$baseUrl/Dv2/Dv2'); + return response; + } catch (e) { + throw Exception('Failed to get all entities: $e'); + } + } + + Future getAllWithPagination(int page, int size) async { + try { + final response = await _helper.getGetApiResponse( + '$baseUrl/Dv2/Dv2/getall/page?page=$page&size=$size'); + return response; + } catch (e) { + throw Exception('Failed to get all without pagination: $e'); + } + } + + Future createEntity(Map entity) async { + try { + print("in post api$entity"); + final response = await _helper.getPostApiResponse( + '$baseUrl/Dv2/Dv2', entity); + + print(entity); + + return response; + } catch (e) { + throw Exception('Failed to create entity: $e'); + } + } + + Future updateEntity(int entityId, Map entity) async { + try { + await _helper.getPutApiResponse( + '$baseUrl/Dv2/Dv2/$entityId', entity); + print(entity); + } catch (e) { + throw Exception('Failed to update entity: $e'); + } + } + + Future deleteEntity(int entityId) async { + try { + await _helper + .getDeleteApiResponse('$baseUrl/Dv2/Dv2/$entityId'); + } catch (e) { + throw Exception('Failed to delete entity: $e'); + } + } + + + + + + + + + + + + + + + + + + +} diff --git a/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Dv2/Dv2_viewModel/Dv2_view_model_screen.dart b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Dv2/Dv2_viewModel/Dv2_view_model_screen.dart new file mode 100644 index 0000000..1c2351e --- /dev/null +++ b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/Entity/angulardatatype/Dv2/Dv2_viewModel/Dv2_view_model_screen.dart @@ -0,0 +1,119 @@ +import 'dart:typed_data'; +import 'package:dio/dio.dart'; +import 'package:http_parser/http_parser.dart'; +import '../../../../utils/toast_messages/toast_message_util.dart'; +import 'package:flutter/material.dart'; +import '../Dv2_Repo/Dv2_repo_screen.dart'; + +class Dv2ViewModelScreen extends ChangeNotifier{ + final Dv2RepoScreen repo = Dv2RepoScreen(); + + Future>> getEntities() async { + try { + final response = await repo.getEntities(); + final entities = (response as List).cast>(); + return entities; + } catch (e) { + throw Exception('Failed to get all entities: $e'); + } + } + + + Future>> getAllWithPagination( + int page, int size) async { + try { + final response = + await repo.getAllWithPagination(page, size); // ✅ Use await + + print('res - $response'); + + // ✅ Ensure response is a Map + if (response is! Map) { + throw Exception('Unexpected response format: $response'); + } + + // ✅ Extract 'content' and ensure it's a list + final entities = (response['content'] as List) + .cast>() // ✅ Ensure list of maps + .toList(); + return entities; + } catch (e) { + print(e); + throw Exception('Failed to get all without pagination :- $e'); + } + } + + + Future> createEntity(Map entity) async { + try { + print("in post api - $entity"); + // Wait for API response + final responseData = + await repo.createEntity(entity) as Map; + print('after value - $responseData'); + ToastMessageUtil.showToast( + message: "Added Successfully", toastType: ToastType.success); + + return responseData; // Return the data AFTER it is received + } catch (error) { + print("error--$error"); + ToastMessageUtil.showToast( + message: "Got Error", toastType: ToastType.error); + + throw Exception( + 'Failed to Create Entity: $error'); // Properly rethrow the error + } + } + Future updateEntity(int entityId, Map entity) async { + try { + repo.updateEntity(entityId, entity).then((value) { + ToastMessageUtil.showToast( + message: "Updated Successfully", toastType: ToastType.success); + }).onError( + (error, stackTrace) { + print("error--$error"); + ToastMessageUtil.showToast( + message: "Got Error", toastType: ToastType.error); + }, + ); + print(entity); + } catch (e) { + throw Exception('Failed to update entity: $e'); + } + } + + Future deleteEntity(int entityId) async { + try { + repo.deleteEntity(entityId).then((value) { + ToastMessageUtil.showToast( + message: "Deleted Successfully", toastType: ToastType.success); + }).onError( + (error, stackTrace) { + print("error--$error"); + ToastMessageUtil.showToast( + message: "Got Error", toastType: ToastType.error); + }, + ); + } catch (e) { + throw Exception('Failed to delete entity: $e'); + } + } + + + + + + + + + + + + + + + + + + +} \ No newline at end of file diff --git a/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/commans/widgets/custome_drawer.dart b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/commans/widgets/custome_drawer.dart index 73fb148..6ac3d02 100644 --- a/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/commans/widgets/custome_drawer.dart +++ b/test31march2-demot1-f/authsec_flutterNewUi/base_project/lib/commans/widgets/custome_drawer.dart @@ -1,3 +1,9 @@ +import '../../Entity/angulardatatype/Dv2/Dv2View/Dv2_entity_list_screen.dart'; +import '../../Entity/angulardatatype/Dv2/Dv2_viewModel/Dv2_view_model_screen.dart'; + +import '../../Entity/angulardatatype/Adv1/Adv1View/Adv1_entity_list_screen.dart'; +import '../../Entity/angulardatatype/Adv1/Adv1_viewModel/Adv1_view_model_screen.dart'; + import 'package:base_project/utils/image_constant.dart'; import 'package:base_project/commans/widgets/custome_drawe_item.dart'; import 'package:base_project/resources/app_colors.dart'; @@ -9,79 +15,113 @@ import 'package:flutter_svg/svg.dart'; import 'package:provider/provider.dart'; class MyCustomDrawer extends StatelessWidget { - const MyCustomDrawer({super.key}); +const MyCustomDrawer({super.key}); - @override - Widget build(BuildContext context) { - final email = UserManager().email; - final userName = UserManager().userName; - final provider = Provider.of(context, listen: false); - return Drawer( - child: ListView( - padding: EdgeInsets.zero, - children: [ - UserAccountsDrawerHeader( - decoration: const BoxDecoration( - color: AppColors.primary, - ), - currentAccountPicture: CircleAvatar( - radius: 60, - backgroundColor: AppColors.primary.withOpacity(0.3), - backgroundImage: provider.profileImageBytes != null - ? MemoryImage(provider.profileImageBytes!) - : null, - child: provider.profileImageBytes != null - ? null // Use backgroundImage for the actual image, so child should be null - : SvgPicture.asset( - ImageConstant.userProfileImg, // Placeholder SVG asset +@override +Widget build(BuildContext context) { +final email = UserManager().email; +final userName = UserManager().userName; +final provider = Provider.of(context, listen: false); +return Drawer( +child: ListView( +padding: EdgeInsets.zero, +children: [ +UserAccountsDrawerHeader( +decoration: const BoxDecoration( +color: AppColors.primary, +), +currentAccountPicture: CircleAvatar( +radius: 60, +backgroundColor: AppColors.primary.withOpacity(0.3), +backgroundImage: provider.profileImageBytes != null +? MemoryImage(provider.profileImageBytes!) +: null, +child: provider.profileImageBytes != null +? null // Use backgroundImage for the actual image, so child should be null +: SvgPicture.asset( +ImageConstant.userProfileImg, // Placeholder SVG asset // AppImages.userProfileImg, // Placeholder SVG asset - width: 60, // Adjust to fit the CircleAvatar - height: 60, - ), - ), - accountName: Text("Hello, $userName"), - accountEmail: Text(email.toString()), - ), - DrawerItem( - color: AppColors.primary, - icon: Icons.person, - title: 'Profile', - onTap: () { - Navigator.pushNamed(context, RouteNames.profileView); - }, - ), - DrawerItem( - color: AppColors.primary, - icon: Icons.system_security_update, - title: 'System Parameters', - onTap: () { +width: 60, // Adjust to fit the CircleAvatar +height: 60, +), +), +accountName: Text("Hello, $userName"), +accountEmail: Text(email.toString()), +), +DrawerItem( +color: AppColors.primary, +icon: Icons.person, +title: 'Profile', +onTap: () { +Navigator.pushNamed(context, RouteNames.profileView); +}, +), +DrawerItem( +color: AppColors.primary, +icon: Icons.system_security_update, +title: 'System Parameters', +onTap: () { // Add navigation or other logic here - Navigator.pushNamed(context, RouteNames.systemParamsView); - }, - ), - DrawerItem( - color: AppColors.primary, - icon: Icons.password, - title: 'change password', - onTap: () { - Navigator.pushNamed(context, RouteNames.changePasswordView); - }, - ), +Navigator.pushNamed(context, RouteNames.systemParamsView); +}, +), +DrawerItem( +color: AppColors.primary, +icon: Icons.password, +title: 'change password', +onTap: () { +Navigator.pushNamed(context, RouteNames.changePasswordView); +}, +), // NEW MENU - - DrawerItem( - icon: Icons.logout, - color: Colors.red, - title: 'Logout', - onTap: () async { - await UserManager().clearUser(); - Navigator.pushReplacementNamed(context, RouteNames.splashView); - }, +DrawerItem( + color: AppColors.primary, + icon: Icons.chat_bubble, + title: 'Dv2', + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => ChangeNotifierProvider( + create: (context) => Dv2ViewModelScreen(), + child: dv2_entity_list_screen(), + ), + ), + ); + }, ), - ], - ), - ); - } + +DrawerItem( +color: AppColors.primary, +icon: Icons.chat_bubble, +title: 'Adv1', +onTap: () { +Navigator.push( +context, +MaterialPageRoute( +builder: (context) => ChangeNotifierProvider( +create: (context) => Adv1ViewModelScreen(), +child: adv1_entity_list_screen(), +), +), +); +}, +), + + +DrawerItem( +icon: Icons.logout, +color: Colors.red, +title: 'Logout', +onTap: () async { +await UserManager().clearUser(); +Navigator.pushReplacementNamed(context, RouteNames.splashView); +}, +), +], +), +); } +} \ No newline at end of file diff --git a/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/Builders/Services/BuilderService.java b/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/Builders/Services/BuilderService.java index 11edc5f..9f430b6 100644 --- a/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/Builders/Services/BuilderService.java +++ b/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/Builders/Services/BuilderService.java @@ -69,6 +69,12 @@ public class BuilderService { executeDump(true); // ADD OTHER SERVICE +addCustomMenu( "Dv2", "Transcations"); + + +addCustomMenu( "Adv1", "Transcations"); + + System.out.println("dashboard and menu inserted..."); diff --git a/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/angulardatatype/Controllers/Adv1Controller.java b/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/angulardatatype/Controllers/Adv1Controller.java new file mode 100644 index 0000000..bd75017 --- /dev/null +++ b/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/angulardatatype/Controllers/Adv1Controller.java @@ -0,0 +1,171 @@ +package com.realnet.angulardatatype.Controllers; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; + import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import com.fasterxml.jackson.core.JsonProcessingException; +import org.springframework.web.bind.annotation.CrossOrigin; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.realnet.config.EmailService; +import com.realnet.users.entity1.AppUser; +import com.realnet.users.service1.AppUserServiceImpl; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.data.domain.*; +import com.realnet.fnd.response.EntityResponse; +import org.springframework.http.*; +import org.springframework.beans.factory.annotation.*; +import com.realnet.angulardatatype.Entity.Adv1; +import com.realnet.angulardatatype.Services.Adv1Service ; + + + + + + + + + + + + + + + + + + + + + + + + +@RequestMapping(value = "/Adv1") + @CrossOrigin("*") +@RestController +public class Adv1Controller { + @Autowired + private Adv1Service Service; + +@Value("${projectPath}") + private String projectPath; + + + + + + + + + + + + + + + + + + + + + + + + + + @PostMapping("/Adv1") + public Adv1 Savedata(@RequestBody Adv1 data) { + Adv1 save = Service.Savedata(data) ; + + + + + + + + + + + + + + + + + + + + + + + + System.out.println("data saved..." + save); + + return save; + } +@PutMapping("/Adv1/{id}") + public Adv1 update(@RequestBody Adv1 data,@PathVariable Integer id ) { + Adv1 update = Service.update(data,id); + System.out.println("data update..." + update); + return update; + } +// get all with pagination + @GetMapping("/Adv1/getall/page") + public Page getall(@RequestParam(value = "page", required = false) Integer page, + @RequestParam(value = "size", required = false) Integer size) { + Pageable paging = PageRequest.of(page, size); + Page get = Service.getAllWithPagination(paging); + + return get; + + } + @GetMapping("/Adv1") + public List getdetails() { + List get = Service.getdetails(); + return get; +} +// get all without authentication + + @GetMapping("/token/Adv1") + public List getallwioutsec() { + List get = Service.getdetails(); + return get; +} +@GetMapping("/Adv1/{id}") + public Adv1 getdetailsbyId(@PathVariable Integer id ) { + Adv1 get = Service.getdetailsbyId(id); + return get; + } +@DeleteMapping("/Adv1/{id}") + public ResponseEntity delete_by_id(@PathVariable Integer id ) { + Service.delete_by_id(id); + return new ResponseEntity<>(new EntityResponse("Deleted"), HttpStatus.OK); + + } + + + + + + + + + + + + + + + + + + + + + + + + + +} \ No newline at end of file diff --git a/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/angulardatatype/Controllers/Dv2Controller.java b/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/angulardatatype/Controllers/Dv2Controller.java new file mode 100644 index 0000000..9f3d963 --- /dev/null +++ b/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/angulardatatype/Controllers/Dv2Controller.java @@ -0,0 +1,147 @@ +package com.realnet.angulardatatype.Controllers; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; + import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import com.fasterxml.jackson.core.JsonProcessingException; +import org.springframework.web.bind.annotation.CrossOrigin; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.realnet.config.EmailService; +import com.realnet.users.entity1.AppUser; +import com.realnet.users.service1.AppUserServiceImpl; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.data.domain.*; +import com.realnet.fnd.response.EntityResponse; +import org.springframework.http.*; +import org.springframework.beans.factory.annotation.*; +import com.realnet.angulardatatype.Entity.Dv2; +import com.realnet.angulardatatype.Services.Dv2Service ; + + + + + + + + + + + + + + + + + + +@RequestMapping(value = "/Dv2") + @CrossOrigin("*") +@RestController +public class Dv2Controller { + @Autowired + private Dv2Service Service; + +@Value("${projectPath}") + private String projectPath; + + + + + + + + + + + + + + + + + + + + @PostMapping("/Dv2") + public Dv2 Savedata(@RequestBody Dv2 data) { + Dv2 save = Service.Savedata(data) ; + + + + + + + + + + + + + + + + + + System.out.println("data saved..." + save); + + return save; + } +@PutMapping("/Dv2/{id}") + public Dv2 update(@RequestBody Dv2 data,@PathVariable Integer id ) { + Dv2 update = Service.update(data,id); + System.out.println("data update..." + update); + return update; + } +// get all with pagination + @GetMapping("/Dv2/getall/page") + public Page getall(@RequestParam(value = "page", required = false) Integer page, + @RequestParam(value = "size", required = false) Integer size) { + Pageable paging = PageRequest.of(page, size); + Page get = Service.getAllWithPagination(paging); + + return get; + + } + @GetMapping("/Dv2") + public List getdetails() { + List get = Service.getdetails(); + return get; +} +// get all without authentication + + @GetMapping("/token/Dv2") + public List getallwioutsec() { + List get = Service.getdetails(); + return get; +} +@GetMapping("/Dv2/{id}") + public Dv2 getdetailsbyId(@PathVariable Integer id ) { + Dv2 get = Service.getdetailsbyId(id); + return get; + } +@DeleteMapping("/Dv2/{id}") + public ResponseEntity delete_by_id(@PathVariable Integer id ) { + Service.delete_by_id(id); + return new ResponseEntity<>(new EntityResponse("Deleted"), HttpStatus.OK); + + } + + + + + + + + + + + + + + + + + + + +} \ No newline at end of file diff --git a/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/angulardatatype/Entity/Adv1.java b/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/angulardatatype/Entity/Adv1.java new file mode 100644 index 0000000..064f9d1 --- /dev/null +++ b/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/angulardatatype/Entity/Adv1.java @@ -0,0 +1,86 @@ +package com.realnet.angulardatatype.Entity; + import lombok.*; +import com.realnet.WhoColumn.Entity.Extension; + import javax.persistence.*; + import java.time.LocalDateTime; + import java.util.*; + + + + + + + + + + + + + + + + + + + + + + + + + @Entity + @Data + public class Adv1 extends Extension { + /** + * + */ + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + private String ismale; + + private String idfemale; + + + + +private boolean test1; + + + + + + +private boolean t1; + + + +private String fileupload_fieldname; +private String fileupload_fieldpath ; + +private String fileupload_field2name; +private String fileupload_field2path ; + +private String imageupload_fieldname; +private String imageupload_fieldpath ; + +private String imageupload_field2name; +private String imageupload_field2path ; + +private String audio_fieldname; +private String audio_fieldpath ; + +private String audio_field2name; +private String audio_field2path ; + +private String video_fieldname; +private String video_fieldpath ; + +private String video_field2name; +private String video_field2path ; + + +} diff --git a/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/angulardatatype/Entity/Dv2.java b/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/angulardatatype/Entity/Dv2.java new file mode 100644 index 0000000..bbb56a2 --- /dev/null +++ b/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/angulardatatype/Entity/Dv2.java @@ -0,0 +1,73 @@ +package com.realnet.angulardatatype.Entity; + import lombok.*; +import com.realnet.WhoColumn.Entity.Extension; + import javax.persistence.*; + import java.time.LocalDateTime; + import java.util.*; + + + + + + + + + + + + + + + + + + + @Entity + @Data + public class Dv2 extends Extension { + /** + * + */ + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + + + + +private String name; + + + + +private String last_name; + + + + + + + +private String test; + + + +private String currency; + +private String currency2; + +private String qrcode_field; + +private String qrcode_field2; + +private String barcode_field; + +private String barcode_field2; + + + + +} diff --git a/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/angulardatatype/Repository/Adv1Repository.java b/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/angulardatatype/Repository/Adv1Repository.java new file mode 100644 index 0000000..620feb3 --- /dev/null +++ b/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/angulardatatype/Repository/Adv1Repository.java @@ -0,0 +1,48 @@ +package com.realnet.angulardatatype.Repository; + + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import org.springframework.stereotype.Repository; +import java.util.*; + + + + + + + + + + + + + + + + + + + + + + + + + + + +import com.realnet.angulardatatype.Entity.Adv1; + +@Repository +public interface Adv1Repository extends JpaRepository { + +@Query(value = "select * from adv1 where created_by=?1", nativeQuery = true) + List findAll(Long creayedBy); + +@Query(value = "select * from adv1 where created_by=?1", nativeQuery = true) + Page findAll(Pageable page, Long creayedBy); +} \ No newline at end of file diff --git a/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/angulardatatype/Repository/Dv2Repository.java b/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/angulardatatype/Repository/Dv2Repository.java new file mode 100644 index 0000000..c3d2237 --- /dev/null +++ b/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/angulardatatype/Repository/Dv2Repository.java @@ -0,0 +1,42 @@ +package com.realnet.angulardatatype.Repository; + + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import org.springframework.stereotype.Repository; +import java.util.*; + + + + + + + + + + + + + + + + + + + + + +import com.realnet.angulardatatype.Entity.Dv2; + +@Repository +public interface Dv2Repository extends JpaRepository { + +@Query(value = "select * from dv2 where created_by=?1", nativeQuery = true) + List findAll(Long creayedBy); + +@Query(value = "select * from dv2 where created_by=?1", nativeQuery = true) + Page findAll(Pageable page, Long creayedBy); +} \ No newline at end of file diff --git a/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/angulardatatype/Services/Adv1Service.java b/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/angulardatatype/Services/Adv1Service.java new file mode 100644 index 0000000..cd8feff --- /dev/null +++ b/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/angulardatatype/Services/Adv1Service.java @@ -0,0 +1,195 @@ +package com.realnet.angulardatatype.Services; +import com.realnet.angulardatatype.Repository.Adv1Repository; +import com.realnet.angulardatatype.Entity.Adv1 +;import java.util.*; + +import org.springframework.beans.factory.annotation.Autowired; +import com.realnet.SequenceGenerator.Service.SequenceService; +import com.realnet.Notification.Entity.NotificationService; +import org.springframework.data.domain.Page; +import com.realnet.realm.Entity.Realm; +import com.realnet.realm.Services.RealmService; +import org.springframework.data.domain.Pageable; +import org.springframework.http.*;import com.realnet.users.service1.AppUserServiceImpl; +import com.realnet.users.entity1.AppUser; + + + + + + + + + + + + + + + + + + + + + + + + + import org.springframework.stereotype.Service; + +@Service + public class Adv1Service { +@Autowired +private Adv1Repository Repository; + @Autowired + private AppUserServiceImpl userService; +@Autowired + private RealmService realmService; + + + + + + + + + + + + + + + + + + + + + + + +public Adv1 Savedata(Adv1 data) { + + + + + + + + + + + + + + + + + + + + + + + + + data.setUpdatedBy(getUser().getUserId()); + data.setCreatedBy(getUser().getUserId()); + data.setAccountId(getUser().getAccount().getAccount_id()); +Adv1 save = Repository.save(data); + return save; + } + + +// get all with pagination + public Page getAllWithPagination(Pageable page) { + return Repository.findAll(page, getUser().getUserId()); + } +public List getdetails() { + List realm = realmService.findByUserId(getUser().getUserId()); +List all = Repository.findAll(getUser().getUserId()); + + return all ; } + + +public Adv1 getdetailsbyId(Integer id) { + return Repository.findById(id).get(); + } + + + public void delete_by_id(Integer id) { + Repository.deleteById(id); +} + + +public Adv1 update(Adv1 data,Integer id) { + Adv1 old = Repository.findById(id).get(); +old.setIsmale(data.getIsmale()); + +old.setIdfemale(data.getIdfemale()); + + + +old.setTest1(data.isTest1()); + + + + + + + +old.setT1(data.isT1()); + + + + + + + + + + + + + + + + + + + + + +final Adv1 test = Repository.save(old); + data.setUpdatedBy(getUser().getUserId()); + return test;} + + + + + + + + + + + + + + + + + + + + + + + + + public AppUser getUser() { + AppUser user = userService.getLoggedInUser(); + return user; + + }} diff --git a/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/angulardatatype/Services/Dv2Service.java b/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/angulardatatype/Services/Dv2Service.java new file mode 100644 index 0000000..a1ede68 --- /dev/null +++ b/test31march2-test2-b/authsec_springboot/backend/src/main/java/com/realnet/angulardatatype/Services/Dv2Service.java @@ -0,0 +1,184 @@ +package com.realnet.angulardatatype.Services; +import com.realnet.angulardatatype.Repository.Dv2Repository; +import com.realnet.angulardatatype.Entity.Dv2 +;import java.util.*; + +import org.springframework.beans.factory.annotation.Autowired; +import com.realnet.SequenceGenerator.Service.SequenceService; +import com.realnet.Notification.Entity.NotificationService; +import org.springframework.data.domain.Page; +import com.realnet.realm.Entity.Realm; +import com.realnet.realm.Services.RealmService; +import org.springframework.data.domain.Pageable; +import org.springframework.http.*;import com.realnet.users.service1.AppUserServiceImpl; +import com.realnet.users.entity1.AppUser; + + + + + + + + + + + + + + + + +import com.realnet.config.EmailService; + + + import org.springframework.stereotype.Service; + +@Service + public class Dv2Service { +@Autowired +private Dv2Repository Repository; + @Autowired + private AppUserServiceImpl userService; +@Autowired + private RealmService realmService; + + + + + + + + + + + + + + + +@Autowired + private EmailService emailServicestatic; + +public Dv2 Savedata(Dv2 data) { + + + + + + + + + + + + + + + + + + + +try + { + + // emailServicestatic.sendEmail( getUser().getEmail(),"Dv2", "test"); + emailServicestatic.sendEmailViaSetu(getUser().getEmail(),"test","","ganesh"); + +} catch (Exception e) { + // TODO: handle exception + System.out.println("Got error During Mail Send " + e); + } + + + + + data.setUpdatedBy(getUser().getUserId()); + data.setCreatedBy(getUser().getUserId()); + data.setAccountId(getUser().getAccount().getAccount_id()); +Dv2 save = Repository.save(data); + return save; + } + + +// get all with pagination + public Page getAllWithPagination(Pageable page) { + return Repository.findAll(page, getUser().getUserId()); + } +public List getdetails() { + List realm = realmService.findByUserId(getUser().getUserId()); +List all = Repository.findAll(getUser().getUserId()); + + return all ; } + + +public Dv2 getdetailsbyId(Integer id) { + return Repository.findById(id).get(); + } + + + public void delete_by_id(Integer id) { + Repository.deleteById(id); +} + + +public Dv2 update(Dv2 data,Integer id) { + Dv2 old = Repository.findById(id).get(); + + +old.setName(data.getName()); + + + +old.setLast_name(data.getLast_name()); + + + + + + +old.setTest(data.getTest()); + + + + +old.setCurrency(data.getCurrency()); + +old.setCurrency2(data.getCurrency2()); + +old.setQrcode_field(data.getQrcode_field()); + +old.setQrcode_field2(data.getQrcode_field2()); + +old.setBarcode_field(data.getBarcode_field()); + +old.setBarcode_field2(data.getBarcode_field2()); + + + +final Dv2 test = Repository.save(old); + data.setUpdatedBy(getUser().getUserId()); + return test;} + + + + + + + + + + + + + + + + + + + public AppUser getUser() { + AppUser user = userService.getLoggedInUser(); + return user; + + }} diff --git a/test31march2-testdb-d/authsec_mysql/mysql/wf_table/wf_table.sql b/test31march2-testdb-d/authsec_mysql/mysql/wf_table/wf_table.sql new file mode 100755 index 0000000..507bd1d --- /dev/null +++ b/test31march2-testdb-d/authsec_mysql/mysql/wf_table/wf_table.sql @@ -0,0 +1,4 @@ +CREATE TABLE testdb.Adv1(id BIGINT NOT NULL AUTO_INCREMENT, video_field2 VARCHAR(400), video_field VARCHAR(400), audio_field2 VARCHAR(400), ismale VARCHAR(400), fileupload_field2 VARCHAR(400), fileupload_field VARCHAR(400), imageupload_field VARCHAR(400), audio_field VARCHAR(400), idfemale VARCHAR(400), test1 bit(1), t1 bit(1), imageupload_field2 VARCHAR(400), PRIMARY KEY (id)); + +CREATE TABLE testdb.Dv2(id BIGINT NOT NULL AUTO_INCREMENT, qrcode_field2 VARCHAR(400), test VARCHAR(400), currency2 VARCHAR(400), currency VARCHAR(400), qrcode_field VARCHAR(400), name VARCHAR(400), last_name VARCHAR(400), barcode_field2 VARCHAR(400), static VARCHAR(400), barcode_field VARCHAR(400), PRIMARY KEY (id)); +