2.5 KiB
WRNexus Inbox 0.1.0 preview
Flutter 3.35+/Dart 3.9+ recipient inbox client and WRNexusInboxView. Distribution uses a versioned Git package; the release report records the published repository when available. Use sdk/flutter locally while publication is pending.
import 'package:wrnexus_inbox/wrnexus_inbox.dart';
final inbox = InboxClient(token: () => yourBackend.fetchRecipientToken());
WRNexusInboxView(client: inbox, onAction: (message, action, url) {
// Route the HTTPS URL in your app, or handle action?.id.
});
The view needs bounded height, for example a Scaffold.body or Expanded. It loads organization branding, shows unread count and messages, and supports read/archive, pull-to-refresh and custom actions. Text renders as text. Unsafe action URLs are refused. It pauses streaming with app lifecycle and cancels on dispose. Replacing client clears the previous recipient's state before loading another.
Methods: messages(limit:), markRead(id), archive(id), preferences(), savePreferences(input), devices(), registerMobilePush(input), unregisterMobilePush(id), unregisterWebPush(id) and updates(). Errors expose InboxException.code, status and message. Each request/reconnect fetches a fresh recipient token. Delivery-rule null values clear saved rules; omitted fields preserve existing values. Writes never retry automatically.
Your backend issues recipient tokens; never include a business API key. For push, configure an active Notifications FCM/APNs connection. Initialize the host's provider SDK, request notification permission, persist a random installation ID, and register the token using MobileRegistration with MobilePlatform.android or .ios. Subscribe to the provider's token-refresh callback and register the replacement using the same installation ID. Retain the returned device ID per signed-in recipient and record actual marketing consent/evidence.
Before logout unregister that recipient's stored device ID, dispose the view/subscription and call inbox.close(). If unregister fails, have your backend deactivate the device. A new recipient gets a new client; do not reuse inbox state across accounts. Provider setup and permission handling remain with the host app.
Validation: flutter analyze and flutter test. Tests exercise transport, errors, actions, read/archive, disposal and a branded widget golden. The golden uses explicitly labeled test fixture data. Real Android/iOS push delivery remains a separate device check.