perfect_freehand
Draw perfect pressure-sensitive freehand lines. A set of functions for turning input points into a polygon of outline points.
2.5.2
6.4K downloads/mo
#3506 most downloaded on pub.dev
steveruizok/perfect-freehand-dart
What this package is like to depend on
Last release 6 months ago
26 Jan 2026
Ships unpredictably
gaps range from 8 days to 2.3 years
Nearly every release is documented
notes for 19 of 19 stable releases
Nothing withdrawn
no release was ever pulled
5 years old
19 releases · first in 2021
5 releases in the last 12 months
see the full history below
Release timeline
19 releases · Oct 2021 to Jan 2026Releases
latest 19-
2.5.226 Jan 2026 -
2.5.2+126 Jan 2026 -
2.5.113 Nov 2025Release notes
Open source →- Fix: Fixed NaN values appearing with some inputs, especially those with non-null pressure values.
-
2.5.006 Sep 2025Release notes
Open source →- Fix: Path segments (separated by sharp angles) are now properly connected, preventing unexpected thinness at elbows.
- Fix: Right angles are now properly treated as sharp angles (so the corner can be rounded out).
- Fix: Less detail is lost near the end of a stroke. This results in less flickering while drawing.
- Fix:
PointVector.lerpbetter handles the case when one point has a non-null pressure and the other has a null pressure.
Before and after with sharp corners:
<img width="300" height="180" alt="v2.4.0" src="https://github.com/user-attachments/assets/46951a57-3f29-4792-97fd-3383627aa5f0" /> <img width="300" height="180" alt="v2.5.0" src="https://github.com/user-attachments/assets/110267f5-3dfd-4223-bb06-30accbaf4146" />
You can see more before/after comparison images in the Fix elbows and sharp corners, #24 pull request.
As always, you can demo the new version in the online demo.
-
2.4.129 Aug 2025Release notes
Open source →- Round stroke end caps are now full circles again (i.e. the change from 2.4.0 was reverted). This fixes sharp corners caused by small turns at the end of a stroke: see #23 for more details.
-
2.4.026 Aug 2025 -
2.4.0+126 Aug 2025 -
2.3.214 Feb 2024Release notes
Open source →- Fixed an error in
toJson()whentaperEnabledis true butcustomTaperis null.
- Fixed an error in
-
2.3.106 Feb 2024 -
2.3.014 Jan 2024 -
2.2.013 Jan 2024Release notes
Open source →- Breaking change: The properties of
StrokeOptionsare now non-nullable. This means that e.g.StrokeOptions.smoothingnow defaults toStrokeOptions.defaultSmoothinginstead ofnull. Note that you can change the defaults.
- Breaking change: The properties of
-
2.1.012 Jan 2024Release notes
Open source →- Breaking change:
getStroke(points, options)is nowgetStroke(points, options: options). - You can now run
getStroke(points, rememberSimulatedPressure: true)to store the simulated pressure values in thepointslist. (#12)
- Breaking change:
-
2.0.111 Jan 2024 -
2.0.011 Jan 2024Release notes
Open source →- 2.0.0 is a complete re-port of the original JavaScript library to Dart. There are some breaking changes, but the API is mostly the same and some automatic migration is possible by running
dart fix --apply.
- 2.0.0 is a complete re-port of the original JavaScript library to Dart. There are some breaking changes, but the API is mostly the same and some automatic migration is possible by running
-
1.0.405 Oct 2021 -
1.0.305 Oct 2021 -
1.0.204 Oct 2021 -
1.0.104 Oct 2021 -
1.0.004 Oct 2021