A fully-typed Dart/Flutter wrapper for the DiceBear API (v9.x) that generates unique avatar profile pictures with extensive customization options.
DiceBear is an avatar library for designers and developers. Generate random, deterministic avatar profile pictures from seeds, supporting 30+ unique art styles with fine-grained style-specific customization.
- π Explore DiceBear on GitHub
- π¨ See all avatar styles and licenses
- π» Check out the DiceBear API docs
β¨ Full Type Safety β Every style option is a dedicated Dart class with compile-time validation
π― 30+ Avatar Styles β Support for all DiceBear styles including Adventurer, Avataaars, PixelArt, and more
π§ Style-Specific Customization β Each style has its own set of customization options (eyes, mouth, accessories, etc.)
π¦ Flexible Output β Get SVG URLs, rendered Flutter widgets, or raw SVG bytes
π² Deterministic & Random β Generate consistent avatars from a seed or random ones each time
Add to your pubspec.yaml:
dependencies:
dice_bear: ^1.0.0Then run flutter pub get.
import 'package:dice_bear/dice_bear.dart';
// Create a simple avatar
final avatar = DiceBearBuilder(
seed: 'john_doe', // Deterministic: same seed = same avatar
sprite: DiceBearSprite.adventurer,
).build();
// Render as Flutter widget
Widget widget = avatar.toImage(width: 200, height: 200);
// Get the SVG URL
Uri svgUrl = avatar.svgUri;
// Get raw SVG bytes
Uint8List? svgBytes = await avatar.asRawSvgBytes();// Generate a new random avatar each time
final avatar = DiceBearBuilder.withRandomSeed().build();Each DiceBear style has its own options class for fine-grained control:
// Adventurer style with custom eye and mouth options
final avatar = DiceBearBuilder(
seed: 'user123',
sprite: DiceBearSprite.adventurer,
styleOptions: DiceBearAdventurerOptions(
eyes: ['variant01', 'variant05'],
mouth: ['variant10'],
glasses: ['variant02'],
glassesProbability: 50, // 50% chance of glasses
),
).build();final avatar = DiceBearBuilder(
seed: 'pixel_user',
sprite: DiceBearSprite.pixelArt,
styleOptions: DiceBearPixelArtOptions(
accessories: ['variant01', 'variant02'],
beard: ['variant03'],
clothingColor: ['ff5733', 'fbf5e6'],
eyesColor: ['647b90'],
),
).build();| Parameter | Type | Example | Notes |
|---|---|---|---|
backgroundColor |
Color? |
Color(0xFF3ECAF5) |
Applied to SVG background |
radius |
int |
10 |
Border radius (0-20) |
scale |
int |
100 |
Scale factor (0-200) |
rotate |
int |
45 |
Rotation in degrees (0-360) |
flip |
bool |
true |
Flip horizontally |
translateX, translateY |
int |
10, -5 |
Translation offsets (-100 to 100) |
size |
int |
256 |
SVG size in pixels |
- Adventurer / Adventurer Neutral β D&D-inspired characters
- Avataaars / Avataaars Neutral β Cartoonish avatars
- Big Ears / Big Ears Neutral β Quirky big-eared characters
- Big Smile β Always happy expressions
- Bottts / Bottts Neutral β Robot-like avatars
- Croodles / Croodles Neutral β Minimalist faces
- Fun Emoji β Expressive emoji style
- Lorelei / Lorelei Neutral β Artistic character design
- Micah β Stylized character portraits
- Miniavs β Tiny avatar style
- Personas β Professional-looking character avatars
- Pixel Art / Pixel Art Neutral β 8-bit style avatars
- Thumbs β Thumbs-up styled avatars
- Toon Head β Cartoon character avatars
- Dylan β Gradient-based geometric design
- Glass β Glassy geometric patterns
- Icons β Icon-based avatars
- Identicon β Hash-based geometric avatars
- Initials β Two-letter initials display
- Notionists / Notionists Neutral β Notion-inspired design
- Open Peeps β Open-source character art
- Rings β Concentric ring patterns
- Shapes β Geometric shape arrangements
When calling .toImage(), you can pass additional Flutter parameters:
widget = avatar.toImage(
width: 200,
height: 200,
fit: BoxFit.contain,
alignment: Alignment.center,
placeholderBuilder: (context) => CircularProgressIndicator(),
semanticsLabel: 'User avatar for John Doe',
);| Parameter | Type | Default |
|---|---|---|
width |
double? |
β |
height |
double? |
β |
fit |
BoxFit |
BoxFit.contain |
alignment |
Alignment |
Alignment.center |
placeholderBuilder |
WidgetBuilder? |
β |
color |
Color? |
β |
semanticsLabel |
String? |
β |
clipBehavior |
Clip |
Clip.hardEdge |
theme |
SvgTheme? |
β |
The library maintains a clean, semantically organized structure:
lib/
βββ dice_bear.dart (main entry point)
βββ src/
βββ style_options/
βββ character_style_options.dart (abstract base)
βββ adventurer_options.dart
βββ avataaars_options.dart
βββ big_ears_options.dart
βββ big_smile_options.dart
βββ bottts_options.dart
βββ pixel_art_options.dart
βββ persons_options.dart
βββ rings_options.dart
βββ shapes_options.dart
βββ ... (30 style option classes total)
- Abstract Base Class:
DiceBearCharacterStyleOptionsfor humanoid styles witheyesandmouthfields - Standalone Implementations: Geometric and abstract styles directly implement
DiceBearStyleOptions - Validation: Each style class validates its options before sending to the API
- Composability: Mix and match styles with global and style-specific options
Requires Dart SDK >= 2.17.0 (supports super parameters syntax for cleaner inheritance)
class UserAvatar extends StatelessWidget {
final String userId;
final double size;
const UserAvatar({
required this.userId,
this.size = 100,
});
@override
Widget build(BuildContext context) {
final avatar = DiceBearBuilder(
seed: userId,
sprite: DiceBearSprite.avataaars,
backgroundColor: Colors.blue.shade100,
).build();
return avatar.toImage(width: size, height: size);
}
}ListView.builder(
itemCount: 10,
itemBuilder: (context, index) {
final avatar = DiceBearBuilder.withRandomSeed().build();
return avatar.toImage(width: 100, height: 100);
},
)The package includes comprehensive unit tests covering all style options and API interactions.
flutter testThis package is licensed under the MIT License. See LICENSE for details.
Contributions are welcome! Please feel free to submit a pull request to the repository.
Found an issue? Have a feature request? Open an issue on GitHub.