Skip to content

Commit

Permalink
Add toggle in settings page for Appearance
Browse files Browse the repository at this point in the history
  • Loading branch information
AlaaElattar committed Oct 2, 2024
1 parent de2be2c commit 9635046
Show file tree
Hide file tree
Showing 6 changed files with 155 additions and 16 deletions.
12 changes: 9 additions & 3 deletions app/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ PODS:
- qr_code_scanner (0.2.0):
- Flutter
- MTBBarcodeScanner
- screen_brightness_ios (0.1.0):
- Flutter
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
Expand Down Expand Up @@ -56,6 +58,7 @@ DEPENDENCIES:
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
- qr_code_scanner (from `.symlinks/plugins/qr_code_scanner/ios`)
- screen_brightness_ios (from `.symlinks/plugins/screen_brightness_ios/ios`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
- shuftipro_onsite_sdk (from `.symlinks/plugins/shuftipro_onsite_sdk/ios`)
- smart_auth (from `.symlinks/plugins/smart_auth/ios`)
Expand Down Expand Up @@ -91,6 +94,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/permission_handler_apple/ios"
qr_code_scanner:
:path: ".symlinks/plugins/qr_code_scanner/ios"
screen_brightness_ios:
:path: ".symlinks/plugins/screen_brightness_ios/ios"
shared_preferences_foundation:
:path: ".symlinks/plugins/shared_preferences_foundation/darwin"
shuftipro_onsite_sdk:
Expand All @@ -116,16 +121,17 @@ SPEC CHECKSUMS:
open_filex: 6e26e659846ec990262224a12ef1c528bb4edbe4
OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c
package_info_plus: 115f4ad11e0698c8c1c5d8a689390df880f47e85
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c
permission_handler_apple: e76247795d700c14ea09e3a2d8855d41ee80a2e6
qr_code_scanner: bb67d64904c3b9658ada8c402e8b4d406d5d796e
shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
screen_brightness_ios: 7437207a2a9bc56553aa10f782afecf830b4c4e2
shared_preferences_foundation: b4c3b4cddf1c21f02770737f147a3f5da9d39695
ShuftiPro-Onsite: 45989f1626cc7bb7d150954e6d4a3f0cc8a86db9
shuftipro_onsite_sdk: 1e6ca562c98e8dfb7b8e56940d4d00cb5416d7af
smart_auth: 4bedbc118723912d0e45a07e8ab34039c19e04f2
sodium_libs: 0486eb2c3172ce494406367d4b379042444b769d
uni_links: d97da20c7701486ba192624d99bffaaffcfc298a
url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
url_launcher_ios: bbd758c6e7f9fd7b5b1d4cde34d2b95fcce5e812
webview_flutter_wkwebview: 2a23822e9039b7b1bc52e5add778e5d89ad488d1

PODFILE CHECKSUM: 2262097366c615de59b03ca3bf748d7aaad51773
Expand Down
34 changes: 28 additions & 6 deletions app/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import 'package:threebotlogin/helpers/globals.dart';
import 'package:threebotlogin/screens/splash_screen.dart';
import 'package:threebotlogin/services/shared_preference_service.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:threebotlogin/widgets/theme_provider.dart';
import 'package:threebotlogin/widgets/wizard/terms_agreement.dart';

extension ColorSchemeExtension on ColorScheme {
Expand Down Expand Up @@ -39,9 +40,17 @@ Future<void> main() async {
await setGlobalValues();

bool registered = doubleName != null;
runApp(ChangeNotifierProvider(
create: ((context) => TermsAgreement()),
child: MyApp(initDone: initDone, registered: registered)));
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(
create: (context) => ThemeProvider()), // Theme provider
ChangeNotifierProvider(
create: (context) => TermsAgreement()), // Terms agreement provider
],
child: MyApp(initDone: initDone, registered: registered),
),
);
}

