Skip to main content
RapidDev - Software Development Agency
flutterflow-tutorials

How to Create a Custom Icon for Your FlutterFlow App

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.

What you'll learn

  • How to use FlutterFlow's built-in Icon widget with Material and FontAwesome icons
  • How to upload and display SVG/PNG custom icons as Image assets
  • How to register a custom icon font via Custom Code with IconData
  • How to set your app launcher icon in FlutterFlow Settings
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Beginner6 min read10-15 minFlutterFlow Free+ (Custom icon fonts require Pro for Custom Code)March 2026RapidDev Engineering Team
TL;DR

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

1

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.

2

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.

3

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.

custom_icon_widget.dart
1import 'package:flutter/material.dart';
2
3class 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 });
12
13 final double? width;
14 final double? height;
15 final int codePoint;
16 final double? iconSize;
17 final Color? iconColor;
18
19 @override
20 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.

4

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.

5

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

custom_icon_widget.dart
1import 'package:flutter/material.dart';
2
3/// 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 });
15
16 final double? width;
17 final double? height;
18 final int codePoint;
19 final double? iconSize;
20 final Color? iconColor;
21 final String? fontFamily;
22
23 @override
24 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.

ChatGPT Prompt

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.

FlutterFlow Prompt

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.

RapidDev

Talk to an Expert

Our team has built 600+ apps. Get personalized help with your project.

Book a free consultation

Need help with your project?

Our experts have built 600+ apps and can accelerate your development. Book a free consultation — no strings attached.

Book a free consultation

We put the rapid in RapidDev

Need a dedicated strategic tech and growth partner? Discover what RapidDev can do for your business! Book a call with our team to schedule a free, no-obligation consultation. We'll discuss your project and provide a custom quote at no cost.