From 6646955726e7b6d3beaa29f244b320178e743c66 Mon Sep 17 00:00:00 2001 From: MooN <56061215+MgKyawLay@users.noreply.github.com> Date: Sun, 15 Feb 2026 01:11:20 +0630 Subject: [PATCH] setting screen added --- lib/main.dart | 24 ++++++- lib/presentation/home/home_screen.dart | 7 +- .../settings/settings_screen.dart | 65 +++++++++++++++++++ .../settings/theme_mode_provider.dart | 6 ++ 4 files changed, 99 insertions(+), 3 deletions(-) create mode 100644 lib/presentation/settings/settings_screen.dart create mode 100644 lib/presentation/settings/theme_mode_provider.dart diff --git a/lib/main.dart b/lib/main.dart index 7c2504e..d6b0cd3 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,5 +1,6 @@ import 'package:e_receipt_mobile/core/theme/app_colors.dart'; import 'package:e_receipt_mobile/presentation/login/login_page.dart'; +import 'package:e_receipt_mobile/presentation/settings/theme_mode_provider.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -21,14 +22,17 @@ void main() { runApp(const ProviderScope(child: EReceiptApp())); } -class EReceiptApp extends StatelessWidget { +class EReceiptApp extends ConsumerWidget { const EReceiptApp({super.key}); @override - Widget build(BuildContext context) { + Widget build(BuildContext context, WidgetRef ref) { + final themeMode = ref.watch(appThemeModeProvider); + return MaterialApp( title: 'E-Receipt', debugShowCheckedModeBanner: false, + themeMode: themeMode, theme: ThemeData( colorScheme: ColorScheme.fromSeed( seedColor: AppColors.primary, @@ -45,6 +49,22 @@ class EReceiptApp extends StatelessWidget { ), useMaterial3: true, ), + darkTheme: ThemeData( + colorScheme: ColorScheme.fromSeed( + seedColor: AppColors.primary, + brightness: Brightness.dark, + ), + appBarTheme: const AppBarTheme( + backgroundColor: AppColors.primary, + foregroundColor: Colors.white, + systemOverlayStyle: SystemUiOverlayStyle( + statusBarColor: AppColors.primary, + statusBarIconBrightness: Brightness.light, + statusBarBrightness: Brightness.dark, + ), + ), + useMaterial3: true, + ), home: const LoginPage(), ); } diff --git a/lib/presentation/home/home_screen.dart b/lib/presentation/home/home_screen.dart index bc8d12a..848da0d 100644 --- a/lib/presentation/home/home_screen.dart +++ b/lib/presentation/home/home_screen.dart @@ -3,6 +3,7 @@ import 'package:e_receipt_mobile/domain/entities/login_user.dart'; import 'package:e_receipt_mobile/presentation/auth/session_controller.dart'; import 'package:e_receipt_mobile/presentation/home/home_view_model.dart'; import 'package:e_receipt_mobile/presentation/login/login_page.dart'; +import 'package:e_receipt_mobile/presentation/settings/settings_screen.dart'; import 'package:e_receipt_mobile/presentation/terminal/terminal_selection_screen.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -92,7 +93,11 @@ class HomeScreen extends ConsumerWidget { ), onTap: () { Navigator.of(context).pop(); - _showComingSoon(context, 'Settings'); + Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => const SettingsScreen(), + ), + ); }, ), ListTile( diff --git a/lib/presentation/settings/settings_screen.dart b/lib/presentation/settings/settings_screen.dart new file mode 100644 index 0000000..5c7ac81 --- /dev/null +++ b/lib/presentation/settings/settings_screen.dart @@ -0,0 +1,65 @@ +import 'package:e_receipt_mobile/presentation/settings/theme_mode_provider.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +class SettingsScreen extends ConsumerWidget { + const SettingsScreen({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final selectedMode = ref.watch(appThemeModeProvider); + + return Scaffold( + appBar: AppBar( + title: const Text('Settings'), + centerTitle: true, + ), + body: ListView( + padding: const EdgeInsets.all(16), + children: [ + Text( + 'Theme', + style: Theme.of(context).textTheme.titleLarge, + ), + const SizedBox(height: 8), + Card( + child: Column( + children: [ + RadioListTile( + title: const Text('Light'), + value: ThemeMode.light, + groupValue: selectedMode, + onChanged: (value) { + if (value != null) { + ref.read(appThemeModeProvider.notifier).state = value; + } + }, + ), + RadioListTile( + title: const Text('Dark'), + value: ThemeMode.dark, + groupValue: selectedMode, + onChanged: (value) { + if (value != null) { + ref.read(appThemeModeProvider.notifier).state = value; + } + }, + ), + RadioListTile( + title: const Text('System'), + value: ThemeMode.system, + groupValue: selectedMode, + onChanged: (value) { + if (value != null) { + ref.read(appThemeModeProvider.notifier).state = value; + } + }, + ), + ], + ), + ), + ], + ), + ); + } +} diff --git a/lib/presentation/settings/theme_mode_provider.dart b/lib/presentation/settings/theme_mode_provider.dart new file mode 100644 index 0000000..040c546 --- /dev/null +++ b/lib/presentation/settings/theme_mode_provider.dart @@ -0,0 +1,6 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +final appThemeModeProvider = StateProvider((ref) { + return ThemeMode.system; +});