From dfd569a068a71fadb30e0152b2437ced9b9a6fbb Mon Sep 17 00:00:00 2001 From: venbaittech Date: Wed, 19 Mar 2025 18:31:22 +0530 Subject: [PATCH] bug fix --- android/app/build.gradle | 4 +- android/app/src/main/AndroidManifest.xml | 6 +- ios/Runner/Info.plist | 4 + lib/config/sessionCheckScreen.dart | 95 +++++++++++++++++-- .../UAE_Numbers/uae_numbers.dart | 2 +- .../Screens/charts/widgets/chart_widget.dart | 43 ++++++++- .../Drawer Items/edit_profile.dart | 5 + .../Drawer Items/manage_users.dart | 2 +- .../notification/notification.dart | 3 +- public/.well-known/assetlinks.json | 2 +- pubspec.yaml | 2 +- 11 files changed, 146 insertions(+), 22 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 613e27b1..73ce6d94 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -20,12 +20,12 @@ if (project.hasProperty('google-services.json')) { def flutterVersionCode = localProperties.getProperty("flutter.versionCode") if (flutterVersionCode == null) { - flutterVersionCode = "39" + flutterVersionCode = "40" } def flutterVersionName = localProperties.getProperty("flutter.versionName") if (flutterVersionName == null) { - flutterVersionName = "1.0.38" + flutterVersionName = "1.0.39" } def keystorePropertiesFile = rootProject.file("key.properties") diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index ee29d442..7c97326e 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -33,8 +33,10 @@ - - + diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 0954646c..dcc28aec 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -63,6 +63,10 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight + FirebaseDynamicLinksCustomDomains + + https://fcsc-a161c.web.app + UIStatusBarHidden diff --git a/lib/config/sessionCheckScreen.dart b/lib/config/sessionCheckScreen.dart index 77d757fa..777aae4c 100644 --- a/lib/config/sessionCheckScreen.dart +++ b/lib/config/sessionCheckScreen.dart @@ -1,34 +1,84 @@ import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; +import 'package:pocketbase/pocketbase.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:uae_stat/config/api_config.dart'; import 'package:uae_stat/infrastructure/data/p_auth_repo.dart'; import 'package:uae_stat/domain/entities/session_entity.dart'; +import 'package:uae_stat/presentation/components/indicators/locale_provider.dart'; import 'package:url_launcher/url_launcher.dart'; -class SessionCheckScreen extends StatefulWidget { +class SessionCheckScreen extends ConsumerStatefulWidget { @override _SessionCheckScreenState createState() => _SessionCheckScreenState(); } -class _SessionCheckScreenState extends State { +class _SessionCheckScreenState extends ConsumerState { + final pb = PocketBase(apiUrl); final PAuthRepo _authRepo = PAuthRepo(); + dynamic preferredLanguage; + bool _isLoading = true; - String get playStoreUrl => "https://play.google.com/store/apps/details?id=ae.gov.fcsc.frontend"; + String get playStoreUrl => + "https://play.google.com/store/apps/details?id=ae.gov.fcsc.frontend"; @override void initState() { super.initState(); - WidgetsBinding.instance.addPostFrameCallback((_) { + WidgetsBinding.instance.addPostFrameCallback((_) async { + await userDetails(); _checkSession(); }); } + Future userDetails() async { + try { + final prefs = await SharedPreferences.getInstance(); + final userId = prefs.getString('userId'); + + // Authenticate admin d + final adminAuth = await pb.admins.authWithPassword( + 'pb@venbainfotech.com', + 'pb@venbainfotech.com', + ); + final String adminToken = adminAuth.token; + print('adminToken: $adminToken'); + + // Fetch user details + final userDetailsResponse = await pb.collection('users').getOne( + userId!, + headers: { + 'Authorization': 'Bearer $adminToken', + }, + ); + + print('userDetailsLogin: $userDetailsResponse'); + + preferredLanguage = userDetailsResponse.data['language'] ?? ''; + + print('preferredLanguage login $preferredLanguage'); + + // **Set Default Locale in Provider** + if (preferredLanguage == 'ar') { + ref.read(localeProvider.notifier).setLocale(const Locale('ar')); + } else { + ref.read(localeProvider.notifier).setLocale(const Locale('en')); + } + } catch (e) { + print('Error fetching user details: $e'); + rethrow; + } + } + Future _checkSession() async { await Future.delayed(Duration(seconds: 2)); // Optional splash delay final SessionEntity? session = await _authRepo.fetchLocallyStored(); final GoRouterState state = GoRouterState.of(context); - final String? intendedPath = state.uri.toString().isNotEmpty && state.uri.path != '/' - ? state.uri.path - : null; + final String? intendedPath = + state.uri.toString().isNotEmpty && state.uri.path != '/' + ? state.uri.path + : null; print('fetchLocallyStored $session'); print('navigating to intended path: $intendedPath'); @@ -53,7 +103,9 @@ class _SessionCheckScreenState extends State { // User is not logged in, redirect to login with intended path if present print('session expired, redirecting to login'); if (mounted) { - context.go('/login', extra: intendedPath != null ? {'intendedPath': intendedPath} : null); + context.go('/login', + extra: + intendedPath != null ? {'intendedPath': intendedPath} : null); } } } else { @@ -63,6 +115,9 @@ class _SessionCheckScreenState extends State { _redirectToPlayStore(); } } + setState(() { + _isLoading = false; // Stop showing splash + }); } Future _redirectToPlayStore() async { @@ -75,10 +130,30 @@ class _SessionCheckScreenState extends State { @override Widget build(BuildContext context) { - return SizedBox.shrink(); + return _isLoading + ? SplashScreen() // Show splash while loading + : SizedBox.shrink(); } } +class SplashScreen extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.white, + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image.asset('assets/images/logo.png', width: 150), // App Logo + // SizedBox(height: 20), + // CircularProgressIndicator(), // Loading indicator + ], + ), + ), + ); + } +} // import 'dart:math'; // @@ -296,4 +371,4 @@ class _SessionCheckScreenState extends State { // // ), // // ); // // } -// // } \ No newline at end of file +// // } diff --git a/lib/presentation/Screens/Bottom Navigation Pages/UAE_Numbers/uae_numbers.dart b/lib/presentation/Screens/Bottom Navigation Pages/UAE_Numbers/uae_numbers.dart index 87fccb2b..8438fb8b 100644 --- a/lib/presentation/Screens/Bottom Navigation Pages/UAE_Numbers/uae_numbers.dart +++ b/lib/presentation/Screens/Bottom Navigation Pages/UAE_Numbers/uae_numbers.dart @@ -262,7 +262,7 @@ class _UaenumberWidgetState extends ConsumerState { // ), border: InputBorder.none, contentPadding: - EdgeInsets.symmetric(vertical: 0.5, horizontal: 18.0), + EdgeInsets.symmetric(vertical: 9, horizontal: 18.0), ), ), ), diff --git a/lib/presentation/Screens/charts/widgets/chart_widget.dart b/lib/presentation/Screens/charts/widgets/chart_widget.dart index aa3275ce..5baa6805 100644 --- a/lib/presentation/Screens/charts/widgets/chart_widget.dart +++ b/lib/presentation/Screens/charts/widgets/chart_widget.dart @@ -47,6 +47,29 @@ class ChartWidget extends StatelessWidget { ], }; + final Map> colorMapForFour = { + "ECONOMY": [ + Color(0xFF648CBA), + Color(0xFF90B0D5), + Color(0xFF98BCE5), + Color(0xFFA7B5C5), + Color(0xFFBED3EC), + ], + "SOCIAL": [ + Color(0xFFD9BB99), + Color(0xFF87766E), + Color(0xFFC6A885), + Color(0xFFA28565), + Color(0xFFBFB29B), + ], + "ENVIRONMENT": [ + Color(0xFF376C79), + Color(0xFF578D9C), + Color(0xFF7DAFBC), + Color(0xFF86C7D9), + ], + }; + final Map> colorMapForThree = { "ECONOMY": [ Color(0xFF648CBA), @@ -116,6 +139,17 @@ class ChartWidget extends StatelessWidget { return colorMapForThree[key] ?? [Colors.grey]; } + List get uniqueColorsForFour { + final Map translations = { + 'اقتصاد': 'ECONOMY', + 'اجتماعي': 'SOCIAL', + 'بيئة': 'ENVIRONMENT', + }; + + String key = translations[chartHeader] ?? chartHeader; + return colorMapForFour[key] ?? [Colors.grey]; + } + String capitalizeAndSplit(String input) { return input .split('_') @@ -1009,6 +1043,7 @@ class ChartWidget extends StatelessWidget { titlesData: titlesData1(uniqueXValuesProcessed), borderData: borderData(), lineBarsData: lineBars, + // minY: 10000, // minX: uniqueXValues.reduce((a, b) => a < b ? a : b), // maxX: uniqueXValues.reduce((a, b) => a > b ? a : b), // minX: uniqueXValuesProcessed.reduce((a, b) => a < b ? a : b), @@ -2391,7 +2426,7 @@ class ChartWidget extends StatelessWidget { width: 120, child: Text( title, - textAlign: TextAlign.end, + textAlign: TextAlign.right, style: const TextStyle(fontSize: 12), softWrap: true, maxLines: 2, @@ -2979,7 +3014,7 @@ class ChartWidget extends StatelessWidget { // print("Bottomtiles"); // print(value); return Padding( - padding: const EdgeInsets.only(top: 4, left: 20.0), + padding: const EdgeInsets.only(top: 10, left: 20.0), child: SizedBox( width: 40, child: Transform.rotate( @@ -3320,6 +3355,10 @@ class ChartWidget extends StatelessWidget { barColor = uniqueColorsForThree[colorIndex % uniqueColorsForThree.length]; colorIndex++; + } else if (chartData['dataset'] == 'oil_and_gas') { + barColor = + uniqueColorsForFour[colorIndex % uniqueColorsForFour.length]; + colorIndex++; } else { barColor = uniqueColors[colorIndex % uniqueColors.length]; colorIndex++; diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/edit_profile.dart b/lib/presentation/routes/drawer_routes/Drawer Items/edit_profile.dart index e856dbb9..b694110f 100644 --- a/lib/presentation/routes/drawer_routes/Drawer Items/edit_profile.dart +++ b/lib/presentation/routes/drawer_routes/Drawer Items/edit_profile.dart @@ -491,6 +491,11 @@ class _EditProfileState extends ConsumerState { ref.listen(localeProvider, (previous, next) async { final localeCode = next?.languageCode ?? 'en'; // Default to 'en' if null await _userService.updateLanguage(localeCode); + setState(() { + isLoader = true; + }); + + await _fetchUserData(); }); return PopScope( diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/manage_users.dart b/lib/presentation/routes/drawer_routes/Drawer Items/manage_users.dart index bd6505d0..1be79d0e 100644 --- a/lib/presentation/routes/drawer_routes/Drawer Items/manage_users.dart +++ b/lib/presentation/routes/drawer_routes/Drawer Items/manage_users.dart @@ -416,7 +416,7 @@ class _ManageUserRouterState extends ConsumerState { // ), border: InputBorder.none, contentPadding: EdgeInsets.symmetric( - vertical: 0.5, horizontal: 18.0), + vertical: 9, horizontal: 18.0), ), onChanged: filterUsers, ), diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/notification/notification.dart b/lib/presentation/routes/drawer_routes/Drawer Items/notification/notification.dart index 682e17f8..99d280aa 100644 --- a/lib/presentation/routes/drawer_routes/Drawer Items/notification/notification.dart +++ b/lib/presentation/routes/drawer_routes/Drawer Items/notification/notification.dart @@ -109,11 +109,10 @@ class _NotificationPageState extends ConsumerState { jsonDecode(response.body); // Decode JSON if (jsonResponse['message'] == 'Success') { - setState(() async { + setState(() { notifications = List>.from( jsonResponse['data']); // Assign decoded data print('notifications $notifications'); - await Future.delayed(Duration(seconds: 5)); isLoading = false; }); } else { diff --git a/public/.well-known/assetlinks.json b/public/.well-known/assetlinks.json index af8eb41b..ee5c2795 100644 --- a/public/.well-known/assetlinks.json +++ b/public/.well-known/assetlinks.json @@ -5,7 +5,7 @@ "namespace": "android_app", "package_name": "ae.gov.fcsc.frontend", "sha256_cert_fingerprints": [ - "3D:BB:9E:B6:3E:80:50:6F:52:EB:73:B8:AD:F9:5F:5A:0A:05:BE:E4:CA:D1:AF:F7:26:2C:56:3F:35:1D:4E:81" + "E0:B4:6F:B9:8B:96:66:5B:EC:14:98:53:07:01:D4:DF:39:24:E8:1F:CD:A2:9E:E4:77:66:E0:B4:5B:C2:E0:94" ] } } diff --git a/pubspec.yaml b/pubspec.yaml index 97db1e92..1144a2f6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: uae_stat description: "View statistics about the UAE from the Federal Center for Statistics and Competitiveness." publish_to: "none" -version: 1.0.38+39 +version: 1.0.39+40 environment: sdk: ">=3.2.3 <4.0.0"