x_theme_provider 0.2.0
x_theme_provider: ^0.2.0 copied to clipboard
Effortless theme package with light, dark, and system modes. Customizable theme data, seamlessly integrated with MaterialApp and CupertinoApp.
Why ThemeProvider? #
- Seamless integration with MaterialApp and CupertinoApp.
- Effortless multi-theme management.
- Simplifies triggering theme changes.
- Full control with dark, light, system, next, previous, and toggle.
- Ability to persist selected theme.
Demo: Theme Provider.
Usage #
Wrap your XApp
with ThemeProvider
:
class YourApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ThemeProvider(
theme: YourMaterialAppTheme(), // Or DefaultMaterialAppTheme
builder: (theme) => MaterialApp(
title: title,
theme: theme,
home: YourHomePage(),
),
);
}
}
- ThemeProvider handles
darkTheme
andthemeMode
inMaterialApp
Changing Theme #
ThemeProvider.of(context).dark();
ThemeProvider.of(context).light();
ThemeProvider.of(context).system();
ThemeProvider.of(context).toggle();
ThemeProvider.of(context).next();
ThemeProvider.of(context).previous();
ThemeProvider.of(context).index = themeIndex;
Create Your Themes #
class YourMaterialAppTheme extends AppTheme<ThemeData> {
YourMaterialAppTheme() : super(light, dark);
final static ThemeData light = ThemeData(
useMaterial3: true,
brightness: Brightness.light,
colorSchemeSeed: Colors.purple,
);
final static ThemeData dark = ThemeData(
useMaterial3: true,
brightness: Brightness.dark,
colorSchemeSeed: Colors.purple,
);
}
CupertinoApp? #
Just use DefaultCupertinoTheme
or define yours.
class YourApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ThemeProvider(
theme: YorCupertinoAppTheme(),
builder: (theme) => CupertinoApp(
title: title,
theme: theme,
home: YourHomePage(),
),
);
}
}
Listen to the changes #
ThemeProvider.of(context).changeNotifier.addListener(() {
// do your thing, or
// persist state like pref.setX(key, ThemeProvider.of(context).jsonString)
});
Or react on UI:
ValueListenableBuilder(
valueListenable: ThemeProvider.of(context).changeNotifier,
...
);
More? #
// get current theme?
Theme.of(context);
// get current mode?
ThemeProvider.of(context).mode;
// get or set current theme index?
ThemeProvider.of(context).index;
// persistence ability?
ThemeProvider.of(context).jsonString;
ThemeProvider(
init: jsonString,
builder: ...
);
// multi-theme?
ThemeProvider(
themes: YourThemesList,
builder: ...
);
// and call next or previous to change theme.
Liked Cross Theme Provider? #
Show some love, support by starring the repository, or you can
Future #
- Download and install themes!