Skip to content

Commit

Permalink
change theme and persisting theme
Browse files Browse the repository at this point in the history
  • Loading branch information
abi-raj committed Sep 16, 2021
1 parent 33a5b56 commit 0007134
Show file tree
Hide file tree
Showing 4 changed files with 95 additions and 11 deletions.
32 changes: 22 additions & 10 deletions lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,20 +1,32 @@
import 'package:flutter/material.dart';

import 'package:light_dark_theme_flutter/models/ThemeNotifier.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'screens/Home.dart';

void main() {
runApp(MainWidget());
void main() async {
WidgetsFlutterBinding
.ensureInitialized(); //required to use platform channels to call native code.
SharedPreferences prefs = await SharedPreferences.getInstance();
bool themeBool = prefs.getBool("isDark") ?? false; //null check
runApp(
ChangeNotifierProvider(
create: (BuildContext context) => ThemeProvider(isDark: themeBool),
child: MainWidget(),
),
);
}

class MainWidget extends StatelessWidget {
const MainWidget({Key? key}) : super(key: key);

@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Theme',
home: HomeScreen(),
routes: {},
);
return Consumer<ThemeProvider>(builder: (context, themeProvider, child) {
return MaterialApp(
title: 'Flutter Theme',
home: HomeScreen(),
theme: themeProvider.getTheme,
routes: {},
);
});
}
}
27 changes: 27 additions & 0 deletions lib/models/ThemeNotifier.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import 'package:flutter/material.dart';
import '/themes/Themes.dart';
import 'package:shared_preferences/shared_preferences.dart';

class ThemeProvider extends ChangeNotifier {
late ThemeData _selectedTheme;
late SharedPreferences prefs;
ThemeProvider({bool isDark: false}) {
this._selectedTheme = isDark ? darkTheme : lightTheme;
}

ThemeData get getTheme => _selectedTheme;

Future<void> changeTheme() async {
prefs = await SharedPreferences.getInstance();

if (_selectedTheme == darkTheme) {
_selectedTheme = lightTheme;
await prefs.setBool("isDark", false);
} else {
_selectedTheme = darkTheme;
await prefs.setBool("isDark", true);
}

notifyListeners();
}
}
17 changes: 16 additions & 1 deletion lib/screens/Home.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import 'package:flutter/material.dart';
import 'package:light_dark_theme_flutter/models/ThemeNotifier.dart';
import 'package:provider/provider.dart';

class HomeScreen extends StatefulWidget {
const HomeScreen({Key? key}) : super(key: key);
Expand All @@ -12,7 +14,20 @@ class _HomeScreenState extends State<HomeScreen> {
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Text("Hello World!"),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("Hello World!"),
IconButton(
onPressed: () {
ThemeProvider themeProvider =
Provider.of<ThemeProvider>(context, listen: false);
themeProvider.changeTheme();
},
icon: Icon(Icons.brightness_4_outlined),
),
],
),
),
);
}
Expand Down
30 changes: 30 additions & 0 deletions lib/themes/Themes.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import 'package:flutter/material.dart';

//LightTheme
ThemeData lightTheme = ThemeData(
brightness: Brightness.light,
primaryColor: Colors.white,
textTheme: lightTextTheme,
);

TextStyle lightTextStyle = TextStyle(
fontSize: 20,
color: Colors.black,
);
TextTheme lightTextTheme = TextTheme(
bodyText1: lightTextStyle,
);

//DarkTheme
ThemeData darkTheme = ThemeData(
brightness: Brightness.dark,
primaryColor: Colors.black,
);

TextStyle darkTextStyle = TextStyle(
fontSize: 20,
color: Colors.white,
);
TextTheme darkTextTheme = TextTheme(
bodyText1: lightTextStyle,
);

0 comments on commit 0007134

Please sign in to comment.