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

70 lines
1.8 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
/// A text field with added functionality for ease of editing
class Editor extends HookWidget {
final TextEditingController? controller;
final FocusNode? focusNode;
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;
final String instanceHost;
const Editor({
2022-05-11 22:23:18 +02:00
super.key,
2021-04-21 21:05:15 +02:00
this.controller,
this.focusNode,
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,
required this.instanceHost,
this.autofocus = false,
2022-05-11 22:23:18 +02:00
});
2021-04-21 21:05:15 +02:00
@override
Widget build(BuildContext context) {
2022-01-16 14:16:24 +01:00
final defaultController = useTextEditingController(text: initialValue);
2021-04-21 21:05:15 +02:00
final actualController = controller ?? defaultController;
if (fancy) {
return Padding(
padding: const EdgeInsets.all(8),
child: MarkdownText(
actualController.text,
instanceHost: instanceHost,
),
);
}
return TextField(
controller: actualController,
focusNode: focusNode,
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
);
}
}