Future<void> setGlobalValues() async {
Expand All @@ -55,7 +64,7 @@ Future<void> setGlobalValues() async {
(identity['signedIdentityNameIdentifier'] != null);
}

class MyApp extends StatelessWidget {
class MyApp extends StatefulWidget {
const MyApp({
super.key,
required this.initDone,
Expand All @@ -67,8 +76,20 @@ class MyApp extends StatelessWidget {
final String? doubleName;
final bool registered;

@override
State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
}

@override
Widget build(BuildContext context) {
final themeProvider = Provider.of<ThemeProvider>(context);

var kColorScheme = ColorScheme.fromSeed(
brightness: Brightness.light,
seedColor: const Color.fromARGB(255, 26, 161, 143),
Expand Down Expand Up @@ -134,8 +155,9 @@ class MyApp extends StatelessWidget {
unselectedItemColor: kDarkColorScheme.secondary,
),
),
themeMode: ThemeMode.system,
home: SplashScreen(initDone: initDone, registered: registered),
themeMode: themeProvider.themeMode,
home: SplashScreen(
initDone: widget.initDone, registered: widget.registered),
);
}
}
65 changes: 65 additions & 0 deletions app/lib/screens/preference_screen.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:provider/provider.dart';
import 'package:threebotlogin/app_config.dart';
import 'package:threebotlogin/apps/free_flow_pages/ffp_events.dart';
import 'package:threebotlogin/events/close_socket_event.dart';
Expand All @@ -15,6 +16,7 @@ import 'package:threebotlogin/services/fingerprint_service.dart';
import 'package:threebotlogin/services/shared_preference_service.dart';
import 'package:threebotlogin/widgets/custom_dialog.dart';
import 'package:threebotlogin/widgets/layout_drawer.dart';
import 'package:threebotlogin/widgets/theme_provider.dart';
import 'package:url_launcher/url_launcher.dart';

class PreferenceScreen extends StatefulWidget {
Expand Down Expand Up @@ -74,6 +76,8 @@ class _PreferenceScreenState extends State<PreferenceScreen> {

@override
Widget build(BuildContext context) {
final themeProvider = Provider.of<ThemeProvider>(context);
final isDarkMode = themeProvider.themeMode == ThemeMode.dark;
return LayoutDrawer(
titleText: 'Settings',
content: ListView(
Expand Down Expand Up @@ -146,6 +150,67 @@ class _PreferenceScreenState extends State<PreferenceScreen> {
_changePincode();
},
),
ListTile(
leading: const Icon(Icons.lightbulb),
title: const Text('Appearance'),
trailing: GestureDetector(
onTap: () {
themeProvider.toggleTheme();
},
child: Container(
width: 40,
height: 20,
decoration: BoxDecoration(
color: isDarkMode
? Colors.black
: Theme.of(context).colorScheme.primary,
borderRadius: BorderRadius.circular(10),
boxShadow: const [
BoxShadow(
color: Colors.black26,
blurRadius: 4,
offset: Offset(2, 2),
),
],
),
child: Stack(
children: [
AnimatedPositioned(
duration: const Duration(milliseconds: 300),
left: isDarkMode ? 15 : 0,
child: Container(
width: 20,
height: 20,
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colors.black26,
blurRadius: 4,
offset: Offset(2, 2),
),
],
),
child: Center(
child: Icon(
isDarkMode
? Icons
.nightlight_round
: Icons.wb_sunny,
color: isDarkMode
? Colors.black
: Theme.of(context).colorScheme.primary,
size: 14,
),
),
),
),
],
),
),
),
),
ListTile(
leading: const Icon(Icons.perm_device_information),
title: Text('Version: $version - $buildNumber'),
Expand Down
13 changes: 13 additions & 0 deletions app/lib/services/shared_preference_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -540,3 +540,16 @@ Future<void> setPKidMigrationIssueSolved(bool isFixed) async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setBool('isPkidMigrationIssueSolved', isFixed);
}

Future<void> setTheme(String theme) async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.remove('theme');

prefs.setString('theme', theme);
}

Future<String?> getTheme() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();

return prefs.getString('theme');
}
29 changes: 29 additions & 0 deletions app/lib/widgets/theme_provider.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import 'package:flutter/material.dart';
import 'package:threebotlogin/services/shared_preference_service.dart';

class ThemeProvider with ChangeNotifier {
ThemeMode _themeMode = ThemeMode.system;

ThemeMode get themeMode => _themeMode;

ThemeProvider() {
_loadTheme();
}

void toggleTheme() {
_themeMode =
_themeMode == ThemeMode.dark ? ThemeMode.light : ThemeMode.dark;
_saveTheme();
notifyListeners();
}

Future<void> _saveTheme() async {
await setTheme(_themeMode == ThemeMode.dark ? 'dark' : 'light');
}

Future<void> _loadTheme() async {
String? theme = await getTheme();
_themeMode = theme == 'dark' ? ThemeMode.dark : ThemeMode.light;
notifyListeners();
}
}
18 changes: 11 additions & 7 deletions app/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -476,9 +476,11 @@ packages:
gridproxy_client:
dependency: "direct main"
description:
path: "../../../codescalers/tfgrid-sdk-dart/packages/gridproxy_client"
relative: true
source: path
path: "packages/gridproxy_client"
ref: tfchain_graphql_hotfix
resolved-ref: "314f46728e43cb86f430cda6ba756d4be3fb6e07"
url: "https://github.com/codescalers/tfgrid-sdk-dart"
source: git
version: "1.0.0"
hashlib:
dependency: transitive
Expand Down Expand Up @@ -1330,9 +1332,11 @@ packages:
tfchain_client:
dependency: "direct main"
description:
path: "../../../codescalers/tfgrid-sdk-dart/packages/tfchain_client"
relative: true
source: path
path: "packages/tfchain_client"
ref: tfchain_graphql_hotfix
resolved-ref: "314f46728e43cb86f430cda6ba756d4be3fb6e07"
url: "https://github.com/codescalers/tfgrid-sdk-dart"
source: git
version: "0.1.0"
timing:
dependency: transitive
Expand Down Expand Up @@ -1640,4 +1644,4 @@ packages:
version: "1.1.4+10"
sdks:
dart: ">=3.2.3 <4.0.0"
flutter: ">=3.16.0"
flutter: ">=3.16.6"

0 comments on commit 9635046

Please sign in to comment.