packages/: Dart/Flutter packages. Core atpackages/core, public wrapper atpackages/enhanced, and feature add‑ons underpackages/fwfh_*.demo_app/: Example Flutter app for manual testing and screenshots.tool/: Helper scripts (notablytool/test.sh).docs/,.github/: Documentation and CI.- Use
context7CompatibleLibraryID=/flutter/websitewithcontext7.get-library-docstool for latest Flutter documentation.
- Use
- Tests live in each package’s
test/and indemo_app/test/. Golden assets are undertest/images/.
- Install latest deps:
./tool/pub-get.sh. - Analyze all + run tests:
./tool/test.sh(accepts extra flags like--coverageor--update-goldens). - Format code:
dart format .. - Per‑package checks:
flutter analyzeandflutter testfrom each package dir.
- Dart style with 2‑space indentation; keep lines focused and readable.
- Lints:
package:lintplus repo rules (see eachanalysis_options.yaml). Prefer relative imports, avoid relativelib/imports. - Names: classes
PascalCase, memberscamelCase, constantsSCREAMING_SNAKE_CASE, private with leading_.
- Frameworks:
flutter_test,test, andgolden_toolkitfor widget/golden tests. - Location: place tests next to code in
package/test/*.dartwith_test.dartsuffix. - Goldens: store expected images under
test/images/; regenerate with--update-goldensand review diffs. - Web interop (when applicable): see
packages/fwfh_webviewintegration tests; ensure Chrome/driver available if running locally. - Golden images must be generated on Linux, not macOS (font rendering differs). Use Docker or CI with
--update-goldens. - Always run
dart format .before committing. The tall style formatter can cause large reformats.
- CHANGELOGs are updated at tagging time, not at merge time. Do not add changelog entries during feature work.
- Core and enhanced READMEs share the same feature list structure. When adding a feature to core, update both
packages/core/README.mdandpackages/enhanced/README.md. - Sub‑package README version pins (e.g.,
^0.16.0not^0.16.1) are intentional. Do not bump these to patch versions. - Verify Flutter stable compatibility before adopting new Android toolchain versions (e.g., AGP 9 required Flutter APIs not yet in stable).
- Push fixes to the contributor's fork remote, not origin. Add the fork as a remote first.
- SonarQube failures on fork PRs are expected because secrets are unavailable to external contributors.
- Clean up unrelated changes (example app modifications,
.gitignoreadditions) before merging. - PRs are squash‑merged with a clean single commit message.
- CSS property implementations go in
packages/core/lib/src/internal/ops/style_*.dart. - Tests mirror at
packages/core/test/style_*_test.dartortag_*_test.dart. - If code is unused, delete it. Do not keep commented‑out references or re‑export stubs.
list-style-typeintentionally falls through to canvas‑drawn shapes (disc/circle/square) when a value is not in theCssCounterStyleregistry.