GitPedia

Animated theme switcher

Flutter animated theme switcher

From kherel·Updated April 29, 2026·View on GitHub·

This library starts from [Peyman's](https://stackoverflow.com/users/4910935/peyman) stackoverflow question [how-to-add-animation-for-theme-switching-in-flutter](https://stackoverflow.com/questions/60897816/how-to-add-animation-for-theme-switching-in-flutter) The project is written primarily in Dart, distributed under the MIT License license, first published in 2020. Key topics include: flutter, flutter-animation, theme.

animated_theme_switcher

Pub

Animated theme switcher.

This library starts from Peyman's stackoverflow question how-to-add-animation-for-theme-switching-in-flutter

demo

Getting started

Add animated_theme_switcher: "^2.0.8" in your pubspec.yaml dependencies.

yaml
dependencies: animated_theme_switcher: "^2.0.8"

How To Use

Import the following package in your dart file

dart
import 'package:animated_theme_switcher/animated_theme_switcher.dart';

Wrap MaterialApp with ThemeProvider widget, as it has shown in the following example:

dart
ThemeProvider( initTheme: initTheme, builder: (context, myTheme) { return MaterialApp( title: 'Flutter Demo', theme: myTheme, home: MyHomePage(), ); }), ),

But if all you want is to provide a theme, use as follows:

dart
ThemeProvider( initTheme: initTheme, child: SomeCoolPage(), ),

Wrap the screen where you whant to make them switch with ThemeSwitchingArea widget, as it has shown in the following example:

dart
ThemeSwitchingArea( child: Builder(builder: (context) { return ..., }, );

Wrap every switcher with ThemeSwitcher builder, and use ThemeSwitcher.of(context).changeTheme function to switch themes;

dart
ThemeData newTheme = ThemeData( primaryColor: Colors.amber ); ... ThemeSwitcher( builder: (context) { ... onTap: () => ThemeSwitcher.of(context).changeTheme( theme: newTheme, isReversed: false // default: false ); ... }, );

Alternatively you could use ThemeSwitcher.switcher() or ThemeSwitcher.withTheme().
Builders of this constructors already provide you ThemeSwitcher.
ThemeSwitcher.withTheme() also provides current theme:

dart
ThemeSwitcher.switcher( builder: (context, switcher) { ... onTap: () => switcher.changeTheme( theme: newTheme, ); ... }, ); ThemeSwitcher.withTheme( builder: (context, switcher, theme) { ... onTap: () => switcher.changeTheme( theme: theme.brightness == Brightness.light ? darkTheme : lightTheme, ); ... }, );

Use optional named parameter clipper to pass the custom clippers.

dart
... ThemeSwitcher( clipper: ThemeSwitcherBoxClipper(), builder: (context) { ... }, );

Notes:

  1. This package is not intended to persist selected theme on the local device. But we added special example to show how to do it using shared_preferences package.

  2. Use the CanvasKit rendering engine to use it on web, more about it..

Contributors

Showing top 12 contributors by commit count.

View all contributors on GitHub →

This article is auto-generated from kherel/animated_theme_switcher via the GitHub API.Last fetched: 6/27/2026