squawk 0.1.1
squawk: ^0.1.1 copied to clipboard
Shake-to-report feedback for Flutter: an annotated screenshot, device and app info, and recent logs land in your inbox.
Squawk #
Your testers shake their phone — the annotated screenshot, logs, and device info land in your inbox. One widget. Zero native setup.
A tester finds a bug, shakes their phone, scribbles on the screenshot, and taps send. You get the whole picture without asking a single follow-up question:
- Annotated screenshot — pen, arrows and text labels, drawn by the person who found the bug
- Device and app context — model, OS, app version, build number, and whether it was a debug, profile or release build
- Recent logs — a rolling buffer of console output, captured automatically
- Who hit it — an optional reporter email, plus any user context you attach
Reports arrive in a web inbox at app.squawksdk.com, with email, Slack and webhook delivery. Free while in beta.
Install #
flutter pub add squawk
Quick start #
Create a project at app.squawksdk.com, copy the key it issues, and wrap your app:
void main() {
runApp(
Squawk(
apiKey: 'sqk_your_project_key',
child: const MyApp(),
),
);
}
That's the integration. No native project edits, no Info.plist entries, no manifest changes. The key is publishable — shipping it in a test build is the intended use.
Triggers #
Shaking the device opens the report sheet. Three more ways in, all opening the same sheet:
// From anywhere in your code — a menu item, a debug button:
Squawk.show();
// A floating button, off by default because it covers your UI:
SquawkOptions(feedbackButton: true)
If your app is used in motion — running, cycling, on a ferry — raise the shake threshold, or turn the shake off and keep the button:
SquawkOptions(shakeSensitivity: ShakeSensitivity.firm)
Sensitivity is Android-only; iOS rides the system shake gesture, which Apple does not make tunable.
Who hit it #
Attach the user context you already have, and every report carries it:
Squawk.setUser(id: 'u_42', email: 'jo@client.com');
Squawk.setMetadata('plan', 'trial');
// On sign-out — forgets the user and all metadata:
Squawk.clearUser();
Offline #
Reports are spooled on disk and sent when the network is back. A tester on a plane can shake, annotate and send; the report arrives after landing.
Theming #
Squawk draws above your MaterialApp, so it cannot read your theme. Hand
it one and the report sheet, the sent note and the floating button all
match your app:
Squawk(
apiKey: 'sqk_your_project_key',
options: SquawkOptions(theme: myTheme, darkTheme: myDarkTheme),
child: const MyApp(),
)
Pass only theme and it is used whatever the device is set to — which is
what you want if your app pins one themeMode.
Options #
Every option has a default that suits most apps; passing no options at all is the expected case.
| Option | Default | What it does |
|---|---|---|
shakeToReport |
true |
Shaking opens the report sheet |
shakeSensitivity |
medium |
How hard the shake must be (Android only) |
feedbackButton |
false |
A floating button that opens the sheet |
captureLogs |
true |
Attach recent log output to reports |
askReporterEmail |
true |
The sheet asks the reporter for their email |
theme/darkTheme |
unset | Theme Squawk's own UI |
Platforms #
Android and iOS. The positioning is literal — your testers shake their phone — and the shake trigger is native code for exactly those two platforms. On other platforms the package does not apply.
Known limit: platform views (Google Maps, WebView) render blank in screenshots.
Your obligations #
Reports can contain personal data: whatever is on the screen, whatever your app logs, the reporter's email, and any user context you attach. Squawk stores reports in the EU and deletes them for real — deleting a report removes the row and the screenshot the same day — but what goes into a report is under your control:
- Set
captureLogs: falseif your logs can carry sensitive data. - Only attach user context you are allowed to share with a processor.
- Cover feedback reports in your app's privacy policy if you ship Squawk to end users rather than testers.
License #
Apache-2.0. The SDK is open source; the hosted inbox that receives reports is a separate paid service, free while in beta.