Skip to content

Widgets to control your app theme mode during runtime and save it how you wishing.

License

Notifications You must be signed in to change notification settings

kmartins/app_theme_mode

Repository files navigation

App Theme Mode

pub License: MIT codecov

Widgets to control your app theme mode during runtime and save it how you wishing.

It's very similar to dynamic_theme_mode_package.

Why?

There is no business logic here, only widgets that control the theme mode, you choose how you want to save with SharedPreferences, Hive... any one.

Usage

dependencies:
  app_theme_mode:

Import it where you want to use it e.g, in your main file.

import 'package:app_theme_mode/app_theme_mode.dart';

Put the AppThemeMode widget, above MaterialApp/CupertinoApp or another that had theme mode.

AppThemeMode(
    builder: (context, themeMode) => MaterialApp(        
        title: 'Flutter Demo',
        themeMode: themeMode,
        darkTheme: ThemeData.dark(),
        theme: ThemeData.light(),
        home: const MyHomePage(
          title: 'Flutter Demo Home Page',
        ),
    ),
);

Set the initial theme mode:

AppThemeMode(
    initialThemeMode: ThemeMode.light // System mode is the default
    builder: (context, themeMode)...
);

Get the theme mode saved of your business logic. This is set only one time.

Add a callback for when a new different theme mode is set:

AppThemeMode(
    onChangeThemeMode: (themeMode) {
      // call your business logic to save 
      // the current theme mode here.
    },
    builder: (context, themeMode)...
);

Here you can call your logic business for the save current theme mode.

You can access the current theme mode:

final currentTheme = AppThemeMode.of(context).themeMode;

All the time that a new different theme mode is set the widget is rebuilt.

Or set a new theme mode:

AppThemeMode.of(context).setThemeMode(ThemeMode.dark);
// or
AppThemeMode.of(context).useDarkMode();

There is a dialog widget called AppThemeModeDialog for the user to choose which theme mode he wants

IconButton(
    icon: const Icon(Icons.access_time_sharp),
    onPressed: () => showDialog(
        context: context,
        builder: (_) => const AppThemeModeDialog(),
    ),
),

📝 Maintainers

Kauê Martins

🤝 Support

You liked this package? Then give it a ⭐️. If you want to help then:

  • Fork this repository
  • Send a Pull Request with new features
  • Share this package
  • Create issues if you find a bug or want to suggest a new extension

**Pull Request title follows Conventional Commits.

📝 License

Copyright © 2022 Kauê Martins.
This project is MIT licensed.

About

Widgets to control your app theme mode during runtime and save it how you wishing.

Resources

License

Stars

Watchers

Forks

Packages

No packages published