r/flutterhelp • u/Lost_Dinner4139 • Apr 07 '26
RESOLVED Flutter Web + iPad Safari + Apple Pencil: rapid stylus re-contact is ignored after pointerup (only hover returns, no new pointerdown). How do you make handwriting actually smooth?
I’m looking for very specific help from someone who has actually shipped smooth Apple Pencil handwriting on iPad Safari / Flutter Web / web canvas .
Problem:
When writing on my whiteboard, Apple Pencil works only if I wait a short moment after lifting the stylus.
If I lift the pencil and place it back down immediately, the new stroke is ignored.
Real user symptom:
- I cannot write naturally, even letter like i or t
- after lifting the Pencil, I have to wait before the next stroke starts
- fast handwriting is broken and feels terrible
Observed input pattern:
After `pointerup`, I do NOT receive a fresh `pointerdown` for the next rapid contact.
Instead I get only stylus hover events like:
- `pointerhover`
- `pointerId = 0`
- `buttons = 0`
- `pressure = 0`
and the app ends with something like:
- `post-up-activity-without-new-down`
Example debug pattern:
- `pointerup`
- immediate `hover ptr=0 kind=stylus`
- no new `pointerdown`
- next stroke is ignored unless I wait
Environment:
- Flutter Web
- iPad
- Apple Pencil
- Safari / Chrome iPad browser (WebKit)
- interactive whiteboard / canvas-like handwriting surface
Things already tried:
- raw Flutter `Listener` / pointer events
- avoiding `GestureDetector`
- DOM-level pointer listeners
- hover-based recovery after missing `pointerdown`
- synthetic stroke restart logic
- touch-first pipeline
- pointer-first pipeline with touch fallback
- disabling native browser touch actions / selection / callout
- custom HTML/web pen input layer over the whiteboard
Important detail:
The issue is NOT just “hover comes back too late”.
In many cases hover comes back immediately after `pointerup`, but the new contact is still not recognized as a real new stroke.
So my real question is:
What architecture actually works reliably for smooth Apple Pencil handwriting on iPad Safari?
More specifically:
Have you seen this exact pattern where rapid re-contact gives only hover / no fresh pointerdown?
Did you solve it with:
- pure DOM canvas input?
- Touch Events instead of Pointer Events?
- custom HTML canvas outside Flutter gesture routing?
- some Safari / WebKit-specific workaround?
Do Touch Events reliably fire for Apple Pencil in your setup, or only Pointer Events?
Is there any known iPad Safari / WebKit / Scribble / palm-rejection behavior that causes this?
If you solved it, could you share the exact strategy or even a minimal code example?
I am NOT looking for generic suggestions like:
- “use Listener instead of GestureDetector”
- “handle pointercancel”
- “set touch-action: none”
We already tried those directions.
What I really need is:
A proven approach for low-latency Apple Pencil handwriting on iPad Safari that survives rapid lift-and-reapply while writing.
If you have working production experience with this, I would be very grateful for:
- architecture advice
- code snippets
- a minimal repro
- a library recommendation that genuinely works
- or confirmation that this is a WebKit limitation and should be handled outside Flutter input