{"id":32293673,"url":"https://github.com/haucky/extended_path","last_synced_at":"2026-02-22T00:01:53.714Z","repository":{"id":61973211,"uuid":"184070954","full_name":"haucky/extended_path","owner":"haucky","description":"A Flutter Path object with superpowers, including re-sampling, dashed lines and a lot more!","archived":false,"fork":false,"pushed_at":"2019-05-03T17:56:59.000Z","size":78,"stargazers_count":23,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-11T16:20:51.460Z","etag":null,"topics":["dart","dotted-outline","dotted-path","flutter","svg","svg-path"],"latest_commit_sha":null,"homepage":"https://pub.dartlang.org/packages/extended_path","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/haucky.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-04-29T12:54:12.000Z","updated_at":"2024-07-29T09:09:16.000Z","dependencies_parsed_at":"2022-10-24T13:30:30.615Z","dependency_job_id":null,"html_url":"https://github.com/haucky/extended_path","commit_stats":null,"previous_names":["haucky/extended_path","biocarl/extended_path"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/haucky/extended_path","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haucky%2Fextended_path","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haucky%2Fextended_path/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haucky%2Fextended_path/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haucky%2Fextended_path/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/haucky","download_url":"https://codeload.github.com/haucky/extended_path/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haucky%2Fextended_path/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29699335,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T23:35:04.139Z","status":"ssl_error","status_checked_at":"2026-02-21T23:35:03.832Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dart","dotted-outline","dotted-path","flutter","svg","svg-path"],"created_at":"2025-10-23T03:35:06.866Z","updated_at":"2026-02-22T00:01:53.705Z","avatar_url":"https://github.com/haucky.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# extended_path [![Pub](https://img.shields.io/pub/v/extended_path.svg)](https://pub.dartlang.org/packages/extended_path)\n\nThis library encapsulates the `PathExtended` object which serves as a extension to the parent [Path](https://docs.flutter.io/flutter/dart-ui/Path-class.html) class of Flutter. Internally a sampled representation of the Path is stored and updated, allowing to manipulate the Path object in powerful ways.\n\n:construction: **This library is still at early-stage development and might be subject to breaking API changes!!!** :construction:\n\n## Supported PathEffects\nHere is increasingly growing list with all available parameters and their visual effects. The animation serves for illustration purposes only. For creating such animations I would like to refer to [drawing_animation](https://github.com/biocarl/drawing_animation), another package of mine.\n\n| Effect            | Example                            |\n| :---:             |    :---:                       |\n| `ContinousLine` \u003cbr\u003e *(default)* | \u003cimg src=\"https://github.com/biocarl/img/raw/master/extended_path/continous_line.gif\" width=\"600px\"\u003e   |\n| `DiscretePathEffect` | \u003cimg src=\"https://github.com/biocarl/img/raw/master/extended_path/descrete_line.gif\" width=\"600px\"\u003e   |\n| `DashPathEffect` | \u003cimg src=\"https://github.com/biocarl/img/raw/master/extended_path/dashed_line.gif\" width=\"600px\"\u003e   |\n| `PathDashPathEffect` | \u003cimg src=\"https://github.com/biocarl/img/raw/master/extended_path/path_dash_line.gif\" width=\"600px\"\u003e   |\n\n## Getting Started\n\n```dart\n    Path p = Path()..addRect(Rect.fromCircle(center: Offset.zero, radius: 2.0));\n    PathExtended pp = PathExtended(p)\n      ..applyPathEffect(DashPathEffect([10,2], dashOffset: -1))\n      ..addPath(circle(0,30.0),Offset.zero);\n```\n\n## Design\nThe API design for the PathEffect classes is inspired by [PathEffect](https://developer.android.com/reference/android/graphics/PathEffect.html) for native Android but with some differences:\n- A `PathEffect` is applied to each Path object and not to the Paint object\n- Additionally a `PathModifier` is introduced. Contrary to the `PathEffect` the overall contour of the Path is changed. Internally a `PathModifier` manipulates the sampled representation directly while a `PathEffect` only changes the way how the sampling points are connected. This allows to combine a `PathModifier` with a `PathEffect`: For instance, a straight line can be transformed into a dashed sinus-curve. Soon a `PathExtendedBuilder` will be exposed which allows to set up a PathExtended object without rebuilding the internal structure every time.\n- Any feedback on the overall API design is really appreciated!\n\n## Current limitations\nInternal sampling rate for the path data is currently hardcoded. This might noticeable when sampling a big amount of path data (bad performance) and also for very small paths (edgy lines).\n\n## TODO\n- `PathEffect`: How to determine optimal `_delta` value for sampling. Also consider defining `_delta` over amount of resulting sampling points (required for path morping). Your Path is discrete now: What happens when the Path is scaled, consider resampling dynamically.\n- `PathDashPathEffect`: Rotate Path elements according to normal of current Offset (see [PathDashPathEffect.Style](https://developer.android.com/reference/android/graphics/PathDashPathEffect.Style.html))\n- `PathDashPathEffect`: Implement `advance` field of [PathDashPathEffect](https://developer.android.com/reference/android/graphics/PathDashPathEffect.html) by setting inital offset to `-dashOffset`\n- `DashPathEffect`: Double dash pattern when odd (for now blocked by assert)\n\n## Milestones\n- [x] PathEffect: [DashPathEffect](https://developer.android.com/reference/android/graphics/DashPathEffect.html)\n- [x] PathEffect: [DiscretePathEffect](https://developer.android.com/reference/android/graphics/DiscretePathEffect.html)\n- [x] PathEffect: [PathDashPathEffect](https://developer.android.com/reference/android/graphics/PathDashPathEffect.html)\n- [ ] PathModifier: sin-wave\n- [ ] PathModifier: zick-zack\n- [ ] PathModifier: smoothing/simplify\n- [ ] *(static)* Lerp between two Paths/ Morphing\n- [ ] `PathExtendedBuilder` for better performance\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaucky%2Fextended_path","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhaucky%2Fextended_path","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaucky%2Fextended_path/lists"}