ebchat 5.2.0 copy "ebchat: ^5.2.0" to clipboard
ebchat: ^5.2.0 copied to clipboard

Embeddable ebchat chat SDK for Flutter apps. Drop-in chat screen and widgets on the first-party livechat protocol, with host-owned push ("notification outsourcing"), botflow forms and multi-company support.

Changelog #

5.2.0 #

  • Voice notes: composer recording with pause/resume and a live amplitude waveform (onRecordStart/Stop/Cancel/Pause/Resume, onRecordAmplitude); finished clips land in the new attachment tray for playback and review before anything is uploaded or sent.
  • Attachment tray: picked files and recordings queue above the composer (EbchatAttachmentTray), each removable, voice notes playable in place. Items show in-place upload progress (a spinner, not a vanishing act) and a per-item "Not sent — tap to retry" failed state with the bytes kept — a voice note cannot be re-made. Oversized files are rejected at pick time against the company's maxAttachmentBytes.
  • Multi-select attach: new onPickAttachments (preferred) and onPickAttachment composer hooks — the screen uploads and sends what the picker returns, same path as form answers; onAttach remains as the manual full-control override. The paperclip and mic respect the company's attachments / voice-notes feature toggles from bootstrap.
  • Inline audio player: real just_audio playback with a seekable waveform on every platform — mobile previously had no voice-note playback at all.
  • Delivery ticks: pending / sent / delivered / read on guest messages, driven by ebchat_core 1.1.0's deliveryStatus.
  • Realtime reconnect: a dead socket flips to fast polling while reconnect attempts back off exponentially, with a built-in "Reconnecting…" banner and a 30 s safety poll even while connected. The controller's new connectionState stream (connected / reconnecting / pollingOnly) is surfaced for host UIs.
  • Failed-send retry: a send that fails keeps its bubble, marked "Not sent — tap to retry" (LivechatDeliveryStatus.failed); tapping the bubble re-sends with the same clientId, so duplicates are impossible. A conversation closed under the guest mid-send carries the unsent text into the reopened conversation as a composer draft instead.
  • Silent token refresh: EbChat wires the controller's onAuthExpired (via the new realtimeFactory) to re-mint the session on 24 h token expiry; identified users re-send their identity + HMAC so expiry never demotes them to an anonymous guest. uploadAsset also retries once after a refresh.
  • App-lifecycle resync: on resume the screen refetches what arrived in the background and revives the socket (iOS freezes sockets); on pause it clears the guest's typing state.
  • EbChatBackground.handleMessage: background-isolate push handling — re-sessions from the persisted guest id, fetches the pushed conversation's newest messages, and returns {push, latestMessage, unreadCount} for the host's local notification. Needs a persistent SessionStore.
  • Transcript rewrite: reversed index-based list (scrollable_positioned_list) with history pagination, scroll-position preservation, a jump-to-bottom button with a new-message dot, message grouping, and quote-jump highlighting. No more forced scroll-to-bottom on every update.
  • Quote-jump history paging: tapping a quote whose original is older than the loaded window pages history in (bounded) before jumping; a truly missing original says "Original message unavailable" instead of doing nothing.
  • Long-press message actions: copy and reply from a bottom sheet — the discoverable path next to swipe-to-reply (which gained a haptic tick at the arm threshold).
  • Tappable file & video chips: received files and videos open externally via url_launcher on mobile — they were dead, untappable chips before.
  • Order receipts resolve product names: retailer SKUs seen in the catalog or cart this session render by name in order bubbles instead of raw ids.
  • Image decode caps: transcript images decode at display resolution (cacheWidth at device DPR) and are height-capped, so a 12 MP photo no longer costs full-size memory per bubble.
  • Multiline composer: mobile return inserts a newline (the send button sends, WhatsApp-style); hardware-keyboard surfaces keep enter-to-send. The keyboard stays up after sending.
  • Footer-hint steering: while a direct-node form waits on the composer, the hint tells the guest what the flow expects ("Share your location or type the address…", "Attach a photo, or type your answer…").
  • Catalog & cart error states: a failed catalog load shows retry instead of masquerading as an empty shop; a failed cart submit keeps the cart open with a snackbar; the catalog browser gained an in-sheet cart button + running total bar so add-to-cart has visible feedback while the sheet is up.
  • Fullscreen image viewer: pinch/double-tap zoom, swipe down to dismiss.
  • Wallpaper: the chat renders on the ebchat brand wallpaper (EbchatAssets.wallpaper — deliberately fixed, not themeable; the chat is a light surface even under dark host themes).
  • Accessibility sweep: semantic labels for tick states and the cart count, 44 px hit targets on small controls (tray remove), dynamic-type-aware tray sizing, screen-reader announcement when recording starts, and read receipts only fire when the transcript is actually visible (foregrounded, at bottom).
  • Typing indicators auto-expire after 6 s without a stop signal, and a peer message arriving clears them — no ghost operators.
  • Theme: new metaText, waveformInactive, divider, tickRead, directional bubble radii and incoming-bubble shadow tokens.
  • EbchatStrings: new recording/pause, connectivity ("Reconnecting…"), retry/copy, and form-hint strings — all English-defaulted, so existing custom strings objects keep compiling. New rtl field: layout direction now follows the field, not object identity with .ar, so customized Arabic strings render right-to-left.
  • Image form answers now send image_url (they rendered as file chips before).
  • Internal operator notes are never rendered, as defense in depth behind the gateway-side filter.
  • Dependencies: added scrollable_positioned_list, just_audio, url_launcher; removed intl (dates/weekdays are formatted in-package).
  • README: platform permission setup (iOS usage descriptions, Android RECORD_AUDIO), voice-note/attachment wiring, connectivity & polling-mode matrix, session persistence, and background push.

