v1.0.0 · MIT 0 runtime dependencies float64 parity

Morph any Flutter icon
into any other.

Animate Lucide, Tabler, Heroicons or any stroke icon set. Optimal rotation solved in closed form, spring physics, zero dependencies.

flutter pub add morphicons_flutter
studio.morphicons — flutter · single frame · auto-morph slow → normal

menu → x

rotation θ
scale σ
residual
block hybrid
t = 0.000

Quick pairs

tap to preview

Animation set

0 icons

Choose two or more icons to make a sequence. Auto-morph cycles slowly.

loading
Select an icon

Every icon auto-morphs on load (slow). Toggle to normal. Click to build a sequence.

spring
stroke
2.0
170
26

Frame is one scroll label: playground · converter · code · info live inside. D hidden. Square 6px · dark minimal.

Flutter-native · IconData · filled

Morph Icons.home into any other IconData.

Morph any IconData with the same MorphIcon widget and solver used for path strings. Filled and stroked icons share one ticker and morph seamlessly — pass an IconData or a String d to the same widget.

home → favorite · filled

Filled silhouettes morph with the same Procrustes + polar solver. Rapid clicks re-sample the interpolated polyline — no jumps.

IconData · dart
import 'package:flutter/material.dart';
import 'package:morphicons_flutter/morphicons_flutter.dart';

// Uncontrolled — swap IconData, spring animates
MorphIcon(
  icon: isHome ? Icons.home : Icons.favorite,
  spring: SpringPreset.snappy,
  size: 48,
)

// ALSO works: same widget, String d
MorphIcon(
  icon: isHome ? MorphIconsLucide.house : MorphIconsLucide.heart,
)

// Mixed — IconData ↔ String d
MorphIcon(
  icon: isHome ? Icons.home : MorphIconsLucide.x,
)

// Controlled — scrub progress yourself
MorphIcon.controlled(
  from: Icons.home,
  icon: Icons.settings,
  progress: t,
)

// Typed factories — static safety
MorphIcon.font(icon: Icons.home)
MorphIcon.svg(icon: MorphIconsLucide.house)
MorphIcon.controlledFont(from: Icons.home, icon: Icons.settings, progress: t)

// Imperative
final key = GlobalKey<MorphIconState>();
MorphIcon(key: key, icon: Icons.home);
key.currentState?.morphTo(Icons.favorite);

flutter — live IconData

open full ↗

Flutter iframe above uses the real morphicons_flutter package compiled to web (same MorphIcon(icon: Icons.home) call).

Curated resolver table — lib/src/icon_data_resolver.dart

home 0xe318 · favorite 0xe25b · star 0xe5f9 · search 0xe567 · settings 0xe57f · menu 0xe3dc · close 0xe16a · check 0xe156

Add entries via tool/generate_font_map.dart-style codegen (TTF → Map<IconData,String>) — see report §5. Runtime stays sync.