sonis_feedback 0.1.0
sonis_feedback: ^0.1.0 copied to clipboard
Sonis Panel fix widget for Flutter test builds - shake the phone, describe a fix, the screenshot goes to the project's fixes.
sonis_feedback #
In-app feedback for Sonis Panel projects. Shake an Android or iOS device to capture the Flutter screen and send a fix, bug report or suggestion to your project's feedback list.
Designed for test builds. Includes a dark dialog, Montserrat, Lucide icons, screenshot attachment and recent Flutter error summaries. Requires a Sonis Panel project with a widget key.
Install #
flutter pub add sonis_feedback
Requires Flutter 3.33 or later. Supports Android and iOS. Flutter Web is not supported.
Get a project key #
In Sonis Panel, open your project → О проекте → Виджет правок. Copy data-key from Код для сайта. Use this public widget key, never an administrator token or password.
Reports are accepted only while client feedback is open. Otherwise the form displays Правки закрыты.
Quick start #
Wrap your app and pass the same navigator key to MaterialApp:
import 'package:flutter/material.dart';
import 'package:sonis_feedback/sonis_feedback.dart';
final navigatorKey = GlobalKey<NavigatorState>();
void main() {
runApp(
SonisFeedback(
apiKey: 'pk_YOUR_PROJECT_KEY',
navigatorKey: navigatorKey,
child: MaterialApp(
navigatorKey: navigatorKey,
home: Scaffold(
appBar: AppBar(title: const Text('My app')),
body: const Center(
child: TextButton(
onPressed: SonisFeedback.open,
child: Text('Send feedback'),
),
),
),
),
),
);
}
Shake the device or tap your feedback button. Choose a type, enter a description and send. Reports appear as guest feedback in the project.
Test releases #
Enabled by default in debug builds. For release test builds:
flutter build apk --dart-define=SONIS_FEEDBACK=true
flutter build ipa --dart-define=SONIS_FEEDBACK=true
Ordinary release builds leave feedback disabled. enabled overrides this behavior. SonisFeedback.open() does nothing when disabled or the wrapper is not mounted.
Options #
| Parameter | Default | Purpose |
|---|---|---|
apiKey |
Required | Public project widget key |
navigatorKey |
Required | The key used by your app navigator |
child |
Required | Your application |
panel |
https://panel.denielsonis.com |
Sonis Panel server URL |
enabled |
null |
Override build-based enablement |
shake |
true |
Set to false to open only from code |
For router-based apps, attach the key to the root navigator in your router configuration.
Platform setup #
- Android: ensure
android/app/src/main/AndroidManifest.xmlincludes<uses-permission android:name="android.permission.INTERNET" />for release test builds. No camera or storage permission is required. - iOS: add
NSMotionUsageDescriptiontoios/Runner/Info.plistwith your motion-access explanation, as required by the sensor dependency. No camera or photo-library permission is required. - Shake detection needs an accelerometer. On a simulator, use
SonisFeedback.open().
Screenshots and privacy #
Screenshots capture Flutter-rendered content before the dialog opens. Native views such as WebView and maps may be missing. If capture fails, reports can still be sent without an image.
When the tester presses Отправить, the package uploads the description, report type, screenshot (if available), operating system, logical screen dimensions and up to five recent Flutter error summaries to your configured Sonis Panel server. Inform testers and review screens for sensitive content.
The form uses Russian labels and a bundled dark Sonis theme. Localization and custom form themes are not currently exposed.
License #
Package code: MIT. Bundled Montserrat: SIL Open Font License in fonts/OFL.txt.