5.1.0 #

  • The SDK is two packages, not four. ebchat_ui is folded into this package and ebchat_realtime into ebchat_core; neither was ever consumed on its own outside this repo, and four pub.dev names meant four versions to keep in lockstep. package:ebchat/ebchat.dart exports everything the widgets did, so nothing changes for a host.

  • The declared Flutter floor is now >=3.35.0, which is what the widgets actually required all along (Image.network's webHtmlElementStrategy); the previous >=3.24.0 was resolvable but wrong.

  • Botflow form questions now work on mobile. EbChatScreen answers them itself: text questions focus the composer, and photo/file/location questions upload and send through the new onPickFile / onResolveLocation hooks. Previously onForm was unwired on mobile, so tapping a form question did nothing at all.

  • New EbChatFormKind / EbChatFormRequest / EbChatPickedFile, and EbChat.uploadAsset for hosts sending attachments themselves.

  • Both hooks are optional: media questions fall back to onAttach, location to typing an address. Unknown question types classify as text rather than dead-ending, so a new botflow QuestionType stays answerable.

  • onForm still overrides everything, for hosts that want full control.

5.0.0 #

  • Clean rewrite on the first-party livechat protocol. No API compatibility with the deprecated GetStream-based 3.x/4.x.
  • EbChat.init (bootstrap + guest/identified session, resume via SessionStore), EbChatScreen (drop-in chat with auto-reopen on close), EbChatUser (guest / identified + HMAC), EbChatPush.parse (host-owned FCM data payload).
  • Realtime via ebchat_realtime when the gateway advertises it; polling fallback otherwise.
2
likes
130
points
191
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Embeddable ebchat chat SDK for Flutter apps. Drop-in chat screen and widgets on the first-party livechat protocol, with host-owned push ("notification outsourcing"), botflow forms and multi-company support.

Homepage
Repository (GitHub)
View/report issues

Topics

#chat #messaging #support #livechat

License

MIT (license)

Dependencies

ebchat_core, flutter, http, just_audio, scrollable_positioned_list, url_launcher, web

More

Packages that depend on ebchat