import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; import 'package:provider/provider.dart'; import 'package:surface/controllers/post_write_controller.dart'; import 'package:surface/providers/sn_attachment.dart'; import 'package:surface/widgets/dialog.dart'; class PendingAttachmentAltDialog extends StatefulWidget { final PostWriteMedia media; const PendingAttachmentAltDialog({super.key, required this.media}); @override State createState() => _PendingAttachmentAltDialogState(); } class _PendingAttachmentAltDialogState extends State { final _contentController = TextEditingController(); @override void initState() { super.initState(); _contentController.text = widget.media.attachment!.alt; } bool _isBusy = false; Future _performAction() async { if (_isBusy) return; setState(() => _isBusy = true); try { final attach = context.read(); final result = await attach.updateOne( widget.media.attachment!, alt: _contentController.text, ); if (!mounted) return; attach.putCache([result]); Navigator.pop(context, result); } catch (err) { if (!mounted) return; context.showErrorDialog(err); setState(() => _isBusy = false); } } @override void dispose() { _contentController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return AlertDialog( title: Text('attachmentSetAlt').tr(), content: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ TextField( controller: _contentController, decoration: InputDecoration( labelText: 'fieldAttachmentAlt'.tr(), border: const UnderlineInputBorder(), ), onTapOutside: (_) => FocusManager.instance.primaryFocus?.unfocus(), ), ], ), actions: [ TextButton( onPressed: _isBusy ? null : () { Navigator.pop(context); }, child: Text('dialogDismiss'.tr()), ), TextButton( onPressed: _isBusy ? null : () => _performAction(), child: Text('dialogConfirm'.tr()), ), ], ); } }