diff --git a/example/pubspec.lock b/example/pubspec.lock index c5cd3eb..bfe1585 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -79,18 +79,18 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" url: "https://pub.dev" source: hosted - version: "10.0.4" + version: "10.0.5" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.5" leak_tracker_testing: dependency: transitive description: @@ -119,18 +119,18 @@ packages: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.11.1" meta: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.15.0" non_uniform_border: dependency: transitive description: @@ -203,10 +203,18 @@ packages: dependency: transitive description: name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.7.2" + universal_platform: + dependency: transitive + description: + name: universal_platform + sha256: "64e16458a0ea9b99260ceb5467a214c1f298d647c659af1bff6d3bf82536b1ec" + url: "https://pub.dev" + source: hosted + version: "1.1.0" vector_math: dependency: transitive description: @@ -219,10 +227,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" url: "https://pub.dev" source: hosted - version: "14.2.1" + version: "14.2.5" sdks: dart: ">=3.3.0 <4.0.0" flutter: ">=3.18.0-18.0.pre.54" diff --git a/lib/src/text_field/base_text_field.dart b/lib/src/text_field/base_text_field.dart index 4bb3d6d..23f241d 100644 --- a/lib/src/text_field/base_text_field.dart +++ b/lib/src/text_field/base_text_field.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:tapped_toolkit/src/after_first_build/after_first_build_mixin.dart'; import 'package:tapped_toolkit/src/after_first_build/on_next_frame_extension.dart'; +import 'package:universal_platform/universal_platform.dart'; enum TextFieldSource { inside, outside } @@ -117,6 +118,8 @@ class BaseTextFieldState extends State @visibleForTesting TextEditingController get textEditingController => _textEditingController; + final _selectableRegionFocusNode = FocusNode(); + @visibleForTesting FocusNode get focusNode => _focusNode; @@ -160,6 +163,14 @@ class BaseTextFieldState extends State _textEditingController .addListener(() => _onChanged(_textEditingController.text)); + if (UniversalPlatform.isWeb) { + _selectableRegionFocusNode.addListener(() { + if (_selectableRegionFocusNode.hasPrimaryFocus) { + _focusNode.requestFocus(); + } + }); + } + _focusNode.addListener(_addFocusNodeListener); } @@ -174,7 +185,7 @@ class BaseTextFieldState extends State Widget build(BuildContext context) { final style = widget.textStyle; - return TextFormField( + final textField = TextFormField( key: _formFieldKey, textAlignVertical: widget.textAlignVertical, readOnly: widget.readOnly || widget.onTap != null, @@ -218,6 +229,17 @@ class BaseTextFieldState extends State controller: _textEditingController, decoration: widget.decoration, ); + + if (UniversalPlatform.isWeb) { + // ⚠️ We added the [SelectionArea], since we had an issue with the text filed in the web -> https://github.com/flutter/flutter/issues/158095 + return SelectableRegion( + focusNode: _selectableRegionFocusNode, + selectionControls: emptyTextSelectionControls, + child: textField, + ); + } + + return textField; } @override @@ -294,6 +316,8 @@ class BaseTextFieldState extends State if (widget.focusNode == null) { _focusNode.dispose(); } + + _selectableRegionFocusNode.dispose(); _textEditingController.dispose(); super.dispose(); } diff --git a/pubspec.yaml b/pubspec.yaml index 5419256..d04214b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -9,6 +9,8 @@ environment: dependencies: non_uniform_border: ^1.0.0 + # for the platform check + universal_platform: ^1.1.0 collection: ^1.16.0 flutter: sdk: flutter @@ -21,5 +23,3 @@ dev_dependencies: git: url: https://github.com/tappeddev/tapped_lints.git ref: master - -flutter: \ No newline at end of file