Dynamic Theme Change Based On System's Dark & Light Mode

Issue

I have been working on dynamic dark and light mode feature in flutter.

I want to change the app’s theme as dark theme or light theme when i am changing the mobile system’s dark/light mode from system settings.

But, I’m not able to change the app’s dark or light mode based on Mobile System’s light or dark mode.

I’m using the following code.

main.dart

    import 'package:flutter/material.dart';
    import 'package:flutterrookieapp/provider/ThemeProvider.dart';
    import 'package:flutterrookieapp/utils/AppTheme.dart';
    import 'package:provider/provider.dart';

    void main() => runApp(MyApp());

    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MultiProvider(
          providers: [
            ChangeNotifierProvider(
              create: (context) => ThemeProvider(
                  MediaQuery.of(context).platformBrightness == Brightness.dark
                      ? darkTheme
                      : lightTheme),
            )
          ],
          child: Consumer<ThemeProvider>(
            builder: (temp, theme, _) {
              return MaterialApp(
                debugShowCheckedModeBanner: false,
                title: 'Flutter Sample',
                theme: MediaQuery.platformBrightnessOf(context) == Brightness.dark
                    ? darkTheme
                    : lightTheme,
                home: HomePage(),
              );
            },
          ),
        );
      }
    }
  }

ThemeProvider.dart

import 'package:flutter/material.dart';

class ThemeProvider with ChangeNotifier {
  ThemeData _themeData;

  ThemeProvider(this._themeData);

  ThemeData getTheme() => _themeData;

  setTheme(ThemeData themeData) async {
    this._themeData = themeData;
    notifyListeners();
  }
}

Solution

you can use in the MaterialApp the darkTheme or theme
it’s always from the mobile system setting

MaterialApp(
  debugShowCheckedModeBanner: false,
  title: 'Flutter Sample',
  darkTheme: darkTheme,
  theme: lightTheme,
  home: HomePage(),
),

Answered By – FloW

Answer Checked By – Jay B. (FlutterFixes Admin)

Leave a Reply

Your email address will not be published. Required fields are marked *