Loading...
Loading...
Implements Syncfusion Flutter Chat (SfChat) and AI AssistView (SfAIAssistView) widgets for conversational interfaces in Flutter apps. Use when building chat UIs, AI chatbot interfaces, or messaging screens with support for message bubbles, composers, and action buttons. This skill covers conversation area customization, placeholder screens, theming, RTL support, and AI assistant integration.
npx skill4agent add syncfusion/flutter-ui-components-skills syncfusion-flutter-chat| Feature | SfChat | SfAIAssistView |
|---|---|---|
| Primary Purpose | Multi-user messaging | AI assistant interaction |
| Message Types | Incoming/Outgoing | Request/Response |
| User Identification | outgoingUser property | Author in each message |
| Suggestions | On any message | Only on response messages |
| Toolbar Items | ❌ Not supported | ✅ Response toolbar support |
| Loading Indicator | ❌ Not included | ✅ Response loading builder |
| Use Case | Chat apps, messaging | AI chatbots, assistants |
| Message Classes | ChatMessage | AssistMessage |
| Composer Classes | ChatComposer | AssistComposer |
| Action Button Classes | ChatActionButton | AssistActionButton |
import 'package:flutter/material.dart';
import 'package:syncfusion_flutter_chat/chat.dart';
class MyChat extends StatefulWidget {
State<MyChat> createState() => _MyChatState();
}
class _MyChatState extends State<MyChat> {
List<ChatMessage> _messages = <ChatMessage>[];
void initState() {
super.initState();
_messages = <ChatMessage>[
ChatMessage(
text: 'Hi! How can I help you today?',
time: DateTime.now(),
author: const ChatAuthor(
id: '123-001',
name: 'John Doe',
),
),
ChatMessage(
text: 'I need help with my order.',
time: DateTime.now(),
author: const ChatAuthor(
id: '123-002',
name: 'Jane Smith',
),
),
];
}
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Chat')),
body: SfChat(
messages: _messages,
outgoingUser: '123-002',
composer: const ChatComposer(
decoration: InputDecoration(
hintText: 'Type a message',
),
),
actionButton: ChatActionButton(
onPressed: (String newMessage) {
setState(() {
_messages.add(
ChatMessage(
text: newMessage,
time: DateTime.now(),
author: const ChatAuthor(
id: '123-002',
name: 'Jane Smith',
),
),
);
});
},
),
),
);
}
}import 'package:flutter/material.dart';
import 'package:syncfusion_flutter_chat/assist_view.dart';
class MyAIAssistView extends StatefulWidget {
State<MyAIAssistView> createState() => _MyAIAssistViewState();
}
class _MyAIAssistViewState extends State<MyAIAssistView> {
List<AssistMessage> _messages = <AssistMessage>[];
void _generateAIResponse(String userRequest) async {
// Call your AI service here
final String aiResponse = await _getAIResponse(userRequest);
setState(() {
_messages.add(
AssistMessage.response(
data: aiResponse,
time: DateTime.now(),
author: const AssistMessageAuthor(
id: 'ai-001',
name: 'AI Assistant',
),
),
);
});
}
Future<String> _getAIResponse(String request) async {
// Connect with your preferred AI service
// Example: OpenAI, Google AI, Azure AI, etc.
await Future.delayed(Duration(seconds: 2)); // Simulate API call
return 'This is a response to: $request';
}
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('AI Assistant')),
body: SfAIAssistView(
messages: _messages,
composer: const AssistComposer(
decoration: InputDecoration(
hintText: 'Ask me anything',
),
),
actionButton: AssistActionButton(
onPressed: (String userRequest) {
setState(() {
_messages.add(
AssistMessage.request(
data: userRequest,
time: DateTime.now(),
author: const AssistMessageAuthor(
id: 'user-001',
name: 'User',
),
),
);
_generateAIResponse(userRequest);
});
},
),
placeholderBuilder: (BuildContext context) {
return const Center(
child: Text(
'What can I help you with today?',
style: TextStyle(fontSize: 16),
),
);
},
),
);
}
}SfChat(
messages: <ChatMessage>[
ChatMessage(
text: 'Which programming language should I learn?',
time: DateTime.now(),
author: const ChatAuthor(id: '1', name: 'Alice'),
),
ChatMessage(
text: 'It depends on your goals. What interests you?',
time: DateTime.now(),
author: const ChatAuthor(id: '2', name: 'Bob'),
suggestions: <ChatMessageSuggestion>[
const ChatMessageSuggestion(data: 'Web Development'),
const ChatMessageSuggestion(data: 'Mobile Apps'),
const ChatMessageSuggestion(data: 'Data Science'),
const ChatMessageSuggestion(data: 'Game Development'),
],
),
],
outgoingUser: '1',
)void _generateResponse(String request) async {
final String response = await _getAIResponse(request);
setState(() {
_messages.add(
AssistMessage.response(
data: response,
time: DateTime.now(),
author: const AssistMessageAuthor(id: 'ai', name: 'AI'),
toolbarItems: <AssistMessageToolbarItem>[
const AssistMessageToolbarItem(
content: Icon(Icons.thumb_up_outlined),
tooltip: 'Like',
),
const AssistMessageToolbarItem(
content: Icon(Icons.thumb_down_outlined),
tooltip: 'Dislike',
),
const AssistMessageToolbarItem(
content: Icon(Icons.copy),
tooltip: 'Copy',
),
const AssistMessageToolbarItem(
content: Icon(Icons.restart_alt),
tooltip: 'Regenerate',
),
],
),
);
});
}
SfAIAssistView(
messages: _messages,
onToolbarItemSelected: (bool selected, int messageIndex,
AssistMessageToolbarItem item, int toolbarItemIndex) {
// Handle toolbar action (like, dislike, copy, etc.)
print('Toolbar item selected at index $toolbarItemIndex');
},
)messagesoutgoingUsercomposeractionButtonplaceholderBuilderincomingMessageSettingsoutgoingMessageSettingsmessageHeaderBuildermessageFooterBuildermessageContentBuildermessageAvatarBuildermessagescomposeractionButtonplaceholderBuilderrequestMessageSettingsresponseMessageSettingsmessageHeaderBuildermessageFooterBuildermessageContentBuildermessageAvatarBuilderresponseLoadingBuilderonToolbarItemSelectedonSuggestionItemSelectedtexttimeauthorsuggestionsdatatimeauthorsuggestionstoolbarItemsminLinesmaxLinesdecorationmargintextStylebuilderchildonPressedtooltipforegroundColorbackgroundColorfocusColorhoverColorsplashColorelevationfocusElevationhoverElevationhighlightElevationmouseCursorshapemarginsizeshowAuthorNameshowTimestampshowAuthorAvatartimestampFormatbackgroundColortextStyleheaderTextStyleshapewidthFactoravatarSizemarginpaddingavatarPaddingheaderPaddingfooterPadding