From 5828c90c0e96d9ee5890a09237fc70391b9628aa Mon Sep 17 00:00:00 2001 From: Koen Van Looveren Date: Tue, 22 Feb 2022 11:53:36 +0100 Subject: [PATCH 1/6] #73: Fixed the touch feedback on iOS --- lib/src/widget/touch_feedback/touch_feedback.dart | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/src/widget/touch_feedback/touch_feedback.dart b/lib/src/widget/touch_feedback/touch_feedback.dart index 171e7bd..f80b894 100644 --- a/lib/src/widget/touch_feedback/touch_feedback.dart +++ b/lib/src/widget/touch_feedback/touch_feedback.dart @@ -90,13 +90,17 @@ class TouchFeedBackIOS extends StatefulWidget { class _TouchFeedBackIOSState extends State { static const touchScale = 0.98; static const defaultScale = 1.0; + + static final _touchPoints = {}; + final _key = UniqueKey(); + var touched = false; @override Widget build(BuildContext context) { return GestureDetector( excludeFromSemantics: widget.onClick == null, - onTapDown: (details) => _setTouched(true), + onTapDown: _onTapDown, onTap: widget.onClick, onTapCancel: () => _setTouched(false), onTapUp: (details) => _setTouched(false), @@ -115,7 +119,14 @@ class _TouchFeedBackIOSState extends State { } void _setTouched(bool touched) { - if (widget.onClick == null) return; + if (widget.onClick == null && this.touched == touched) return; setState(() => this.touched = touched); } + + void _onTapDown(TapDownDetails details) { + final touchPosition = details.globalPosition; + if (_touchPoints.containsValue(touchPosition)) return; + _touchPoints[_key] = touchPosition; + _setTouched(true); + } } From 7463c91fb897f3b0a845c023ceb43be4b1a7121d Mon Sep 17 00:00:00 2001 From: Koen Van Looveren Date: Tue, 22 Feb 2022 11:55:18 +0100 Subject: [PATCH 2/6] Fixed an issue where the key is not removed --- lib/src/widget/touch_feedback/touch_feedback.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/src/widget/touch_feedback/touch_feedback.dart b/lib/src/widget/touch_feedback/touch_feedback.dart index f80b894..849e61b 100644 --- a/lib/src/widget/touch_feedback/touch_feedback.dart +++ b/lib/src/widget/touch_feedback/touch_feedback.dart @@ -119,6 +119,7 @@ class _TouchFeedBackIOSState extends State { } void _setTouched(bool touched) { + if (!touched) _touchPoints.remove(_key); if (widget.onClick == null && this.touched == touched) return; setState(() => this.touched = touched); } From b6536cbf2078e6ccff2498ed3d79811744b39d98 Mon Sep 17 00:00:00 2001 From: Koen Van Looveren Date: Tue, 22 Feb 2022 11:55:53 +0100 Subject: [PATCH 3/6] Fixed touch feedback --- lib/src/widget/touch_feedback/touch_feedback.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/widget/touch_feedback/touch_feedback.dart b/lib/src/widget/touch_feedback/touch_feedback.dart index 849e61b..a2f7dbd 100644 --- a/lib/src/widget/touch_feedback/touch_feedback.dart +++ b/lib/src/widget/touch_feedback/touch_feedback.dart @@ -120,7 +120,7 @@ class _TouchFeedBackIOSState extends State { void _setTouched(bool touched) { if (!touched) _touchPoints.remove(_key); - if (widget.onClick == null && this.touched == touched) return; + if (widget.onClick == null || this.touched == touched) return; setState(() => this.touched = touched); } From c97f7a2cd532c71ea1f9e2639604b6c9ee4a2f7d Mon Sep 17 00:00:00 2001 From: Koen Van Looveren Date: Tue, 22 Feb 2022 11:56:46 +0100 Subject: [PATCH 4/6] Fixed endless growing map --- lib/src/widget/touch_feedback/touch_feedback.dart | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/src/widget/touch_feedback/touch_feedback.dart b/lib/src/widget/touch_feedback/touch_feedback.dart index a2f7dbd..5970146 100644 --- a/lib/src/widget/touch_feedback/touch_feedback.dart +++ b/lib/src/widget/touch_feedback/touch_feedback.dart @@ -96,6 +96,12 @@ class _TouchFeedBackIOSState extends State { var touched = false; + @override + void dispose() { + _touchPoints.remove(_key); + super.dispose(); + } + @override Widget build(BuildContext context) { return GestureDetector( From ff3850fdcc750a8be36848b1cfdb1e8dbacd162a Mon Sep 17 00:00:00 2001 From: Koen Van Looveren Date: Tue, 22 Feb 2022 12:14:32 +0100 Subject: [PATCH 5/6] Version bump --- CHANGELOG.md | 5 +++++ pubspec.yaml | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a62baa..79b27c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## [0.6.4] - 2022-02-22 +### Fixed + +- iOS Touchfeedback when 2 TouchFeedbackIOS widgets are on top of eachother + ## [0.6.3] - 2022-01-26 ### Added diff --git a/pubspec.yaml b/pubspec.yaml index 16181e3..4162274 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -4,7 +4,7 @@ homepage: https://github.com/icapps/flutter-icapps-architecture repository: https://github.com/icapps/flutter-icapps-architecture issue_tracker: https://github.com/icapps/flutter-icapps-architecture/issues -version: 0.6.3 +version: 0.6.4 environment: sdk: '>=2.14.0 <3.0.0' From 40e7cc6c3b178b6c3f5246d880bdf94bdde346f1 Mon Sep 17 00:00:00 2001 From: Koen Van Looveren Date: Tue, 22 Feb 2022 12:22:13 +0100 Subject: [PATCH 6/6] Fixed tests --- test/util/logging/logging_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/util/logging/logging_test.dart b/test/util/logging/logging_test.dart index ef69cbe..b56b028 100644 --- a/test/util/logging/logging_test.dart +++ b/test/util/logging/logging_test.dart @@ -181,7 +181,7 @@ void testWithLogger() { expect( messages[4].lines[4], matches( - '\\d+:\\d+:\\d+\\.\\d+\\s+#2 StackZoneSpecification._registerUnaryCallback. \\(package:stack_trace/src/stack_zone_specification.dart\\)')); + '\\d+:\\d+:\\d+\\.\\d+\\s+#2 StackZoneSpecification._registerUnaryCallback. \\(package:stack_trace/src/stack_zone_specification.dart:125:47\\)')); expect(messages[4].lines[5], matches('\\d+:\\d+:\\d+\\.\\d+\\s+#3 ')); expect(messages[4].lines[0],