From 4435343f0ee1cfe779d7151a74b11124ebfc66cc Mon Sep 17 00:00:00 2001 From: Sean Siders Date: Tue, 13 Aug 2024 10:49:11 -0700 Subject: [PATCH] feat: Optimize `LinkTextField` state management --- .../desktop_row_detail_url_cell.dart | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/frontend/appflowy_flutter/lib/plugins/database/widgets/cell/desktop_row_detail/desktop_row_detail_url_cell.dart b/frontend/appflowy_flutter/lib/plugins/database/widgets/cell/desktop_row_detail/desktop_row_detail_url_cell.dart index 539ea90e92..00d7372027 100644 --- a/frontend/appflowy_flutter/lib/plugins/database/widgets/cell/desktop_row_detail/desktop_row_detail_url_cell.dart +++ b/frontend/appflowy_flutter/lib/plugins/database/widgets/cell/desktop_row_detail/desktop_row_detail_url_cell.dart @@ -48,12 +48,13 @@ class LinkTextField extends StatefulWidget { final TextEditingController controller; final FocusNode focusNode; + @override State createState() => _LinkTextFieldState(); } class _LinkTextFieldState extends State { - bool _isLinkClickable = false; + bool isLinkClickable = false; @override void initState() { @@ -68,17 +69,12 @@ class _LinkTextFieldState extends State { } bool _handleGlobalKeyEvent(KeyEvent event) { - setState(() { - _isLinkClickable = event is KeyDownEvent && - [ - LogicalKeyboardKey.control, - LogicalKeyboardKey.controlLeft, - LogicalKeyboardKey.controlRight, - LogicalKeyboardKey.meta, - LogicalKeyboardKey.metaLeft, - LogicalKeyboardKey.metaRight, - ].contains(event.logicalKey); - }); + final keyboard = HardwareKeyboard.instance; + final canOpenLink = event is KeyDownEvent && + (keyboard.isControlPressed || keyboard.isMetaPressed); + if (canOpenLink != isLinkClickable) { + setState(() => isLinkClickable = canOpenLink); + } return false; } @@ -87,7 +83,7 @@ class _LinkTextFieldState extends State { Widget build(BuildContext context) { return TextField( mouseCursor: - _isLinkClickable ? SystemMouseCursors.click : SystemMouseCursors.text, + isLinkClickable ? SystemMouseCursors.click : SystemMouseCursors.text, controller: widget.controller, focusNode: widget.focusNode, style: Theme.of(context).textTheme.bodyMedium?.copyWith( @@ -95,7 +91,7 @@ class _LinkTextFieldState extends State { decoration: TextDecoration.underline, ), onTap: () { - if (_isLinkClickable) { + if (isLinkClickable) { openUrlCellLink(widget.controller.text); } },