feat: Optimize LinkTextField state management

This commit is contained in:
Sean Siders 2024-08-13 10:49:11 -07:00
parent ed8d4c17fe
commit 4435343f0e

View File

@ -48,12 +48,13 @@ class LinkTextField extends StatefulWidget {
final TextEditingController controller; final TextEditingController controller;
final FocusNode focusNode; final FocusNode focusNode;
@override @override
State<LinkTextField> createState() => _LinkTextFieldState(); State<LinkTextField> createState() => _LinkTextFieldState();
} }
class _LinkTextFieldState extends State<LinkTextField> { class _LinkTextFieldState extends State<LinkTextField> {
bool _isLinkClickable = false; bool isLinkClickable = false;
@override @override
void initState() { void initState() {
@ -68,17 +69,12 @@ class _LinkTextFieldState extends State<LinkTextField> {
} }
bool _handleGlobalKeyEvent(KeyEvent event) { bool _handleGlobalKeyEvent(KeyEvent event) {
setState(() { final keyboard = HardwareKeyboard.instance;
_isLinkClickable = event is KeyDownEvent && final canOpenLink = event is KeyDownEvent &&
[ (keyboard.isControlPressed || keyboard.isMetaPressed);
LogicalKeyboardKey.control, if (canOpenLink != isLinkClickable) {
LogicalKeyboardKey.controlLeft, setState(() => isLinkClickable = canOpenLink);
LogicalKeyboardKey.controlRight, }
LogicalKeyboardKey.meta,
LogicalKeyboardKey.metaLeft,
LogicalKeyboardKey.metaRight,
].contains(event.logicalKey);
});
return false; return false;
} }
@ -87,7 +83,7 @@ class _LinkTextFieldState extends State<LinkTextField> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return TextField( return TextField(
mouseCursor: mouseCursor:
_isLinkClickable ? SystemMouseCursors.click : SystemMouseCursors.text, isLinkClickable ? SystemMouseCursors.click : SystemMouseCursors.text,
controller: widget.controller, controller: widget.controller,
focusNode: widget.focusNode, focusNode: widget.focusNode,
style: Theme.of(context).textTheme.bodyMedium?.copyWith( style: Theme.of(context).textTheme.bodyMedium?.copyWith(
@ -95,7 +91,7 @@ class _LinkTextFieldState extends State<LinkTextField> {
decoration: TextDecoration.underline, decoration: TextDecoration.underline,
), ),
onTap: () { onTap: () {
if (_isLinkClickable) { if (isLinkClickable) {
openUrlCellLink(widget.controller.text); openUrlCellLink(widget.controller.text);
} }
}, },