87 lines
2.7 KiB
Dart
87 lines
2.7 KiB
Dart
// 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<String?> showEditMediaCaptionDialog(
|
|
BuildContext context, {
|
|
required String initialCaption,
|
|
}) => showDialog<String>(
|
|
context: context,
|
|
builder: (context) => EditMediaCaptionDialog(initialCaption: initialCaption),
|
|
);
|
|
|
|
class EditMediaCaptionDialog extends StatefulWidget {
|
|
final String initialCaption;
|
|
|
|
const EditMediaCaptionDialog({super.key, required this.initialCaption});
|
|
|
|
@override
|
|
State<EditMediaCaptionDialog> createState() => _EditMediaCaptionDialogState();
|
|
}
|
|
|
|
class _EditMediaCaptionDialogState extends State<EditMediaCaptionDialog> {
|
|
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),
|
|
),
|
|
],
|
|
);
|
|
}
|
|
}
|