gtateth_flutter_sdk 0.1.10
gtateth_flutter_sdk: ^0.1.10 copied to clipboard
Official Flutter SDK and native UI components for g-tateth chat widget integration.
gtateth_flutter_sdk #
Native Flutter SDK and UI components for integrating g-tateth chat on mobile.
0.1.10 Executive Summary #
The Flutter SDK now supports full in-app chat widget customization on mobile with web-style behavior parity, built-in persistence, chatbot assistant naming, and host app back-navigation hooks.
- Tenants can open a settings page from a gear icon inside chat.
- They can customize Appearance, Behavior, and Chatbot settings directly on mobile.
- Saved changes persist across refresh and app restart by default.
- Mobile now follows web logic for greeting priority, typing indicator behavior, offline messaging, and status indicator behavior.
- Chatbot assistant display names can be configured and synced from tenant settings.
- Host apps can provide a custom back action and label for embedded support screens.
Features #
- Typed client for
/api/widget/*endpoints - Session initialization and token handling
- Send/fetch messages
- Online agents and settings fetch
- Conversation lifecycle helpers
- Socket.IO realtime support
- Ready-to-use native Flutter chat widget
- Chat widget settings for tenant-level customization
- Automatic tenant settings sync from
/api/widget/settings
Install #
Add to your app pubspec.yaml:
dependencies:
gtateth_flutter_sdk: ^0.1.10
For local development in this monorepo, you can still use a path dependency:
dependencies:
gtateth_flutter_sdk:
path: ../sdks/flutter
Quick Start #
import 'package:flutter/material.dart';
import 'package:gtateth_flutter_sdk/gtateth_flutter_sdk.dart';
class SupportScreen extends StatelessWidget {
const SupportScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Support')),
body: Padding(
padding: const EdgeInsets.only(bottom: 20.0),
child: GtatethChatWidget(
config: const WidgetClientConfig(
baseUrl: 'https://api.g-tateth.com',
tenantDomain: 'your-domain',
),
customer: ChatCustomer(
firstName: currentUser.firstName,
lastName: currentUser.lastName,
email: currentUser.email,
),
),
),
);
}
}
Chat Widget Settings #
By default, GtatethChatWidget loads tenant widget settings from the backend and applies them automatically at runtime.
This means you can customize the mobile chat widget from your admin/settings panel without rebuilding the app.
Use ChatWidgetSettings to customize SDK chat UI behavior per tenant/app:
const settings = ChatWidgetSettings(
title: 'Support Chat',
emptyStateText: 'Welcome! How can we help?',
messageInputHintText: 'Type your question',
showConnectionIndicator: true,
showAgentNames: true,
showErrorBanner: true,
showTypingIndicator: true,
chatbotEnabled: true,
chatbotAssistantName: 'AI Assistant',
chatbotGreetingMessage: 'Hi, I am your AI assistant.',
chatbotShowsOnline: true,
offlineMessage: 'We are currently offline. Please leave a message.',
messageMaxWidth: 360,
composerMinLines: 1,
composerMaxLines: 6,
);
If you want to use only local hardcoded settings and skip server-driven customization:
GtatethChatWidget(
config: const WidgetClientConfig(
baseUrl: 'https://api.g-tateth.com',
tenantDomain: 'your-domain',
),
useTenantSettings: false,
settings: const ChatWidgetSettings(
title: 'Support Chat',
),
)
To let users/admins customize directly on mobile from the chat header, enable in-app customization:
GtatethChatWidget(
config: const WidgetClientConfig(
baseUrl: 'https://api.g-tateth.com',
tenantDomain: 'your-domain',
),
allowInAppCustomization: true,
persistInAppCustomization: true, // default true
onThemeChanged: (theme) {
// Optional: persist to storage/backend
},
onSettingsChanged: (settings) {
// Optional: persist to storage/backend
},
)
When enabled, the settings icon in the chat header opens a dedicated mobile Chat Widget Settings page where tenants can edit:
- Appearance: header/background/bubble/border/input colors
- Behavior: title, empty state, input hint, indicators, offline message, message width
- Chatbot: chatbot enable toggle, assistant name, greeting message, and chatbot online status
Behavior parity with web settings:
- If chatbot is enabled, greeting priority is
chatbot.greetingMessage, thenbehavior.greetingMessage. behavior.showTypingIndicatorcontrols typing events from composer input.availability.showAvailabilityStatuscontrols the connection dot visibility.chatbot.advanced.chatbotShowsOnlinecan keep the indicator online when chatbot is active.
Persistence behavior:
- In-app changes are now saved locally by default and restored after app restart/refresh.
- You can disable this with
persistInAppCustomization: false. - You can isolate saved settings per app/screen with
customizationStorageKey. - Load priority is: local widget defaults -> tenant settings (
useTenantSettings) -> local persisted customization.
Low-level API usage #
final client = WidgetClient(
config: const WidgetClientConfig(
baseUrl: 'https://api.g-tateth.com',
tenantId: 'YOUR_TENANT_ID',
),
);
final session = await client.initSession(sessionId: 'device-session-123');
final messages = await client.getMessages(
conversationId: session.conversationId,
bearerToken: session.token,
);
await client.sendMessage(
conversationId: session.conversationId,
text: 'Hello from Flutter',
bearerToken: session.token,
);
Realtime example #
final realtime = WidgetRealtimeClient(
RealtimeConfig(
baseUrl: 'https://api.g-tateth.com',
token: session.token,
conversationId: session.conversationId,
),
);
await realtime.connect();
realtime.messages.listen((message) {
debugPrint('new-message: ${message.text}');
});
Notes #
baseUrlshould point to your backend API host, for examplehttps://api.g-tateth.com.- If your backend identifies tenants by domain, provide
tenantDomain; otherwise usetenantId. - The SDK is designed to work with the existing widget backend endpoints in this repository.
customershould be the signed-in end user in the client app (not your support agent record).
Local Testing #
Use this SDK from your own Flutter app and point it to your local backend.
- Set:
baseUrlto your local API URLtenantDomain(ortenantId) to a valid tenant
- Run your app on emulator/device and verify:
- App loads chat UI
- Session initializes
- You can send a message
- Incoming agent/chatbot message appears in real-time