Skip to main content

Flutter Configuration

LovinaChatConfig​

The LovinaChatConfig class holds all configuration options for the chat widget.

final config = LovinaChatConfig(
websiteToken: 'your-website-token',
baseUrl: 'https://chat.ailovina.com',
locale: 'en',
colorScheme: 'auto',
user: null,
theme: null,
branding: null,
texts: null,
features: null,
displayMode: 'fullscreen',
);

Fields​

ParameterTypeDefaultRequiredDescription
websiteTokenString--YesYour Lovina website token for this agent. Obtained from the Lovina dashboard -- each agent has its own token.
baseUrlString--YesBase URL of your Lovina instance (e.g., https://chat.ailovina.com).
localeString'id'NoWidget locale code. Supported values include 'id', 'en', 'ar'.
colorSchemeString'auto'NoDark mode preference for the widget. Accepts 'light', 'dark', or 'auto' (follows system theme).
userLovinaChatUser?nullNoPre-identified user to associate with the conversation. See below.
identityLovinaChatIdentity?nullNoSigned identity proof (HMAC) verifying the session's user. See Identity Verification.
themeLovinaThemeConfig?nullNoTheme color, typography, and sizing overrides. Only primaryColor is required in practice -- see Theming.
brandingLovinaBrandingConfig?nullNoWhite-label branding overrides (logo, brand name, "powered by" footer).
textsMap<String, dynamic>?nullNoUI string overrides, keyed by translation key.
featuresLovinaFeatureFlags?nullNoFeature-flag overrides. See File Uploads.
displayModeString'fullscreen'NoWidget display mode. Accepts 'popup', 'sidebar', or 'fullscreen'.
hideKeyboardAccessoryBarbooltrueNoSuppress WebKit's keyboard form-assistant bar on iOS while the chat widget is visible. See iOS Keyboard Accessory Bar below.

Theming​

Only LovinaThemeConfig.primaryColor is required in practice -- every other color is auto-generated by the widget to meet WCAG AA contrast:

LovinaChatConfig(
websiteToken: 'your-website-token',
baseUrl: 'https://chat.ailovina.com',
theme: LovinaThemeConfig(
primaryColor: '#6366F1',
fontFamily: 'Inter, sans-serif',
bubbleRadius: 16,
),
branding: LovinaBrandingConfig(
brandName: 'Acme Support',
poweredBy: false,
),
);

Identity Verification (optional)​

identity proves a session belongs to a specific user with a server-signed HMAC:

final config = LovinaChatConfig(
websiteToken: 'YOUR_TOKEN',
baseUrl: 'https://chat.ailovina.com',
identity: LovinaChatIdentity(
userId: 'user-123',
exp: 1735689600,
sigHash: 'server-computed-hmac-hash',
),
);
OptionTypeDescription
modeStringIdentity mode. Always 'user' (the default).
userIdStringThe same user ID you pass as identifier in LovinaChatUser.
expintUnix timestamp (seconds) after which sigHash expires.
sigHashStringHMAC signature computed on your server -- never in the app.

See the User Identification guide for how to compute sigHash.

LovinaChatUser​

The LovinaChatUser class represents a pre-identified user.

ParameterTypeRequiredDescription
identifierStringYesUnique user ID in your system.
nameString?NoDisplay name.
emailString?NoEmail address.
avatarUrlString?NoAvatar image URL.
phoneNumberString?NoPhone number (E.164 format recommended).
customAttributesMap<String, dynamic>?NoArbitrary key-value metadata attached to the contact.

Event Types​

All events extend the ChatEvent base class.

Event ClassPropertiesDescription
ChatLoadedEventauthToken (String?)Widget finished loading.
MessageReceivedEventmessage (Map<String, dynamic>)New message received.
UnreadCountChangedEventcount (int)Unread count changed.
ChatClosedEventreason (String?)Chat was closed.
ChatErrorEventcode (String), message (String)An error occurred.

iOS Keyboard Accessory Bar​

hideKeyboardAccessoryBar (default true) suppresses WebKit's keyboard form-assistant bar (Previous/Next/Done) while the chat widget's WebView has focus.

Note: this suppresses the accessory bar for any WebView in your app while the chat is mounted, not just the chat's own. If your app has other WebViews (e.g. an in-app browser), set hideKeyboardAccessoryBar: false to avoid affecting them.

File Uploads​

File uploads are disabled by default. Enable the composer's attach button with:

LovinaChatConfig(
websiteToken: 'your-website-token',
baseUrl: 'https://chat.ailovina.com',
features: LovinaFeatureFlags(enableFileUpload: true),
)

Do a clean rebuild (flutter clean) after upgrading the SDK so the change takes effect.

On iOS, users can also tap "Take Photo or Video" from the file picker. Your app's ios/Runner/Info.plist must declare NSCameraUsageDescription and NSMicrophoneUsageDescription before enabling this — without them, tapping that option crashes the app.

Example: Full Configuration​

import 'package:lovina_chat_sdk/lovina_chat_sdk.dart';

final config = LovinaChatConfig(
websiteToken: 'lvk_live_xxxx',
baseUrl: 'https://chat.ailovina.com',
locale: 'en',
colorScheme: 'dark',
displayMode: 'fullscreen',
theme: LovinaThemeConfig(
primaryColor: '#6366F1',
),
branding: LovinaBrandingConfig(
brandName: 'Acme Support',
),
identity: LovinaChatIdentity(
userId: 'user-12345',
exp: 1735689600,
sigHash: 'server-computed-hmac-hash',
),
user: LovinaChatUser(
identifier: 'user-12345',
name: 'Jane Doe',
email: 'jane@example.com',
avatarUrl: 'https://example.com/avatar.png',
phoneNumber: '+6281234567890',
customAttributes: {
'plan': 'premium',
'signup_date': '2025-01-15',
},
),
);