Add character count label on editor panel so users can see how much they've written

Implements Issue #99
This commit is contained in:
Hank Grabowski 2024-06-26 16:11:07 -04:00
parent 8207e0b260
commit 3836cd7657

View file

@ -281,6 +281,10 @@ class _EditorScreenState extends State<EditorScreen> {
buildVisibilitySelector(context),
const VerticalPadding(),
buildContentField(context),
CharacterCountWidget(
contentController: contentController,
linkPreviewController: linkPreviewController,
),
const VerticalPadding(),
buildLinkWithPreview(context),
const VerticalPadding(),
@ -694,3 +698,52 @@ class _EditorScreenState extends State<EditorScreen> {
});
}
}
class CharacterCountWidget extends StatefulWidget {
final TextEditingController contentController;
final TextEditingController linkPreviewController;
const CharacterCountWidget({
super.key,
required this.contentController,
required this.linkPreviewController,
});
@override
State<CharacterCountWidget> createState() => _CharacterCountWidgetState();
}
class _CharacterCountWidgetState extends State<CharacterCountWidget> {
var count = 0;
@override
void initState() {
super.initState();
calculateCount();
widget.contentController.addListener(countRefresh);
widget.linkPreviewController.addListener(countRefresh);
}
@override
void dispose() {
widget.contentController.removeListener(countRefresh);
widget.linkPreviewController.removeListener(countRefresh);
super.dispose();
}
void countRefresh() {
setState(() {
calculateCount();
});
}
void calculateCount() {
count = widget.linkPreviewController.text.length +
widget.contentController.text.length;
}
@override
Widget build(BuildContext context) {
return Text('Character Count: $count');
}
}