2021-04-21 21:05:15 +02:00
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
|
|
|
|
2022-08-23 00:34:10 +02:00
|
|
|
import '../../markdown_formatter.dart';
|
2022-06-26 23:43:36 +02:00
|
|
|
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,
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2022-08-23 00:34:10 +02:00
|
|
|
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
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|