seenn_flutter 0.8.5
seenn_flutter: ^0.8.5 copied to clipboard
Flutter SDK for Seenn - Real-time job progress tracking with Polling and Live Activity support.
Changelog #
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.8.4 - 2026-02-04 #
Added #
-
SDK Version Info - Programmatic access to SDK version
sdkVersion- Current SDK version string ('0.8.4')sdkName- Package name ('seenn_flutter')sdkUserAgent- For API request headers
-
Error Codes - Standardized error codes for all operations
SeennErrorCodeclass with all error code constants- All
LiveActivityResultnow includescodefield for programmatic error handling - Codes:
platformNotSupported,invalidJobId,invalidProgress,activityNotFound, etc.
-
Input Validation - Client-side validation before native calls
- Validates jobId (required, max 128 chars), title, progress (0-100), status
- Returns specific error codes for invalid inputs
-
Debug Logging - Warning logs in debug mode when calling iOS-only APIs on Android
Changed #
LiveActivity.update()now returnsLiveActivityResultinstead ofboolfor consistencyLiveActivity.end()now returnsLiveActivityResultinstead ofboolfor consistencyLiveActivity.cancel()now returnsLiveActivityResultinstead ofboolfor consistencyLiveActivity.cancelAll()now returnsLiveActivityResultinstead ofboolfor consistencyLiveActivityResultnow hastoString()for easier debugging
Example #
import 'package:seenn_flutter/seenn_flutter.dart';
print('SDK Version: $sdkVersion'); // '0.8.4'
final result = await LiveActivity.start(
jobId: '', // Invalid!
title: 'Test',
jobType: 'test',
);
if (!result.success) {
if (result.code == SeennErrorCode.invalidJobId) {
print('Invalid job ID!');
}
}
0.8.3 - 2026-02-04 #
Added #
- Auto Push Token Registration - SDK now automatically captures device push tokens on app restart
refreshDevicePushToken()- Refresh token if authorization already granted (call on app launch)- Auto-swizzle on SDK init - No longer requires permission request to setup token capture
Why This Matters #
Previously, if a user granted push permission and then restarted the app, the device token would not be captured because swizzling only happened during permission request. Now the SDK swizzles immediately on init, ensuring tokens are always captured.
0.8.1 - 2026-01-30 #
Changed #
- Cleaned up SSE references from documentation and comments
- Polling is now the only supported connection mode
0.8.0 - 2026-01-30 #
Added #
- Device Push Token support for provisional push
onPushTokennow emits device tokens withtype: .device- Automatic
registerForRemoteNotifications()after provisional auth - Method swizzling for AppDelegate token capture
- Compatible with OneSignal/Firebase (chains to original implementation)
0.7.0 - 2026-01-29 #
Added #
- Provisional Push Authorization (iOS 12+) - Request push notifications without permission prompt
LiveActivity.getPushAuthorizationStatus()- Get current authorization statusLiveActivity.requestProvisionalPushAuthorization()- Request quiet notificationsLiveActivity.requestStandardPushAuthorization()- Request full notifications (shows prompt)LiveActivity.upgradeToStandardPush()- Upgrade from provisional to full access- New
PushAuthorizationStatusenum andPushAuthorizationInfomodel
0.6.0 - 2026-01-29 #
Added #
- Standalone Mode - Use Live Activity without Seenn server connection
- New
LiveActivitystatic class for direct native bridge access - No
Seenn.init()required for standalone usage - Perfect for BYO Backend scenarios with own job state and APNs push
- New
- Static convenience methods:
LiveActivity.start(),update(),end()LiveActivity.isSupported(),areActivitiesEnabled()LiveActivity.isActive(),getActiveIds()LiveActivity.cancel(),cancelAll()LiveActivity.onPushTokenstreamLiveActivity.initialize(),dispose()
Documentation #
- Added "Standalone Mode (BYO Backend)" section to docs
- Clarified difference between Self-Hosted and Standalone modes
0.5.0 - 2026-01-29 #
Added #
- Live Activity CTA Button - Tappable button on completion
ctaButtonparameter inendActivity()LiveActivityCTAButtonmodel with text, deepLink, style options
0.4.1 - 2026-01-28 #
Fixed #
- Critical: Push token race condition - tokens arriving before Dart listener was ready were silently dropped
- Added token buffering: tokens received before
EventChannel.listen()are now queued and emitted when listener connects
0.4.0 - 2026-01-28 #
Changed #
- BREAKING: Live Activity now requires bridge registration
- Removed internal
SeennJobAttributesto fix "ActivityInput error 0" iOS module isolation bug - Added
SeennLiveActivityBridgeprotocol for app-level implementation - Added
SeennLiveActivityRegistryfor bridge registration
Added #
isBridgeRegistered()method inLiveActivityServiceLiveActivityResult.bridgeNotRegistered()error type- Bridge implementation template in example app
Migration #
Users must now:
- Copy
SeennLiveActivityBridgeImpl.swiftto their app - Copy
SeennJobAttributes.swiftto both app and Widget Extension targets - Register bridge in AppDelegate:
SeennLiveActivityRegistry.shared.register(SeennLiveActivityBridgeImpl.shared) - See docs: https://docs.seenn.io/client/flutter#live-activity-setup
0.3.0 - 2026-01-24 #
Added #
- Polling Mode - Alternative to SSE for self-hosted backends
ConnectionModeenum:.sse(default) or.pollingPollingServicefor REST-based job pollingSeennConfig.selfHosted()factory for easy setupsubscribeJob(),subscribeJobs(),unsubscribeJob()methods- Configurable
pollInterval(default: 5 seconds) - Auto-unsubscribe from terminal jobs
Changed #
SeennConfignow includesmode,pollInterval,initialJobIds- SDK version bumped to 0.3.0
0.2.0 - 2026-01-24 #
Added #
- Android Ongoing Notification - Persistent notification with progress bar
OngoingNotificationServicefor direct Android controlJobNotificationServicefor unified cross-platform API
- ETA Countdown - Real-time countdown with server sync
EtaCountdownServicewith formatted outputetaCountdownStream()convenience function
- Parent-Child Jobs - Hierarchical job relationships
ParentInfo,ChildrenStats,ChildJobSummarymodelschildrenOf(),parents,childrenin JobsService
- New Job Fields - Full @seenn/types alignment
jobType,workflowId,estimatedCompletionAtetaConfidence,etaBasedOn,childProgressModeparent,children,startedAt
- JobTracker Enhancements
onCancelledstreamonChildProgressstream for parent jobs
Changed #
StageInfofields:name,current,total,descriptionQueueInfoaddedqueueNamefieldJobStatusaddedcancelledstatus
Deprecated #
StageInfo.id→ usenameStageInfo.label→ usenameStageInfo.index→ usecurrent