You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							324 lines
						
					
					
						
							12 KiB
						
					
					
				
			
		
		
	
	
							324 lines
						
					
					
						
							12 KiB
						
					
					
				| import 'dart:convert';
 | |
| import 'dart:io';
 | |
| 
 | |
| import 'package:flutter/material.dart';
 | |
| import 'package:flutter/services.dart';
 | |
| import 'package:healthcare_user/Reports/allreports.dart';
 | |
| import 'package:healthcare_user/common/settings.dart';
 | |
| import 'package:healthcare_user/common/zoom_image.dart';
 | |
| import 'package:image_picker/image_picker.dart';
 | |
| import 'package:multi_image_picker/multi_image_picker.dart';
 | |
| 
 | |
| class FindingImages extends StatefulWidget {
 | |
|   var imageDetails;
 | |
|   var recordId;
 | |
| 
 | |
|   FindingImages({this.imageDetails,this.recordId});
 | |
| 
 | |
| 
 | |
|   @override
 | |
|   State<FindingImages> createState() => _FindingImagesState();
 | |
| }
 | |
| 
 | |
| class _FindingImagesState extends State<FindingImages> {
 | |
| 
 | |
|   final ImagePicker imagePicker = ImagePicker();
 | |
|   List imageFileList = [];
 | |
|   List uiFindingsImages = [];
 | |
|   final ImagePicker _picker = ImagePicker();
 | |
| 
 | |
|  /* Future pickImageFromGallery() async {
 | |
|     imageFileList = [];
 | |
|     final List<XFile>? selectedImages = await imagePicker.pickMultiImage();
 | |
|     AppSettings.preLoaderDialog(context);
 | |
|     if (selectedImages!.isNotEmpty) {
 | |
|       imageFileList.addAll(selectedImages);
 | |
|     }
 | |
| 
 | |
|     var res = await AppSettings.updateFindingsGallery(imageFileList,widget.recordId);
 | |
|     print(jsonDecode(res));
 | |
|     Navigator.of(context, rootNavigator: true).pop();
 | |
|     setState(() {
 | |
|       widget.imageDetails = jsonDecode(res)['findings'];
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   Future takeImageFromCamera() async {
 | |
|     try {
 | |
|       final image = await _picker.pickImage(source: ImageSource.camera);
 | |
|       if (image == null) return;
 | |
|       final imageTemp = File(image.path);
 | |
|       AppSettings.preLoaderDialog(context);
 | |
|       var res = await AppSettings.updateFindingsCamera(image,widget.recordId);
 | |
|       print(jsonDecode(res));
 | |
|       Navigator.of(context, rootNavigator: true).pop();
 | |
|       setState(() {
 | |
|         widget.imageDetails = jsonDecode(res)['findings'];
 | |
|       });
 | |
|     } on PlatformException catch (e) {
 | |
|       print('Failed to pick image: $e');
 | |
|     }
 | |
|   }*/
 | |
| 
 | |
|   Future pickImageFromGalleryForUpdate() async {
 | |
|     imageFileList = [];
 | |
|     final List<XFile>? selectedImages = await imagePicker.pickMultiImage();
 | |
|     AppSettings.preLoaderDialog(context);
 | |
|     if (selectedImages!.isNotEmpty) {
 | |
|       imageFileList.addAll(selectedImages);
 | |
|     }
 | |
| 
 | |
|     var res = await AppSettings.updateFindingsGallery(imageFileList,widget.recordId);
 | |
|     print(jsonDecode(res));
 | |
|     Navigator.of(context, rootNavigator: true).pop();
 | |
|     setState(() {
 | |
|       widget.imageDetails = jsonDecode(res)['findings'];
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   Future takeImageFromCameraForUpdate() async {
 | |
|     try {
 | |
|       final image = await _picker.pickImage(source: ImageSource.camera);
 | |
|       if (image == null) return;
 | |
|       final imageTemp = File(image.path);
 | |
|       AppSettings.preLoaderDialog(context);
 | |
|       var res = await AppSettings.updateFindingsCamera(image,widget.recordId);
 | |
|       print(jsonDecode(res));
 | |
|       Navigator.of(context, rootNavigator: true).pop();
 | |
|       setState(() {
 | |
|         widget.imageDetails = jsonDecode(res)['findings'];
 | |
|       });
 | |
|     } on PlatformException catch (e) {
 | |
|       print('Failed to pick image: $e');
 | |
|     }
 | |
|   }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
|   Widget renderUi() {
 | |
| 
 | |
|     if(widget.imageDetails.length!=0){
 | |
|       return GridView.builder(
 | |
|         itemCount:widget.imageDetails.length,
 | |
|         gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
 | |
|           crossAxisCount: 3,
 | |
|           crossAxisSpacing: 2.0,
 | |
|           mainAxisSpacing: 2.0,
 | |
|         ),
 | |
|         itemBuilder: (BuildContext context, int index) {
 | |
|           return GestureDetector(
 | |
|             onTap: () {
 | |
| 
 | |
|               Navigator.push(
 | |
|                   context,
 | |
|                   new MaterialPageRoute(
 | |
|                       builder: (__) => new ImageZoomPage(imageName:'Findings',imageDetails:widget.imageDetails[index]['url'])));
 | |
|               /*gridOntap(index);*/
 | |
|             },
 | |
|             child: Container(
 | |
|               width: MediaQuery.of(context).size.width * .30,
 | |
|               height: MediaQuery.of(context).size.height * .15,
 | |
|               decoration: BoxDecoration(
 | |
|                   shape: BoxShape.rectangle,
 | |
|                   image: DecorationImage(
 | |
|                       image: NetworkImage(
 | |
|                           widget.imageDetails[index]['url'])
 | |
|                       as ImageProvider, // picked file
 | |
|                       fit: BoxFit.fill)),
 | |
|               child:  Stack(
 | |
|                   children: [
 | |
|                     Positioned(
 | |
|                       right: 0,
 | |
|                       child: Container(
 | |
|                         child: IconButton(
 | |
|                           iconSize: 30,
 | |
|                           icon: const Icon(
 | |
|                             Icons.cancel,
 | |
|                             color: Colors.red,
 | |
|                           ),
 | |
|                           onPressed: () async {
 | |
| 
 | |
|                             AppSettings.preLoaderDialog(context);
 | |
| 
 | |
|                             String fileName = widget.imageDetails[index]['url'].split('/').last;
 | |
| 
 | |
|                             var payload = new Map<String, dynamic>();
 | |
|                             payload["urlType"] = 'findings';
 | |
|                             payload["url"] = widget.imageDetails[index]['url'];
 | |
| 
 | |
|                            // bool deleteStatus = await AppSettings.deleteRecordsNew(payload,widget.recordId);
 | |
|                             try{
 | |
|                               var res = await AppSettings.deleteRecordsNew(payload,widget.recordId);
 | |
|                               print(jsonDecode(res));
 | |
|                               Navigator.of(context, rootNavigator: true).pop();
 | |
|                               AppSettings.longSuccessToast("Image deleted Successfully");
 | |
|                               setState(() {
 | |
|                                 widget.imageDetails = jsonDecode(res)['remainingUrls'];
 | |
|                               });
 | |
|                             }
 | |
|                             catch(e){
 | |
|                               print(e);
 | |
|                               Navigator.of(context, rootNavigator: true).pop();
 | |
|                               AppSettings.longFailedToast("Image deletion failed");
 | |
|                             }
 | |
|                           },
 | |
|                         ),
 | |
|                         /* color: Colors.pinkAccent,
 | |
|                       width: 35,
 | |
|                       height: 35,*/
 | |
|                       ),
 | |
|                     )]),
 | |
|             ),
 | |
| 
 | |
|             //Image.network(widget.imageDetails[index]['url']),
 | |
|           );
 | |
|         },
 | |
|       );
 | |
|     }
 | |
|     else{
 | |
|       return  Center(
 | |
|           child: Padding(
 | |
|             padding: EdgeInsets.fromLTRB(0, 40, 0, 0),
 | |
|             child: Column(
 | |
|               crossAxisAlignment: CrossAxisAlignment.center,
 | |
|               children: [
 | |
|                 SizedBox(height: MediaQuery.of(context).size.height * .25,),
 | |
|                 Text('Click below icon to add new findings'),
 | |
|                 SizedBox(
 | |
|                   height: 20,
 | |
|                 ),
 | |
|                 CircleAvatar(
 | |
|                   backgroundColor: primaryColor,
 | |
|                   radius: 40,
 | |
|                   child: IconButton(
 | |
|                     iconSize: 40,
 | |
|                     icon: const Icon(
 | |
|                       Icons.add,
 | |
|                       color: Colors.white,
 | |
|                     ),
 | |
|                       onPressed: () async {
 | |
|                         showModalBottomSheet<void>(
 | |
|                             context: context,
 | |
|                             builder: (BuildContext context) {
 | |
|                               return SizedBox(
 | |
|                                 height: 200,
 | |
|                                 child: Center(
 | |
|                                   child: Row(
 | |
|                                     mainAxisAlignment: MainAxisAlignment.center,
 | |
|                                     children: <Widget>[
 | |
|                                       GestureDetector(
 | |
|                                         child: Icon(
 | |
|                                           Icons.camera_alt_outlined,
 | |
|                                           size: 100,
 | |
|                                           color: primaryColor,
 | |
|                                         ),
 | |
|                                         onTap: () async {
 | |
|                                           await takeImageFromCameraForUpdate();
 | |
|                                           Navigator.pop(context);
 | |
|                                         },
 | |
|                                       ),
 | |
|                                       SizedBox(
 | |
|                                         width: MediaQuery.of(context).size.width *
 | |
|                                             .20,
 | |
|                                       ),
 | |
|                                       GestureDetector(
 | |
|                                         child: Icon(
 | |
|                                           Icons.photo,
 | |
|                                           size: 100,
 | |
|                                           color: primaryColor,
 | |
|                                         ),
 | |
|                                         onTap: () async {
 | |
|                                           await pickImageFromGalleryForUpdate();
 | |
|                                           Navigator.pop(context);
 | |
|                                         },
 | |
|                                       ),
 | |
|                                     ],
 | |
|                                   ),
 | |
|                                 ),
 | |
|                               );
 | |
|                             });
 | |
|                       },
 | |
|                   ),
 | |
|                 )
 | |
|               ],
 | |
|             ),
 | |
|           )
 | |
|       );
 | |
|     }
 | |
| 
 | |
|   }
 | |
| 
 | |
| 
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context) {
 | |
|     return Scaffold(
 | |
|       appBar: AppBar(
 | |
|         backgroundColor: primaryColor,
 | |
|         title: Text("Finding Images"),
 | |
|         actions: [
 | |
|           Visibility(
 | |
|             visible: widget.imageDetails.length>0,
 | |
|             child: IconButton(
 | |
|             iconSize: 30,
 | |
|             icon:  Icon(
 | |
|               Icons.add_task,
 | |
|               color: Colors.white,
 | |
|             ),
 | |
|             onPressed: () async {
 | |
|               showModalBottomSheet<void>(
 | |
|                   context: context,
 | |
|                   builder: (BuildContext context) {
 | |
|                     return SizedBox(
 | |
|                       height: 200,
 | |
|                       child: Center(
 | |
|                         child: Row(
 | |
|                           mainAxisAlignment: MainAxisAlignment.center,
 | |
|                           children: <Widget>[
 | |
|                             GestureDetector(
 | |
|                               child: Icon(
 | |
|                                 Icons.camera_alt_outlined,
 | |
|                                 size: 100,
 | |
|                                 color: primaryColor,
 | |
|                               ),
 | |
|                               onTap: () async {
 | |
|                                 await takeImageFromCameraForUpdate();
 | |
|                                 Navigator.pop(context);
 | |
|                               },
 | |
|                             ),
 | |
|                             SizedBox(
 | |
|                               width: MediaQuery.of(context).size.width *
 | |
|                                   .20,
 | |
|                             ),
 | |
|                             GestureDetector(
 | |
|                               child: Icon(
 | |
|                                 Icons.photo,
 | |
|                                 size: 100,
 | |
|                                 color: primaryColor,
 | |
|                               ),
 | |
|                               onTap: () async {
 | |
|                                 await pickImageFromGalleryForUpdate();
 | |
|                                 Navigator.pop(context);
 | |
|                               },
 | |
|                             ),
 | |
|                           ],
 | |
|                         ),
 | |
|                       ),
 | |
|                     );
 | |
|                   });
 | |
| 
 | |
| 
 | |
| 
 | |
|             },
 | |
|           ),)
 | |
|         ],
 | |
|       ),
 | |
|       body:Container(
 | |
|           padding: EdgeInsets.all(12.0),
 | |
|           child: renderUi()),
 | |
|     );
 | |
|   }
 | |
| }
 |