kopia lustrzana https://gitlab.com/mysocialportal/relatica
				
				
				
			
		
			
	
	
		
			88 wiersze
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Dart
		
	
	
		
		
			
		
	
	
			88 wiersze
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Dart
		
	
	
|   | import 'package:flutter/material.dart'; | ||
|  | import 'package:logging/logging.dart'; | ||
|  | import 'package:result_monad/result_monad.dart'; | ||
|  | 
 | ||
|  | import '../../models/media_attachment_uploads/entry_media_items.dart'; | ||
|  | import '../../services/media_upload_attachment_helper.dart'; | ||
|  | import '../../utils/snackbar_builder.dart'; | ||
|  | import '../padding.dart'; | ||
|  | import 'media_upload_editor_control.dart'; | ||
|  | 
 | ||
|  | final _logger = Logger('$MediaUploadsControl'); | ||
|  | 
 | ||
|  | class MediaUploadsControl extends StatefulWidget { | ||
|  |   final EntryMediaItems entryMediaItems; | ||
|  | 
 | ||
|  |   const MediaUploadsControl({super.key, required this.entryMediaItems}); | ||
|  | 
 | ||
|  |   @override | ||
|  |   State<MediaUploadsControl> createState() => _MediaUploadsControlState(); | ||
|  | } | ||
|  | 
 | ||
|  | class _MediaUploadsControlState extends State<MediaUploadsControl> { | ||
|  |   @override | ||
|  |   Widget build(BuildContext context) { | ||
|  |     _logger.finest('Building'); | ||
|  |     return Column( | ||
|  |       children: [ | ||
|  |         Row( | ||
|  |           mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||
|  |           children: [ | ||
|  |             Text( | ||
|  |               'Images', | ||
|  |               style: Theme.of(context).textTheme.titleLarge, | ||
|  |             ), | ||
|  |             Row( | ||
|  |               mainAxisAlignment: MainAxisAlignment.end, | ||
|  |               children: [ | ||
|  |                 IconButton( | ||
|  |                   onPressed: () async { | ||
|  |                     await MediaUploadAttachmentHelper.getNewImagesFromCamera() | ||
|  |                         .match( | ||
|  |                             onSuccess: (newEntries) => setState(() => widget | ||
|  |                                 .entryMediaItems.attachments | ||
|  |                                 .addAll(newEntries)), | ||
|  |                             onError: (error) { | ||
|  |                               if (mounted) { | ||
|  |                                 buildSnackbar(context, | ||
|  |                                     'Error selecting attachments: $error'); | ||
|  |                               } | ||
|  |                             }); | ||
|  |                   }, | ||
|  |                   icon: const Icon(Icons.camera_alt), | ||
|  |                 ), | ||
|  |                 IconButton( | ||
|  |                   onPressed: () async { | ||
|  |                     await MediaUploadAttachmentHelper.getImagesFromGallery() | ||
|  |                         .match( | ||
|  |                             onSuccess: (newEntries) => setState(() => widget | ||
|  |                                 .entryMediaItems.attachments | ||
|  |                                 .addAll(newEntries)), | ||
|  |                             onError: (error) { | ||
|  |                               if (mounted) { | ||
|  |                                 buildSnackbar(context, | ||
|  |                                     'Error selecting attachments: $error'); | ||
|  |                               } | ||
|  |                             }); | ||
|  |                   }, | ||
|  |                   icon: const Icon(Icons.add_to_photos), | ||
|  |                 ), | ||
|  |               ], | ||
|  |             ) | ||
|  |           ], | ||
|  |         ), | ||
|  |         const VerticalPadding(), | ||
|  |         ...widget.entryMediaItems.attachments.map( | ||
|  |           (m) => MediaUploadEditorControl( | ||
|  |             media: m, | ||
|  |             onDelete: () { | ||
|  |               widget.entryMediaItems.attachments.remove(m); | ||
|  |               setState(() {}); | ||
|  |             }, | ||
|  |           ), | ||
|  |         ), | ||
|  |       ], | ||
|  |     ); | ||
|  |   } | ||
|  | } |