FlutterFlow supports three approaches for custom icons: the built-in Icon widget with Material and FontAwesome libraries, uploaded SVG or PNG assets displayed via the Image widget, and custom icon fonts registered through Custom Code using IconData and a TTF file. This tutorial covers all three methods plus configuring your app launcher icon.
Adding Custom Icons to Your FlutterFlow App
Icons are essential for navigation, buttons, and visual communication in any app. FlutterFlow gives you access to thousands of Material and FontAwesome icons out of the box, but you may need branded or custom icons. This tutorial walks through all three methods for using icons and shows you how to configure your app launcher icon.
Prerequisites
- A FlutterFlow project open in the builder
- Custom icon files in SVG or PNG format (if using custom assets)
- A TTF icon font file from FlutterIcon.com or IcoMoon (if using custom font method)
- FlutterFlow Pro plan for Custom Code icon font method
Step-by-step guide
Use the built-in Icon widget from the widget palette
Use the built-in Icon widget from the widget palette
Open the Widget Palette and drag an Icon widget onto your canvas. In the Properties Panel on the right, click the icon picker field. Browse Material Icons or FontAwesome by scrolling through categories, or type a keyword like 'home' or 'settings' in the search bar. Select the icon you want. Set the size (default 24) and color (choose a Theme Color for consistency). The Icon widget renders as a vector graphic that stays crisp at any size.
Expected result: The selected icon appears on your canvas at the specified size and color.
Upload a custom SVG or PNG icon as a project asset
Upload a custom SVG or PNG icon as a project asset
In the left Navigation Menu, go to Assets. Click the upload button and select your SVG or PNG file. Once uploaded, drag an Image widget onto your page. In the Properties Panel, set Image Source to Asset and pick the uploaded file. Set width and height to control the display size. For SVG files, FlutterFlow renders them as vectors. For PNG files, upload at 2x or 3x resolution for Retina screens.
Expected result: Your custom icon image displays at the specified dimensions on the page.
Register a custom icon font using Custom Code
Register a custom icon font using Custom Code
Generate a TTF icon font from FlutterIcon.com or IcoMoon — upload your SVG icons and download the font package. In FlutterFlow, go to Custom Code and add the TTF file to your project assets via Pubspec Dependencies (add it under fonts). Create a Custom Widget that uses the Icon widget with IconData: Icon(IconData(0xe900, fontFamily: 'MyIcons'), size: 24, color: Colors.blue). Each icon in the font has a unique hex code point provided by the font generator.
1import 'package:flutter/material.dart';23class CustomIconWidget extends StatelessWidget {4 const CustomIconWidget({5 super.key,6 this.width,7 this.height,8 required this.codePoint,9 this.iconSize,10 this.iconColor,11 });1213 final double? width;14 final double? height;15 final int codePoint;16 final double? iconSize;17 final Color? iconColor;1819 @override20 Widget build(BuildContext context) {21 return SizedBox(22 width: width,23 height: height,24 child: Center(25 child: Icon(26 IconData(codePoint, fontFamily: 'MyIcons'),27 size: iconSize ?? 24,28 color: iconColor ?? Colors.black,29 ),30 ),31 );32 }33}Expected result: Your custom icon font renders correctly via the IconData code point reference.
Set your app launcher icon in project Settings
Set your app launcher icon in project Settings
Go to Settings in the left Navigation Menu, then click General. Scroll to the App Icon section. Upload a 1024x1024 pixel PNG image with no transparency (Apple requires opaque backgrounds). FlutterFlow automatically generates all required sizes for iOS and Android from this single image. The icon appears on the home screen after installing the app.
Expected result: Your custom app icon shows in the Settings preview and will appear on devices after building.
Apply icon color and size from your Theme for consistency
Apply icon color and size from your Theme for consistency
Select any Icon widget on your canvas. In the Properties Panel, click the color picker and switch to the Theme Color tab. Choose a semantic color like Primary or Secondary so icons update automatically when you change your theme. For size, use consistent values across your app: 20 for inline icons, 24 for standard, 32 for feature icons. Create a reusable Component if you use the same icon styling repeatedly.
Expected result: Icons use Theme colors and update globally when the theme changes.
Complete working example
1import 'package:flutter/material.dart';23/// A Custom Widget for rendering icons from a custom TTF icon font.4/// Upload your TTF file via Pubspec and reference icons by code point.5class CustomIconWidget extends StatelessWidget {6 const CustomIconWidget({7 super.key,8 this.width,9 this.height,10 required this.codePoint,11 this.iconSize,12 this.iconColor,13 this.fontFamily,14 });1516 final double? width;17 final double? height;18 final int codePoint;19 final double? iconSize;20 final Color? iconColor;21 final String? fontFamily;2223 @override24 Widget build(BuildContext context) {25 return SizedBox(26 width: width ?? 48,27 height: height ?? 48,28 child: Center(29 child: Icon(30 IconData(31 codePoint,32 fontFamily: fontFamily ?? 'MyIcons',33 ),34 size: iconSize ?? 24,35 color: iconColor ?? Theme.of(context).iconTheme.color,36 ),37 ),38 );39 }40}Common mistakes when creating a Custom Icon for Your FlutterFlow App
Why it's a problem: Uploading large PNG icons instead of SVG format
How to avoid: Use SVG files for custom icons or the built-in Icon widget which renders as vector. If you must use PNG, upload at 3x resolution (e.g., 144x144 for a 48px display size).
Why it's a problem: Hardcoding icon colors instead of using Theme references
How to avoid: Always pick colors from the Theme Color tab in the color picker so icon colors update globally with your theme.
Why it's a problem: Using the wrong code point for custom icon font glyphs
How to avoid: Check the code point mapping file from your font generator (FlutterIcon.com provides a Dart class with constants). Use the exact hex values like 0xe900, 0xe901, etc.
Best practices
- Use the built-in Icon widget with Material or FontAwesome for standard icons — no upload needed
- Upload SVG files instead of PNG for custom icons to ensure crisp rendering at all screen densities
- Set icon colors from Theme Colors, not hardcoded hex values, for global consistency
- Keep a consistent icon size system: 20px inline, 24px standard, 32px feature, 48px hero
- Use a single TTF icon font file for branded icon sets instead of individual SVG asset uploads
- Design app launcher icons at 1024x1024 with content centered in the inner 80%
- Wrap frequently used icon configurations in a reusable Component to avoid duplication
Still stuck?
Copy one of these prompts to get a personalized, step-by-step explanation.
I need to add custom icons to my FlutterFlow app. Explain three methods: using the built-in Icon widget, uploading SVG/PNG assets, and creating a custom icon font with a TTF file and IconData in Dart. Include a Custom Widget code example for the font method.
Add an Icon widget to my page. Set the icon to a settings gear, size 28, color from my primary theme color.
Frequently asked questions
How many built-in icons are available in FlutterFlow?
FlutterFlow includes the full Material Icons library (over 2,000 icons) and FontAwesome icons. You can search by name in the icon picker.
Can I use animated icons in FlutterFlow?
The built-in Icon widget is static. For animated icons, use a Lottie animation file displayed via the LottieAnimation widget, or create a Custom Widget with Flutter's AnimatedIcon class.
What size should my app launcher icon be?
Upload a 1024x1024 pixel PNG with no transparency. FlutterFlow generates all platform-specific sizes automatically.
Do custom icon fonts work on web builds?
Yes. TTF icon fonts work on iOS, Android, and web. The font file is bundled into the build output for all platforms.
Can I change icon color dynamically based on state?
Yes. Bind the Icon widget's color property to a Page State variable or use Conditional Styling to change color based on conditions like selected/unselected state.
Can RapidDev help create a branded icon system for my app?
Yes. RapidDev can design a complete icon system, generate a custom TTF font, and integrate it throughout your FlutterFlow project for consistent branding.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation