relatica/lib/controls/entry_media_attachments/media_uploads_control.dart
2022-12-26 15:26:30 -05:00

87 lines
3 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(() {});
},
),
),
],
);
}
}