kindly_sdk 1.0.0
kindly_sdk: ^1.0.0 copied to clipboard
Kindly Chat SDK for Flutter - Customer support chat widget for iOS and Android applications.
example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:kindly_sdk/kindly.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Kindly SDK Example',
theme: ThemeData(
primarySwatch: Colors.blue,
useMaterial3: true,
),
home: const MyHomePage(title: 'Kindly SDK Example'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool _isInitialized = false;
bool _isLoading = false;
String _status = 'Not initialized';
@override
void initState() {
super.initState();
}
Future<void> _initializeSDK() async {
setState(() {
_isLoading = true;
_status = 'Initializing...';
});
try {
await KindlySDK.start(
botKey: 'aef0b638-2256-4f20-b2ac-7beaf89dedc6', // Updated bot key
authTokenCallback: () async {
// Simulate fetching auth token from your backend
await Future.delayed(const Duration(seconds: 1));
return 'your-jwt-token-here';
},
);
setState(() {
_isInitialized = true;
_status = 'SDK initialized successfully';
});
} catch (e) {
setState(() {
_status = 'Failed to initialize: $e';
});
} finally {
setState(() {
_isLoading = false;
});
}
}
Future<void> _displayChat() async {
if (!_isInitialized) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Please initialize SDK first')),
);
return;
}
try {
await KindlySDK.displayChat();
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Error displaying chat: $e')),
);
}
}
Future<void> _launchChatWithDialogue() async {
if (!_isInitialized) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Please initialize SDK first')),
);
return;
}
try {
await KindlySDK.launchChat(
triggerDialogueId: 'welcome_dialogue',
);
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Error launching chat: $e')),
);
}
}
Future<void> _setCustomTheme() async {
if (!_isInitialized) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Please initialize SDK first')),
);
return;
}
try {
await KindlySDK.setCustomTheme(
background: Colors.white,
botMessageBackground: Colors.blue.shade50,
botMessageText: Colors.black87,
userMessageBackground: Colors.blue,
userMessageText: Colors.white,
buttonBackground: Colors.blue,
buttonText: Colors.white,
navBarBackground: Colors.blue.shade700,
navBarText: Colors.white,
inputBackground: Colors.grey.shade100,
inputText: Colors.black87,
);
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Custom theme applied')),
);
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Error setting theme: $e')),
);
}
}
Future<void> _setContext() async {
if (!_isInitialized) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Please initialize SDK first')),
);
return;
}
try {
await KindlySDK.setNewContext({
'userId': '12345',
'userName': 'John Doe',
'email': 'john@example.com',
'accountType': 'premium',
});
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Context set successfully')),
);
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Error setting context: $e')),
);
}
}
Future<void> _enableVerboseLogging() async {
try {
await KindlySDK.setVerboseLogging(true);
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Verbose logging enabled')),
);
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Error enabling logging: $e')),
);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: Center(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Status: $_status',
style: Theme.of(context).textTheme.titleMedium,
),
const SizedBox(height: 24),
if (_isLoading)
const CircularProgressIndicator()
else ...[
ElevatedButton(
onPressed: !_isInitialized ? _initializeSDK : null,
child: const Text('Initialize SDK'),
),
const SizedBox(height: 16),
ElevatedButton(
onPressed: _isInitialized ? _displayChat : null,
child: const Text('Display Chat'),
),
const SizedBox(height: 16),
ElevatedButton(
onPressed: _isInitialized ? _launchChatWithDialogue : null,
child: const Text('Launch Chat with Dialogue'),
),
const SizedBox(height: 16),
ElevatedButton(
onPressed: _isInitialized ? _setCustomTheme : null,
child: const Text('Apply Custom Theme'),
),
const SizedBox(height: 16),
ElevatedButton(
onPressed: _isInitialized ? _setContext : null,
child: const Text('Set User Context'),
),
const SizedBox(height: 16),
ElevatedButton(
onPressed: _enableVerboseLogging,
child: const Text('Enable Verbose Logging'),
),
],
],
),
),
),
);
}
}