Changelog
All notable changes to the firetell_flutter_sdk package are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.1.0] - 2026-09-14​
Added​
- Mobile Video Call Support:
- Full video calling support matching the core capabilities of the browser SDK (excluding screen sharing for mobile ergonomics).
- Camera controls on
Call:isCameraOffboolean property to check current camera transmission status.muteVideo()to disable local video tracks and broadcast state to remote peer viacall.camera.unmuteVideo()to re-enable local video tracks and broadcast state to remote peer viacall.camera.toggleCamera()convenience method to toggle camera on/off.switchCamera()to switch between front-facing and rear-facing device cameras usingHelper.switchCamera.onCameraChangebroadcast stream to listen for local camera mute/unmute state changes.
- SDP video auto-detection:
- Automatically detects video media description (
m=video) in remote SDP offers received via WebSocket signaling (call.offer). - Sets
isVideo = trueinCall.accept()if SDP offer contains video, ensuring matching audio/video media negotiation.
- Automatically detects video media description (
- WebSocket signaling updates:
- Added
call.cameramessage handler in_handleWsMessageto synchronize camera state events between peers.
- Added
- Example Application Video Calling:
- Created dedicated full-screen
VideoCallScreen(video_call_screen.dart) with local Picture-in-Picture preview, remote video feed rendering, camera switch button, camera mute/unmute toggle, microphone mute, speakerphone toggle, and call duration badge. - Added dedicated Video Call action button on the dial pad alongside the audio call button.
- Updated in-app incoming call dialog to show video calling indicators when
call.isVideois true. - Exported
package:flutter_webrtc/flutter_webrtc.dartfrom package library entry point for seamless UI renderer integration (RTCVideoRenderer,RTCVideoView,RTCVideoViewObjectFit).
- Created dedicated full-screen
- Platform Permissions:
- Added
android.permission.CAMERAandNSCameraUsageDescriptionsetup guidance in documentation and README.
- Added
[1.0.3] - 2026-09-14​
Added​
- Speakerphone Control:
- Added
isSpeakerOnboolean property toCallto check current speaker status. - Added
setSpeakerphoneOn(bool enable)to route audio between device loudspeaker and earpiece. - Added
toggleSpeaker()convenience method to toggle speakerphone on/off. - Added
onSpeakerChangebroadcast stream to listen for speaker state changes. - Automatically resets speakerphone to earpiece on call cleanup.
- Added
- Phone Numbers (DIDs) & Caller ID Support:
- Added
PhoneNumber,PhoneNumberCapabilities, andPhoneNumbersResponsemodels. - Added
client.getPhoneNumbers({page, limit})andclient.getPhoneNumbersResponse({page, limit})to fetch agent/team accessible phone numbers for outbound Caller ID (from). - Updated example
DialpadScreento automatically fetch available DIDs and provide an interactive Caller ID dropdown selector when dialing outbound.
- Added
- Backend Device Push Token Cleanup on Logout:
- Upgraded
FiretellClient.logout({deviceId})to an asynchronous method that callsPOST /api/v1/me/logoutwithdevice_idto unregister push tokens on the server, ensuring the device stops receiving VoIP incoming calls after logout. - Automatically resolves
deviceIdfromDeviceIdHelper.getOrCreate()if not explicitly specified.
- Upgraded
- Example Application:
- Added a dedicated Speaker/Earpiece toggle button with live state feedback to the active call screen.
- Added dynamic Caller ID selector on the Dial Pad screen.
- Streamlined logout flow via
await client.logout().
[1.0.2] - 2026-09-14​
Changed​
- Upgraded Dependencies:
- Updated to modern packages:
flutter_callkit_incoming: ^3.1.5,flutter_webrtc: ^1.6.2,web_socket_channel: ^3.0.3,http: ^1.6.0,uuid: ^4.6.0,shared_preferences: ^2.5.5,device_info_plus: ^13.2.0.
- Updated to modern packages:
- flutter_callkit_incoming 3.x Compatibility:
- Adapted
CallKitHandlerand example handlers to supportflutter_callkit_incoming 3.xsealed class event hierarchy (CallEventActionCallAccept,CallEventActionCallDecline, etc.). - Configured
missedCallNotification:andcallingNotification:inCallKitParams. - Resolved
CallEventnaming conflict with SDK's internal enum via explicit namespace aliasing.
- Adapted
Fixed​
- WebRTC Local Description Handling:
- Fixed
localDescriptiongetter error influtter_webrtcby utilizing asynchronousawait pc.getLocalDescription().
- Fixed
- Linter & Code Health:
- Fixed
unawaited_return_in_try_blocklint in WebSocket connect handshake. - Replaced unhandled
catchErrorwith cleanunawaitedtry/catch block inFiretellClient. - Added unnamed
library;directive for Dart 3 library doc comment compliance. - Renamed documentation directory to
doc/and main markdown file toREADME.mdper pub.dev package layout guidelines.
- Fixed
[1.0.1] - 2026-09-14​
Fixed​
- iOS VoIP Push Token Registration:
- Differentiated Apple PushKit VoIP tokens (
PKPushRegistry) from standard Firebase FCM tokens. - Used
FlutterCallkitIncoming.getDevicePushTokenVoIP()to obtain the raw 64-character hex APNs VoIP token on iOS forPOST /api/v1/me/devices/voip-push-token. - Maintained FCM token registration for standard notification push (
POST /api/v1/me/devices/notification-push-token) to handle background call cancellations (call.canceled) and endings (call.ended) across both iOS and Android. - Updated FCM token refresh listener to automatically synchronize updated tokens based on the running platform.
- Differentiated Apple PushKit VoIP tokens (
[1.0.0] - 2026-09-14​
Added​
- Core WebRTC Calling:
FiretellClientclass for managing sessions, tokens, device registrations, and SSE event streaming.Callclass implementing full WebRTC lifecycle (makeCall,accept,reject,hangup,hold/unhold,mute/unmute,sendDTMF).- Native WebSocket per-call signaling protocol using event-based messages (
session.connect,call.offer,call.answer,call.ice_candidate,call.hangup). - Full ICE candidate gathering before sending SDP offer/answer for maximum NAT traversal reliability.
- VoIP Push Notification & Cold-Start Support:
PushTokenServicefor registering device VoIP push tokens (fcm_voip,apns_voip,fcm_data) with backend REST API.DeviceIdHelperproviding persistent unique device UUID identification across app restarts (SharedPreferences).IceServerCachefor offline and cold-start STUN/TURN server caching.CallKitHandlerandColdStartCallHandlerpatterns enabling instant incoming call connection from locked screen or killed app state using push payload credentials (ws_urlandcall_token).
- Reactive Event Streams:
- Stream-based client events:
onCallOffer,onCallAccepted,onCallEnded,onCallRejected,onCallRinging. - Granular call state streams:
onStateChanged,onRemoteStream,onLocalStream,onEvent.
- Stream-based client events:
- Comprehensive Example App:
- Complete Flutter demo app covering login, push token registration, incoming call notification with CallKit, active call UI, and audio stream routing.
- Documentation:
- Internal architecture, WebRTC call flow diagrams, and VoIP push integration guides under
doc/.
- Internal architecture, WebRTC call flow diagrams, and VoIP push integration guides under