A theme changing package for flutter created on provider package

Features

  • Provides a super simple way to provide theme for your flutter app.
  • Will save and apply your user's last theme they had set.
  • You can provide your own custom ThemeData

Getting started

Just install a package it gives you the ability to change theme on the fly.

Usage

Provide the ThemeProvider() class by a ChangeNotifierProvider to your MaterialApp

Usage: Just use theme: theme.getTheme() in your material app's theme parameter. () Don't forget to wrap material app with a Consumer<ThemeProvider>

to /example folder.

Example:

At your MaterialApp()

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        ChangeNotifierProvider(
            create: (context) =>
                ThemeProvider(defaultThemeName: "Light", themes: [
                  {"Light": ThemeData.light()},
                  {"Dark": ThemeData.dark()}
                ])),
      ],
      child: Consumer<ThemeProvider>(
        builder: (context, theme, child) => MaterialApp(
          home: ThemeChangeScreen(),
          theme: theme.getTheme(),
        ),
      ),
    );
  }
}

Where you want to provide theme changing option

        Consumer<ThemeProvider>(
          builder: (context, theme, child) => PopupMenuButton<dynamic>(
            offset: Offset(100, 0),
            child: ListTile(
              leading: const Icon(Icons.brush),
              title: const Text(
                "Theme",
                style: TextStyle(fontFamily: "Poppins"),
              ),
              subtitle: Text(
                "${theme.getThemeName()}",
                style: TextStyle(fontFamily: "Poppins"),
              ),
              trailing: Icon(Icons.edit),
            ),
            itemBuilder: (context) => theme.getThemeNames
                .map((item) => PopupMenuItem(
                      value: item,
                      child: Text(item),
                      onTap: () => theme.setTheme(item),
                    ))
                .toList(),
          ),
        ),

Parameters of ThemeProvider()

Example with all parameters

    ThemeProvider(defaultThemeName: "Light", themes: [
        {"Light": ThemeData.light()},
        {"Dark": ThemeData.dark()}
    ])),

Parameter's description

String defaultThemeName required named

themes: List<Map<String, ThemeData>> Provide your theme data in a list of map, where key is the Theme Name and value is the theme data. (This name is used to reffer the themes)

Additional information

If you want to contribute to the project please go to our github repo GitHub