lemmur-app-android/lib/widgets/editor/editor.dart

88 lines
2.2 KiB
Dart
Raw Normal View History

2021-04-21 21:05:15 +02:00
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import '../../markdown_formatter.dart';
import '../markdown_text.dart';
2022-08-09 00:06:14 +02:00
export 'editor_toolbar.dart';
2021-04-21 21:05:15 +02:00
class EditorController {
final TextEditingController textEditingController;
final FocusNode focusNode;
final String instanceHost;
EditorController({
required this.textEditingController,
required this.focusNode,
required this.instanceHost,
});
}
EditorController useEditorController({
required String instanceHost,
String? text,
}) {
final focusNode = useFocusNode();
final textEditingController = useTextEditingController(text: text);
return EditorController(
textEditingController: textEditingController,
focusNode: focusNode,
instanceHost: instanceHost);
}
2021-04-21 21:05:15 +02:00
/// A text field with added functionality for ease of editing
class Editor extends HookWidget {
final EditorController controller;
2021-04-21 21:05:15 +02:00
final ValueChanged<String>? onSubmitted;
2022-01-15 16:15:55 +01:00
final ValueChanged<String>? onChanged;
2021-04-21 21:05:15 +02:00
final int? minLines;
2021-04-27 22:22:02 +02:00
final int? maxLines;
2021-04-21 21:05:15 +02:00
final String? labelText;
2022-01-16 14:16:24 +01:00
final String? initialValue;
2021-04-21 21:05:15 +02:00
final bool autofocus;
/// Whether the editor should be preview the contents
final bool fancy;
const Editor({
2022-05-11 22:23:18 +02:00
super.key,
required this.controller,
2021-04-21 21:05:15 +02:00
this.onSubmitted,
2022-01-15 16:15:55 +01:00
this.onChanged,
2021-04-21 21:05:15 +02:00
this.minLines = 5,
2021-04-27 22:22:02 +02:00
this.maxLines,
2021-04-21 21:05:15 +02:00
this.labelText,
2022-01-16 14:16:24 +01:00
this.initialValue,
2021-04-21 21:05:15 +02:00
this.fancy = false,
this.autofocus = false,
2022-05-11 22:23:18 +02:00
});
2021-04-21 21:05:15 +02:00
@override
Widget build(BuildContext context) {
if (fancy) {
return Padding(
padding: const EdgeInsets.all(8),
child: MarkdownText(
controller.textEditingController.text,
instanceHost: controller.instanceHost,
2021-04-21 21:05:15 +02:00
),
);
}
2022-08-25 17:45:22 +02:00
return TextField(
focusNode: controller.focusNode,
controller: controller.textEditingController,
2022-08-25 17:45:22 +02:00
autofocus: autofocus,
keyboardType: TextInputType.multiline,
textCapitalization: TextCapitalization.sentences,
onChanged: onChanged,
onSubmitted: onSubmitted,
maxLines: maxLines,
minLines: minLines,
decoration: InputDecoration(labelText: labelText),
inputFormatters: [MarkdownFormatter()],
2021-04-21 21:05:15 +02:00
);
}
}