Thanks for taking the time to contribute! This document describes the workflow we follow. For the full engineering contract — architecture, conventions, release process and the new-feature checklist — read AGENTS.md first.
- Flutter
3.41.7(pinned sodart formatoutput is identical everywhere) - Dart SDK
>=3.11.0 <4.0.0
flutter pub get
dart format --set-exit-if-changed lib/
flutter analyze lib/
flutter testExample app:
cd example
flutter pub get
dart format --set-exit-if-changed lib/ test/
flutter analyze lib/
flutter testIntegration tests hit the real network and therefore never run in CI. Run them manually against a device when you touch native code:
flutter test integration_test -d <device-id>- Branch from
mainusing a descriptive name, e.g.feat/ipv6-probe. - Keep the change focused; one logical change per PR.
- PR titles must follow Conventional Commits
and are validated by CI. Allowed types:
feat,fix,docs,style,refactor,perf,test,build,ci,chore,revert. - Ensure
Analyze & TestandPana Score Checkare green.Pana Score Checkenforces a minimum pub.dev score of120/130. - Update
CHANGELOG.mdunder## [Unreleased](or the version you are releasing) whenever behaviour changes.
Short, imperative, English. Real examples:
feat(ping): support ICMP mode on desktop platforms
fix(dns): guard against compression pointer loops
docs(readme): document the quality score weighting
dart formatis authoritative; theDart Format Auto-Fixworkflow commits formatting fixes for you, but please run it locally too.- Keep the public API documented in English with a short Chinese summary line, matching the existing bilingual doc-comment convention.
- No new
// ignore:unless there is a comment explaining why. - Never introduce a dependency without checking its pana/lint impact.
A good bug report contains:
- Flutter / Dart version and the plugin version
- Target platform(s) and OS version
- A minimal reproduction (ideally a failing test or a snippet using
NetworkDiagnostic) - Expected vs. actual behaviour