- New: Add environments to
Wiredash(environment: 'staging')
andWiredashAnalytics(environment: 'staging')
. Automatically detects dev environments #369 - Widen
device_info_plus
dependency to include11.x
- Fix
isBeforeFlutter3_22()
check, fixing the lifecycle onweb
in Flutter 3.19 #354 - Detect
FakeTimer
without try-catch #355
-
Track Custom Analytics events (requires paid plan) #338
Record user interactions or other significant occurrences within your app and send them to the Wiredash service for analysis.
Use [Wiredash.trackEvent] for easy access from everywhere in your app.
await Wiredash.trackEvent('Click Button', data: {/**/});
Use the [WiredashAnalytics] instance for easy mocking and testing
final analytics = WiredashAnalytics(); await analytics.trackEvent('Click Button', data: {/**/}); // inject into other classes final bloc = MyBloc(analytics: analytics);
Access the correct [Wiredash] project via context to send events to if you use multiple Wiredash widgets in your app. This way you don't have to specify the [projectId] every time you call [trackEvent].
Wiredash.of(context).trackEvent('Click Button');
eventName constraints
- The event name must be between 3 to 64 characters long
- Contain only letters (a-zA-Z), numbers (0-9), - and _ and spaces
- Must start with a letter (a-zA-Z)
- Must not contain double spaces
- Must not contain double or trailing spaces
data constraints
- Parameters must not contain more than 10 key-value pairs
- Keys must not exceed 128 characters
- Keys must not be empty
- Values can be String, int or bool. null is allowed, too.
- Each individual value must not exceed 1024 characters (after running them through jsonEncode).
Event Sending Behavior:
- Events are batched and sent to the Wiredash server periodically at 30-second intervals.
- The first batch of events is sent after a 5-second delay.
- Events are also sent immediately when the app goes to the background (not applicable to web platforms).
- If events cannot be sent due to network issues, they are stored locally and retried later.
- Unsent events are discarded after 3 days.
Multiple Wiredash Widgets:
If you have multiple [Wiredash] widgets in your app with different projectIds, you can specify the desired [projectId] when creating [WiredashAnalytics]. This ensures that the event is sent to the correct project.
If no [projectId] is provided and multiple widgets are mounted, the event will be sent to the project associated with the first mounted widget. A warning message will also be logged to the console in this scenario.
Background Isolates:
When calling [trackEvent] from a background isolate, the event will be stored locally. The main isolate will pick up these events and send them along with the next batch or when the app goes to the background.
- Widen package_info_plus range (include 8.x)
- Widen ranges for device_info_plus and package_info_plus #344
- Prevent
Wiredash
from scheduling tasks in your widget tests #332 - Update README with new header image, adjust pub tags
- Run tests successfully on Flutter 3.0.0 and 3.20.0 #335
- Improve testing setup #334
-
New: Wiredash Analytics 🎉 Get real-time analytics that is GDPR-compliant and hosted in the EU 🇪🇺
-
New: Force an email address with
EmailPrompt.mandatory
in feedback flow #327 -
Compatability with Flutter 3.19.0 (stable) and 3.20.0 (beta)
WiredashThemeData()
parameterfontFamily
, usetextTheme
insteadWiredash.of(context).setBuildProperties()
will be captured automatically. Just remove the callWiredash.of(context).show()
parameterfeedbackOptions
is nowoptions
Wiredash()
parameternavigatorKey
, which is not required anymoreWiredashFeedbackOptions()
parameterbool askForUserEmail
replaced withEmailPrompt email
WiredashFeedbackOptions()
parameterbool screenshotStep
replaced withScreenshotPrompt screenshot
CustomizableWiredashMetaData.populated()
got removed. Use the defaultCustomizableWiredashMetaData()
insteadCustomizableWiredashMetaData
removedbuildVersion
,buildNumber
andbuildCommit
. Those are now captured automatically
- Add support for Flutter 3.17.0 (removing
physicalGeometry
) #324 - Add more
WiredashTheme
color overrides #325
- Ignore empty strings when setting
buildNumber
,buildVersion
orbuildCommit
via--dart-define
#323 - Improve SDK usage reporting
- Wiredash now automatically collects the version information of your app. No need to set
buildVersion
,buildNumber
anymore. If you want to override this information, you can still do so via dart-define at compile time https://docs.wiredash.io/sdk/custom-properties/#during-compile-time. - New:
Wiredash(collectSessionMetaData: )
combines and replacescollectSessionMetaData
ofWiredashFeedbackOptions
andPsOptions
. No deduplicate code anymore 🎉// Before return Wiredash( projectId: "...", secret: "...", feedbackOptions: WiredashFeedbackOptions( collectMetaData: (metaData) { return metaData ..userEmail = '[email protected]' ..userId = '007' ..custom['myKey'] = {'myValue': '007'}}, ), psOptions: PsOptions( collectMetaData: (metaData) { return metaData ..userEmail = '[email protected]' ..userId = '007' ..custom['myKey'] = {'myValue': '007'}}, ), ),
// After return Wiredash( projectId: "...", secret: "...", collectMetaData: (metaData) { return metaData ..userEmail = '[email protected]' ..userId = '007' ..custom['myKey'] = {'myValue': '007'}}, ),
- The metadata properties
buildVersion
,buildNumber
andbuildCommit
cannot be set viaWiredash.of(context).modifyiMetaData()
anymore. This information has to be provided at compile time (dart-define) or is read automatically from the app bundle setBuildProperties()
is now deprecated and noop, also use dart-define instead- New
Wiredash.of(context).resetMetaData()
to easily reset all metadata - Add italian
it
locale 🇮🇹#317 - Add farsi
fa
locale 🇮🇷🇦🇫#316 - Updated norwegian
no
locale 🇳🇴#303 - Fix issues with the animated backdrop #314 #315
- Add norwegian
no
locale 🇳🇴
- Localize discard confirm button in Promoter Score survey
feedbackDiscardConfirmButton
#299 - Localize button screenshot text on mobile
feedbackStep3ScreenshotBottomBarTitle
(new) #299 - Remove hit testing warnings in tests #300
- Update to Flutter 3.13 #292
- Update cirruslabs Flutter containers to always test against the latest Flutter versions
- #285 Add Support danish (
da
) and arabic (ar
)
- Widen dependency constraints of
http
andfile
- #278 Add Support for Flutter 3.10
- #274 Raise min Flutter SDK to Flutter 3.0.0 / Dart 2.17
- #268 Add czech locale
cs
🇨🇿 @lukas-h - #275 Add german promoter score localizations 🇩🇪 @Dev-dfm
- #272 Fix: Prefill email field from
collectMetadata
if available, when screenshot step is skipped - #276 Fix top padding on Android phones with notch.
- #266 Support for Flutter
3.7
. Required forgo_router
users - #255 Add french locale
fr
🇫🇷 - #251 Add hungarian locale
hu
🇭🇺
-
New: Promoter Score Surveys 🎉 Ask your users how likely they are to recommend your app to their friends on a scale from 0-10. You can see your stats in the console in the new NPS tab.
// Trigger this at significant point in your application to probably show // the Promoter Score survey. // Use [options] to adjust how often the survey is shown. Wiredash.of(context).showPromoterSurvey( options: PsOptions( // minimum time between two surveys frequency: Duration(days: 90), // delay before the first survey is available initialDelay: Duration(days: 7), // minimum number of app starts before the survey will be shown minimumAppStarts: 3, ), // for testing, add force the promoter score survey to appear force: true, );
- New locales polish
pl
🇵🇱, spanishes
🇪🇸🇲🇽, portuguesept
🇵🇹🇧🇷 and turkishtr
🇹🇷 by our awesome contributors @orestesgaolin, @jamesblasco, @KyleKun and @AtaTrkgl. Thanks! Want to contribute your language? Checkout the docs Localization - Contribute to Wiredash - Renamed
Wiredash.of(context).show(feedbackOptions: )
toWiredash.of(context).show(options: )
- #231 Improve opening animation performance
- #232 Email step is now enabled by default (as stated in documentation)
- #235 Fix l10n initialization crash on slow devices
When you're upgrading from 0.7.0:
A whole new SDK!
- Completely rewritten UI layer
- Custom metadata properties
- Custom labels
- Automatic theming
Upgrading from the 1.0.0-beta? Cool features await you!
- #228 Labels can now be
hidden
and will be sent directly to the console - #228
Wiredash.of(context).show()
now acceptsfeedbackOptions
. That makes localizing easier. See the docs for more information - #229
WiredashThemeData
now supports atextTheme
parameter that allows settingfontFamily
(WiredashThemeData.fontFamily
is now deprecated) - #227 Locale
de_DE
does now matchde
localization - #224 Wiredash now extend and not override incoming
Localizations
via widget tree - #217 Pen colors are now adjustable via
WiredashTheme
- #218 Don't show "No pending feedbacks" in console
- Capture feedback metadata even when no screenshot was made
- #211 Fix
SyncEngine
not triggering initial 'appStart' event - #212 Remove Wiredash branding from appHandle
- #214 Repect user choice when removing their email address
- #216 Undeprecate
Wiredash.of(context).setUserProperties()
andWiredash.of(context).setBuildProperties()
as alternative tomodifyMetaData
. The newWiredash.of(context).metaData
getter might also be handy for you - #217 You can now adjust the pen colors in
WiredashThemeData
- #209 Sync state between sdk and console via
ping
- #207 Multi language support. Currently, Wiredash support English 🇬🇧 and German 🇩🇪. We'd happily accept any other languages!
- e8de7b5 Fix
Confidential
widget hiding content when Wiredash was closed. - Updated
README.md
for upcoming 1.0.0 release.
Is this release stable? Yes. And once the documentation is update we feel ready to call it 1.0.0
- #205 Improve theming capabilities. Better automatic colors, more customizations. New
WiredashThemeData
properties:primaryContainerColor
textOnPrimaryContainerColor
secondaryContainerColor
textOnSecondaryContainerColor
appBackgroundColor
appHandleBackgroundColor
- Removal of
primaryTextColor
andsecondaryTextColor
, those are not completely automatic
Android back button support & resizing
- #195 Support for the Android back button
- #194 Resize Wiredashs content area to match the size of the content
- #201 Fix state restoration error when reopening Wiredash
- #194 Add a "Back to app" app header on desktop
- #198 Added a netflix and whatsapp clone example demonstrating Wiredashs automatic theming capabilities when using
Wiredash.of(context).show(inheritMaterialTheme: true)
- #199 Show error when taking a screenshot fails. This may happen for some widgets on web (canvaskit)
- #202 Fix "Warning: Missing asset in fonts for Inter"
- #194 Small color adjustments
- #188 Fix upload of multiple screenshots for non-web platforms. May have caused double submission of feedback
Multiple screenshots
- #183 Allow multiple screenshots to be attached to a feedback
- #179 Improve performance of your app by limiting the number of widgets Wiredash injects. Noticable on low-end devices such as the iPhone SE
- #179 Fix: Keep your app state when opening Wiredash. Won't happen again 🤞
- #184 Documentation: Fix deprecation message of
setUserProperties
to referencemodifyMetaData
Desktop in focus
- #177 Improved Desktop UI
- #176 Draw
appBackgroundColor
behind app on screenshot - Discard feedback button
- Color selection and drawing undo
- Allow retake of screenshot
- #172 Scale drawing to match the screenshot size (based on screen ppi)
- Scaling the window after capturing a screenshot doesn't change the drawing position anymore
- Hide feedback details on Summary page behind button
- Make status bar text readable on iOS
- #175 Raise min Flutter SDK to 2.8, (2.9 is required for macOS)
No Overlay for you
- #168 Fix responsive padding calculation on window resize
- #169 Don't wrap user app in
Overlay
- #170 Fix dark theme on summary screen
- #171 Fix screenshot layout for devices with a notch
Desktop improvements
- #164 Support for transparent apps macOS apps
- Hide backdrop content in screenshot mode
- #165 Validate email address
- #166 Make email address optional. Set
WiredashFeedbackOptions(askForUserEmail: true)
to enable it - #167 New
inheritMaterialTheme
andinheritCupertinoTheme
properties forWiredash.of(context).show()
to inherit the theme
A Whole New World
- Completely rewritten UI layer
- Custom metadata properties
- Custom labels
- Automatic theming
- Declare end of life support for
0.7.x
SDKs after 1st Jan 2023
- Fix null-safety warning in Flutter 3.0
Version Bump
- Increment
sdkVersion
Screenshot Web support for canvaskit
- #140 Wiredash now supports screenshots in Flutter Web when the canvasakit renderer is used
- Flutter compatibility range:
1.26.0-17.5.pre
-2.3.0-13.0.pre.166
More nullsafety
- #135 Don't show nullsafety warning on Flutter dev channel
Flutter 2.0
- #133 Raise min Flutter SDK to
1.26.0-17.5.pre
. Older versions are incompatible withpackage:path_provider
- #130 Fix Flutter web locale nnbd error on
stable
Flutter2.0.0
Nullsafety
- Migrate the sdk to nullsafety. No breaking changes except for raising the Dart SDK to 2.12.0-0.
SingletonFlutterWindow
- *Breaking- Replace references to
ui.Window
with the newSingletonFlutterWindow
flutter/pull/69617
- Raise minimum Flutter version to
1.24.0-8.0.pre.341
where the breaking change was introduced
Prepare for nullsafety
- Remove mockito dependency
- Add nullability hints
/*?*/
Longer feedback & more languages
- Feedback length has been increased from 512 to 2048 characters
- Support for new languages: [da] 🇩🇰, [hu] 🇭🇺, [ko] 🇰🇷, [ru] 🇷🇺 and [zh-cn] 🇨🇳. We are still missing some languages, please help us to translate Wiredash on POEditor
- Wiredash supports Android, iOS, macOS, Windows and Linux. We hope with this release pub.dev detects it correctly
Web support 🕸 & Customizations 🎨
- Wiredash is now available for Flutter Web. No screenshots yet but sending feedback generally works #98 #106
- You can now customize the BottomSheet to match your apps style. Custom fonts & colors #100 as well as disabled individually buttons #90
Wiredash(
options: WiredashOptionsData(
bugReportButton: false,
featureRequestButton: false,
praiseButton: false,
),
theme: WiredashThemeData(
fontFamily: 'Monospace',
sheetBorderRadius: BorderRadius.zero,
brightness: Brightness.light,
primaryColor: Colors.red,
secondaryColor: Colors.blue,
firstPenColor: Colors.orange,
secondPenColor: Colors.green,
thirdPenColor: Colors.yellow,
fourthPenColor: Colors.deepPurpleAccent,
);
);
- Accessibility labels for all UI components #91
- Relax email validation #85
- Don't allow empty messages #83
- Don't allow opening Wiredash when navigating the app during capture #81 #103
- Widen dependency ranges where possible
- Simplified sample #102
- Improve error handling of offline submissions #104 #105
Hello offline support, bye-bye FloatingEntryPoint
- Support sending feedback and screenshots when offline.
- Added translations for Arabic, Portuguese, and Turkish.
- Removed
FloatingEntryPoint
as it was a bit confusing to first-time users, and most would disable it anyway. - Added an
enabled
flag, docs, and hidPaintItBlack
in theConfidential
widget. - Fixed translation overflow exceptions for some languages.
Internationalization Support 🇬🇧🇩🇪🇵🇱
We added initial internationalization support for several languages. Feel free to contribute your own translations (check out the docs for more info on that)!
- Added
WiredashLocalizations
- Added ability to provide custom
WiredashTranslations
- Added buildNumber, buildVersion and buildCommit properties that can be passed through dart-define
- Constrained the SDK to 2.8.0 or newer and Flutter to 1.17.0 or newer
- Deprecated method
setIdentifiers
in favor ofsetUserProperties
andsetBuildProperties
- Minor bug fixes
Floating Entry 📲, Confidential 👀 & Provider 🏗
Wiredash now uses the Provider package for internal state management and supports version 3.0.0 and higher. If you are also using Provider in your app, please make sure to at least use version 3.0.0.
- Added a Floating Entry which is shown by default in debug to show Wiredash from any screen
- Added WiredashOptions to further customize the Wiredash widget (e.g. the Floating Entry)
- Added a Confidential widget to automatically hide sensitive widgets during screen capture
- Added a Wiredash.of(context).visible ValueListener to check if Wiredash is in screen capture mode (e.g. for hiding certain widgets being screen captured)
- Improved error handling when there is no valid root navigator key
- Improved performance
- Minor bug fixes
Public Release
- Wiredash gets released to the public 🎉