crow_flutter package adds Crow to any Flutter app. Use CrowWidget for a floating chat button that overlays your existing app, drop in CrowChatView for a full-screen chat experience, or use CrowChatNotifier directly to build a fully custom interface.
Installation
Quick Start
Floating widget (recommended)
AddCrowWidget inside a Stack to get a floating chat button that slides up a chat sheet — zero extra UI work:
CrowWidget in MaterialApp.builder means it automatically appears on every page and route in your app — no need to add it to each screen individually. Tapping the button slides up a chat sheet at 85% screen height.
Full-screen chat
Wrap your app withCrowScope and drop in CrowChatView as the full body:
CrowChatView includes message bubbles, streaming, conversation history, suggested actions, and a “Powered by Crow” footer — no additional setup required.
CrowScope Props
CrowScope is an InheritedWidget that provides the client and state down the widget tree.
| Prop | Required | Description |
|---|---|---|
productId | Yes | Your product ID from the dashboard |
apiUrl | No | API URL (defaults to https://api.usecrow.org) |
model | No | Override the default model |
identityToken | No | JWT token for authenticated users |
storage | No | Custom storage adapter. Defaults to SharedPreferences |
CrowWidget Props
| Prop | Required | Description |
|---|---|---|
theme | No | CrowTheme instance to customize the chat sheet appearance |
CrowChatView Props
| Prop | Required | Description |
|---|---|---|
theme | No | CrowTheme instance to customize appearance |
Theming
Customize colors and styles viaCrowTheme:
Theme Properties
| Property | Description |
|---|---|
backgroundColor | Chat background color |
userBubbleColor | User message bubble background |
userBubbleTextColor | User message text color |
assistantBubbleColor | Assistant bubble background |
assistantBubbleTextColor | Assistant message text color |
sendButtonColor | Send button color |
bubbleBorderRadius | Corner radius for message bubbles |
inputBorderColor | Input bar border color |
inputBorderLoadingColor | Input border color while streaming |
poweredByColor | ”Powered by Crow” text color |
headerBorderColor | Bottom border of the header |
messageTextStyle | Full TextStyle override for message text |
inputDecoration | Full InputDecoration override for the text field |
Custom UI (Headless)
AccessCrowChatNotifier directly via CrowScope.chatOf(context) to build your own UI:
CrowChatState
| Property | Type | Description |
|---|---|---|
messages | List<Message> | All messages in the current conversation |
isLoading | bool | Agent is currently streaming a response |
suggestedActions | List<SuggestedAction> | Quick reply suggestions from the agent |
isIdentified | bool | A token has been set for this user |
isVerified | bool | Server confirmed the user’s identity |
CrowChatNotifier Methods
| Method | Description |
|---|---|
sendMessage(String) | Send a message and stream the response |
stop() | Cancel the current streaming response |
clear() | Clear messages and start a new conversation |
identify(IdentifyOptions) | Set a user identity token |
resetUser() | Log out the current user |
Message Type
User Identity
Identify users to enable conversation history and personalized responses:Client-Side Tools
Register tools that run natively in your Flutter app:Platform Support
| Platform | Support |
|---|---|
| iOS | ✅ |
| Android | ✅ |
| macOS | ✅ |
| Web | ✅ |
iOS / macOS
No additional configuration needed. For macOS apps, add the outbound networking entitlement — required for all network calls, including production:Differences from Other SDKs
Web (@usecrow/ui) | React Native | Flutter | |
|---|---|---|---|
| Language | TypeScript | TypeScript | Dart |
| Drop-in UI | <CrowWidget /> | <CrowWidget /> | CrowWidget |
| State | useChat() hook | useChat() hook | CrowChatNotifier |
| Storage | localStorage | AsyncStorage adapter | SharedPreferences (built-in) |
| Provider | <CrowProvider> | <CrowProvider> | CrowScope |
