๐ฆ app_theme_kit
A reusable Material 3 theme package for Flutter apps with customizable color schemes, text styles, subthemes, and spacing constants.
Quickly set up consistent colors, typography, spacing, and component themes across your Flutter applications.
โจ Features
- ๐จ Customizable color system via
AppColors - ๐ Light & Dark themes (developer-defined colors)
- ๐ค Custom TextTheme using Google Fonts (Quicksand)
- ๐ Design tokens: spacing, radius, elevation
- ๐ Subthemes included:
- AppBarTheme
- CardTheme
- TabBarTheme
- NavigationBarTheme
- BottomAppBarTheme
- ๐งฑ Material 3 support
- ๐งช Example app included (with Light/Dark switch toggle)
๐ Installation
Add to your pubspec.yaml:
dependencies:
app_theme_kit: ^0.0.9+1
Then run:
flutter pub get
๐ Usage
Import the package:
import 'package:app_theme_kit/app_theme_kit.dart';
๐จ Define Your Own Colors
You are not forced to use static colors from the package.
Define your brand colors and inject them into the theme.
final lightColors = AppColors(
primary: Colors.teal,
secondary: Colors.orange,
background: Colors.white,
surface: Colors.grey.shade50,
error: Colors.redAccent,
);
final darkColors = AppColors(
primary: Colors.teal.shade200,
secondary: Colors.orange.shade200,
background: const Color(0xFF121212),
surface: const Color(0xFF1E1E1E),
error: Colors.red.shade300,
);
๐งฑ Apply Theme to Your App
MaterialApp(
title: 'My App',
theme: AppTheme.light(colors: lightColors),
darkTheme: AppTheme.dark(colors: darkColors),
themeMode: ThemeMode.system,
home: const HomePage(),
);
๐ Light / Dark Toggle (Example App)
The example app demonstrates switching themes using a Switch widget:
Switch(
value: isDarkMode,
onChanged: (value) => isDarkModeNotifier.value = value,
);
This keeps theme control inside the application, not inside the package.
๐ค Typography Showcase
Text("Display Large", style: Theme.of(context).textTheme.displayLarge),
Text("Title Medium", style: Theme.of(context).textTheme.titleMedium),
Text("Body Medium", style: Theme.of(context).textTheme.bodyMedium),
โ All text styles use GoogleFonts.quicksand by default.
๐งฉ Subthemes
- Cards
Card(
child: Padding(
padding: const EdgeInsets.all(AppSpacing.md),
child: Text("Styled by AppCardTheme"),
),
);
- TabBar
DefaultTabController(
length: 2,
child: Scaffold(
appBar: AppBar(
bottom: const TabBar(
tabs: [Tab(text: "One"), Tab(text: "Two")],
),
),
),
);
- NavigationBar
NavigationBar(
selectedIndex: 0,
destinations: const [
NavigationDestination(icon: Icon(Icons.home), label: "Home"),
NavigationDestination(icon: Icon(Icons.settings), label: "Settings"),
],
);
- BottomAppBar
Scaffold(
bottomNavigationBar: BottomAppBar(
child: Padding(
padding: const EdgeInsets.all(AppSpacing.md),
child: Text(
"This BottomAppBar uses AppBottomAppBarTheme",
textAlign: TextAlign.center,
),
),
),
);
๐ Design Tokens (Spacing & Radius)
Padding(
padding: const EdgeInsets.all(AppSpacing.md),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(AppSpacing.radiusMd),
color: AppColors.cardBg,
),
child: const Text("Consistent spacing & radius"),
),
);
โ
Use AppSpacing for padding, margins, radius, and elevation to keep your UI consistent.
๐ฒ Example App
An example app is included in the /example folder.
Run it with:
cd example
flutter run
It demonstrates:
- Light/Dark themes
- Typography styles
- Cards, TabBar, NavigationBar, BottomAppBar
- Spacing tokens in action
๐ท Screenshots
Typography

Home

Settings

Dark mode

๐ค Contributing
Contributions are welcome!
- Open issues for bugs/features
- Submit PRs with improvements
- Share ideas in Discussions
๐ License
This project is licensed under the MIT License.
See LICENSE for details.