feat: suporte a tabelas markdown nas legendas, remoção de borda de imagens e separação de comentários no mural
This commit is contained in:
86
lib/pages/chat/edit_media_caption_dialog.dart
Normal file
86
lib/pages/chat/edit_media_caption_dialog.dart
Normal file
@@ -0,0 +1,86 @@
|
||||
// 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),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user