// SPDX-FileCopyrightText: 2019-Present Christian Kußowski // SPDX-FileCopyrightText: 2019-Present Contributors to FluffyChat // // SPDX-License-Identifier: AGPL-3.0-or-later import 'package:material_ui/material_ui.dart'; import 'package:tatchat/config/setting_keys.dart'; import 'package:tatchat/l10n/l10n.dart'; import 'package:tatchat/utils/platform_infos.dart'; import 'package:tatchat/widgets/adaptive_dialogs/adaptive_dialog_action.dart'; import 'package:tatchat/widgets/adaptive_dialogs/dialog_text_field.dart'; Future showEditMediaCaptionDialog( BuildContext context, { required String initialCaption, }) => showDialog( context: context, builder: (context) => EditMediaCaptionDialog(initialCaption: initialCaption), ); class EditMediaCaptionDialog extends StatefulWidget { final String initialCaption; const EditMediaCaptionDialog({super.key, required this.initialCaption}); @override State createState() => _EditMediaCaptionDialogState(); } class _EditMediaCaptionDialogState extends State { late final TextEditingController _controller = TextEditingController( text: widget.initialCaption, ); late final FocusNode _focusNode = FocusNode(); @override void dispose() { _focusNode.dispose(); _controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { final isMobile = PlatformInfos.isMobile; final l10n = L10n.of(context); return AlertDialog.adaptive( title: Text(l10n.editCaption), insetPadding: isMobile ? const EdgeInsets.all(8.0) : const EdgeInsets.symmetric(horizontal: 40, vertical: 24), constraints: isMobile ? const BoxConstraints( maxWidth: double.infinity, maxHeight: double.infinity, ) : null, content: SizedBox( width: 512, height: isMobile ? MediaQuery.sizeOf(context).height * 0.7 : null, child: DialogTextField( controller: _controller, focusNode: _focusNode, hintText: l10n.captionHint, labelText: l10n.optionalMessage, keyboardType: TextInputType.multiline, minLines: isMobile ? 8 : 3, maxLines: isMobile ? null : 8, maxLength: AppSettings.textMessageMaxLength.value, counterText: '', ), ), actions: [ AdaptiveDialogAction( onPressed: () => Navigator.of(context).pop(), child: Text(l10n.cancel), ), AdaptiveDialogAction( autofocus: true, onPressed: () => Navigator.of(context).pop(_controller.text.trim()), child: Text(l10n.save), ), ], ); } }