Feature voting board for Flutter apps.
Let your users vote on what to build next. Collect feedback, prioritize your roadmap, ship what matters.
dependencies:
userorient_flutter: <latest-version>import 'package:userorient_flutter/userorient_flutter.dart';
void main() {
UserOrient.configure(apiKey: 'YOUR_API_KEY');
runApp(MyApp());
}Get your API key from the UserOrient dashboard.
UserOrient.openBoard(context);That's it โ two lines of setup, one to launch.
Identify the current user so votes persist across sessions. Call setUser before opening the board.
UserOrient.setUser(
uniqueIdentifier: '123456',
fullName: 'Kamran Bekirov',
email: 'kamran@userorient.com',
);All fields are optional. Pass whatever you have:
| Field | Description |
|---|---|
uniqueIdentifier |
Your internal user ID |
fullName |
Display name |
email |
Email address |
phoneNumber |
Phone number |
isPaying |
Whether this is a paying customer (learn more) |
extra |
Any additional key-value data |
If uniqueIdentifier is omitted, UserOrient generates one automatically.
UserOrient.setLanguage(Language.en);Supported: az de en es fr it tr ru ar uk zh
You can also parse a locale string:
UserOrient.setLanguage(Language.fromCode('en-US')); // Language.enFalls back to Language.en for unsupported codes.
UserOrient.setTheme(
light: UserOrientColors(
backgroundColor: Colors.white,
accentColor: Colors.blue,
),
dark: UserOrientColors(
backgroundColor: Color(0xff1D1D1D),
accentColor: Colors.blue,
),
);| Property | Description |
|---|---|
backgroundColor |
Board background color |
accentColor |
Buttons, active tabs, voted state (text color adjusts automatically) |
Font family is inherited from your app's ThemeData.
Control what data the SDK collects when a user submits feedback:
UserOrient.setDataCollection(DataCollection(
email: CollectionMode.required,
metadata: CollectionMode.optional,
));| Mode | Email behavior | Metadata behavior |
|---|---|---|
required |
User must enter an email before submitting | Always collected |
optional |
User can skip the email step (default) | Collected if available (default) |
notCollected |
Email step is skipped entirely | Not collected |
Metadata includes device info (model, OS version) and app info (version, build number).
Mark paying customers so you can filter their votes in the dashboard:
UserOrient.setUser(
uniqueIdentifier: '123456',
isPaying: true,
);Clear cached data when a user logs out:
await UserOrient.clearCache();- Email: kamran@userorient.com
- Twitter: @userorient
