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();
}
}
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(),
),