toggle functionality added
This commit is contained in:
parent
1ca776e399
commit
a554a26bc6
@ -20,12 +20,12 @@ if (project.hasProperty('google-services.json')) {
|
|||||||
|
|
||||||
def flutterVersionCode = localProperties.getProperty("flutter.versionCode")
|
def flutterVersionCode = localProperties.getProperty("flutter.versionCode")
|
||||||
if (flutterVersionCode == null) {
|
if (flutterVersionCode == null) {
|
||||||
flutterVersionCode = "38"
|
flutterVersionCode = "39"
|
||||||
}
|
}
|
||||||
|
|
||||||
def flutterVersionName = localProperties.getProperty("flutter.versionName")
|
def flutterVersionName = localProperties.getProperty("flutter.versionName")
|
||||||
if (flutterVersionName == null) {
|
if (flutterVersionName == null) {
|
||||||
flutterVersionName = "1.0.37"
|
flutterVersionName = "1.0.38"
|
||||||
}
|
}
|
||||||
|
|
||||||
def keystorePropertiesFile = rootProject.file("key.properties")
|
def keystorePropertiesFile = rootProject.file("key.properties")
|
||||||
|
|||||||
37
lib/config/toggle_lang_service.dart
Normal file
37
lib/config/toggle_lang_service.dart
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
import 'package:pocketbase/pocketbase.dart';
|
||||||
|
import 'package:uae_stat/config/api_config.dart';
|
||||||
|
|
||||||
|
class UserService {
|
||||||
|
final _pb = PocketBase(apiUrl);
|
||||||
|
|
||||||
|
Future<void> updateLanguage(String localeCode) async {
|
||||||
|
try {
|
||||||
|
final prefs = await SharedPreferences.getInstance();
|
||||||
|
final userId = prefs.getString('userId');
|
||||||
|
|
||||||
|
if (userId == null) {
|
||||||
|
throw Exception('User ID not found');
|
||||||
|
}
|
||||||
|
// Authenticate as admin
|
||||||
|
final adminAuth = await _pb.admins
|
||||||
|
.authWithPassword('pb@venbainfotech.com', 'pb@venbainfotech.com');
|
||||||
|
final token = adminAuth.token;
|
||||||
|
|
||||||
|
final headers = {
|
||||||
|
'Authorization': 'Bearer $token',
|
||||||
|
};
|
||||||
|
await _pb.collection('users').update(
|
||||||
|
userId,
|
||||||
|
body: {
|
||||||
|
'language': localeCode,
|
||||||
|
},
|
||||||
|
headers: headers,
|
||||||
|
);
|
||||||
|
|
||||||
|
print('Language updated successfully');
|
||||||
|
} catch (e) {
|
||||||
|
print('Error updating language: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -101,6 +101,7 @@
|
|||||||
"search": "يبحث",
|
"search": "يبحث",
|
||||||
"approved": "تمت الموافقة",
|
"approved": "تمت الموافقة",
|
||||||
|
|
||||||
|
"profile_updated_successfully": "تم تحديث الملف الشخصي بنجاح",
|
||||||
"create_new_password": "إنشاء كلمة مرور جديدة",
|
"create_new_password": "إنشاء كلمة مرور جديدة",
|
||||||
"different_password":"يجب أن تكون كلمة المرور الجديدة مختلفة عن كلمة المرور المستخدمة سابقًا.",
|
"different_password":"يجب أن تكون كلمة المرور الجديدة مختلفة عن كلمة المرور المستخدمة سابقًا.",
|
||||||
"old_password": "كلمة المرور القديمة",
|
"old_password": "كلمة المرور القديمة",
|
||||||
|
|||||||
@ -98,6 +98,8 @@
|
|||||||
"no_result_found": "No results found",
|
"no_result_found": "No results found",
|
||||||
"search": "Search",
|
"search": "Search",
|
||||||
|
|
||||||
|
|
||||||
|
"profile_updated_successfully": "Profile updated successfully",
|
||||||
"create_new_password": "Create New Password",
|
"create_new_password": "Create New Password",
|
||||||
"different_password": "Your New Password Must Be Different form Previously Used Password",
|
"different_password": "Your New Password Must Be Different form Previously Used Password",
|
||||||
"old_password": "Old Password",
|
"old_password": "Old Password",
|
||||||
|
|||||||
@ -4,7 +4,10 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:flutter_svg/svg.dart';
|
import 'package:flutter_svg/svg.dart';
|
||||||
import 'package:go_router/go_router.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/connectivity_provider.dart';
|
import 'package:uae_stat/config/connectivity_provider.dart';
|
||||||
|
import 'package:uae_stat/config/toggle_lang_service.dart';
|
||||||
import 'package:uae_stat/domain/use_cases/language.dart';
|
import 'package:uae_stat/domain/use_cases/language.dart';
|
||||||
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/misc_icon_asset_path.dart';
|
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/misc_icon_asset_path.dart';
|
||||||
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
|
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
|
||||||
@ -66,10 +69,13 @@ class _UaenumberWidgetState extends ConsumerState<uaenumberWidget> {
|
|||||||
List<dynamic> filteredData = [];
|
List<dynamic> filteredData = [];
|
||||||
bool isLoading = true;
|
bool isLoading = true;
|
||||||
int? expandedIndex = 0;
|
int? expandedIndex = 0;
|
||||||
|
final _pb = PocketBase(apiUrl);
|
||||||
|
late UserService _userService;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
_userService = UserService();
|
||||||
final locale = ref.read(localeProvider);
|
final locale = ref.read(localeProvider);
|
||||||
fetchData(locale?.languageCode ?? 'en');
|
fetchData(locale?.languageCode ?? 'en');
|
||||||
_searchController.addListener(() {
|
_searchController.addListener(() {
|
||||||
@ -180,11 +186,12 @@ class _UaenumberWidgetState extends ConsumerState<uaenumberWidget> {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
ref.listen<Locale?>(localeProvider, (previous, next) {
|
ref.listen<Locale?>(localeProvider, (previous, next) async {
|
||||||
final localeCode = next?.languageCode ?? 'en'; // Default to 'en' if null
|
final localeCode = next?.languageCode ?? 'en'; // Default to 'en' if null
|
||||||
setState(() {
|
setState(() {
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
});
|
});
|
||||||
|
await _userService.updateLanguage(localeCode);
|
||||||
fetchData(localeCode);
|
fetchData(localeCode);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -2,6 +2,7 @@ import 'dart:convert';
|
|||||||
|
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:flutter_svg/svg.dart';
|
import 'package:flutter_svg/svg.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
@ -13,6 +14,7 @@ import 'package:tutorial_coach_mark/tutorial_coach_mark.dart';
|
|||||||
import 'package:uae_stat/config/api_config.dart';
|
import 'package:uae_stat/config/api_config.dart';
|
||||||
import 'package:uae_stat/config/connectivity_provider.dart';
|
import 'package:uae_stat/config/connectivity_provider.dart';
|
||||||
import 'package:uae_stat/config/toast_util.dart';
|
import 'package:uae_stat/config/toast_util.dart';
|
||||||
|
import 'package:uae_stat/config/toggle_lang_service.dart';
|
||||||
import 'package:uae_stat/domain/use_cases/language.dart';
|
import 'package:uae_stat/domain/use_cases/language.dart';
|
||||||
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/uae_numbers_asset_path.dart';
|
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/uae_numbers_asset_path.dart';
|
||||||
import 'package:uae_stat/presentation/Screens/charts/services/api_service.dart';
|
import 'package:uae_stat/presentation/Screens/charts/services/api_service.dart';
|
||||||
@ -96,10 +98,12 @@ class _ChartScreen1State extends ConsumerState<ChartScreen1> {
|
|||||||
String? bookmarkId; // Stores the ID of the bookmark record in PocketBase
|
String? bookmarkId; // Stores the ID of the bookmark record in PocketBase
|
||||||
late final Locale locale;
|
late final Locale locale;
|
||||||
late String mainTopic;
|
late String mainTopic;
|
||||||
|
late UserService _userService;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
_userService = UserService();
|
||||||
final String bgColor = widget.bgColor;
|
final String bgColor = widget.bgColor;
|
||||||
print(' bgColor $bgColor');
|
print(' bgColor $bgColor');
|
||||||
checkIfBookmarked();
|
checkIfBookmarked();
|
||||||
@ -1533,6 +1537,8 @@ class _ChartScreen1State extends ConsumerState<ChartScreen1> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void showRightSideModal(BuildContext context, List filters, List data) {
|
void showRightSideModal(BuildContext context, List filters, List data) {
|
||||||
|
// Hide system UI (including bottom navigation bar)
|
||||||
|
SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
|
||||||
print('selectedFiltersStoraged1- $selectedFiltersStorage');
|
print('selectedFiltersStoraged1- $selectedFiltersStorage');
|
||||||
|
|
||||||
// Initialize selected filters structure from the stored value, if exists
|
// Initialize selected filters structure from the stored value, if exists
|
||||||
@ -1749,59 +1755,7 @@ class _ChartScreen1State extends ConsumerState<ChartScreen1> {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
// Button Section
|
|
||||||
// Padding(
|
|
||||||
// padding: const EdgeInsets.all(16.0),
|
|
||||||
// child: Row(
|
|
||||||
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
||||||
// children: [
|
|
||||||
// ElevatedButton(
|
|
||||||
// onPressed: () {
|
|
||||||
// // Clear all selected filters
|
|
||||||
// selectedFilters.forEach((filter) {
|
|
||||||
// filter["filter_data"].clear();
|
|
||||||
// });
|
|
||||||
// setState(() {
|
|
||||||
// chartsData = List.from(originalTabChartsData);
|
|
||||||
// cardData = List.from(originalTabCardData);
|
|
||||||
// });
|
|
||||||
// // Reset the selectedFiltersStorage to empty when clearing
|
|
||||||
// selectedFiltersStorage.clear();
|
|
||||||
// Navigator.pop(context);
|
|
||||||
// },
|
|
||||||
// child: Text(context.translate(
|
|
||||||
// 'Clear',
|
|
||||||
// 'واضح',
|
|
||||||
// )),
|
|
||||||
// style: ElevatedButton.styleFrom(
|
|
||||||
// backgroundColor: Colors.grey,
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
// ElevatedButton(
|
|
||||||
// onPressed: () {
|
|
||||||
// print(
|
|
||||||
// "Selected Filters before applying: $selectedFilters");
|
|
||||||
// setState(() {
|
|
||||||
// chartsData = originalTabChartsData;
|
|
||||||
// cardData = originalTabCardData;
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// applyFilters(context, filters, chartsData, cardData,
|
|
||||||
// selectedFilters);
|
|
||||||
// // Save the selected filters to storage after applying
|
|
||||||
// selectedFiltersStorage = List.from(selectedFilters);
|
|
||||||
// },
|
|
||||||
// child: Text(context.translate(
|
|
||||||
// 'Apply Filter',
|
|
||||||
// 'تطبيق الفلتر',
|
|
||||||
// )),
|
|
||||||
// style: ElevatedButton.styleFrom(
|
|
||||||
// backgroundColor: Colors.blue,
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
// ],
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.all(16.0),
|
padding: const EdgeInsets.all(16.0),
|
||||||
child: Row(
|
child: Row(
|
||||||
@ -1908,7 +1862,10 @@ class _ChartScreen1State extends ConsumerState<ChartScreen1> {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
).whenComplete(() {
|
||||||
|
// Restore system UI when modal is dismissed
|
||||||
|
SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void onTabSelected(String tabId) {
|
void onTabSelected(String tabId) {
|
||||||
@ -2112,12 +2069,14 @@ class _ChartScreen1State extends ConsumerState<ChartScreen1> {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
ref.listen<Locale?>(localeProvider, (previous, next) {
|
ref.listen<Locale?>(localeProvider, (previous, next) async {
|
||||||
final localeCode = next?.languageCode ?? 'en'; // Default to 'en' if null
|
final localeCode = next?.languageCode ?? 'en';
|
||||||
|
// Default to 'en' if null
|
||||||
setState(() {
|
setState(() {
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
print('isLoadingref $isLoading');
|
print('isLoadingref $isLoading');
|
||||||
});
|
});
|
||||||
|
await _userService.updateLanguage(localeCode);
|
||||||
|
|
||||||
// fetchChartData(widget.dataSets, localeCode);
|
// fetchChartData(widget.dataSets, localeCode);
|
||||||
print('Saving currentTab: $tabWiseKpi before locale change');
|
print('Saving currentTab: $tabWiseKpi before locale change');
|
||||||
@ -2568,24 +2527,35 @@ class _ChartScreen1State extends ConsumerState<ChartScreen1> {
|
|||||||
children: [
|
children: [
|
||||||
// ConstrainedBox
|
// ConstrainedBox
|
||||||
Container(
|
Container(
|
||||||
height: (chartsData[index]
|
height: (chartsData[index][
|
||||||
['chart_type'] ==
|
'chart_height'] ==
|
||||||
'pie_chart')
|
null ||
|
||||||
? 500
|
chartsData[index][
|
||||||
: (chartsData[index][
|
'chart_height'] ==
|
||||||
'chart_type'] ==
|
0)
|
||||||
'bar_chart_horizontal')
|
? 350
|
||||||
? 370
|
: double.tryParse(
|
||||||
: (chartsData[index][
|
chartsData[index]
|
||||||
'chart_type'] ==
|
['chart_height']
|
||||||
'horizontal_rotate')
|
.toString()),
|
||||||
? 385
|
// height: (chartsData[index]
|
||||||
: (chartsData[index]
|
// ['chart_type'] ==
|
||||||
[
|
// 'pie_chart')
|
||||||
'chart_type'] ==
|
// ? 500
|
||||||
'fl_stacked_bar')
|
// : (chartsData[index][
|
||||||
? 390
|
// 'chart_type'] ==
|
||||||
: 350,
|
// 'bar_chart_horizontal')
|
||||||
|
// ? 370
|
||||||
|
// : (chartsData[index][
|
||||||
|
// 'chart_type'] ==
|
||||||
|
// 'horizontal_rotate')
|
||||||
|
// ? 385
|
||||||
|
// : (chartsData[index]
|
||||||
|
// [
|
||||||
|
// 'chart_type'] ==
|
||||||
|
// 'fl_stacked_bar')
|
||||||
|
// ? 390
|
||||||
|
// : 350,
|
||||||
|
|
||||||
// child: buildChart(chartsData[index]),
|
// child: buildChart(chartsData[index]),
|
||||||
child: ChartWidget(
|
child: ChartWidget(
|
||||||
@ -2694,7 +2664,7 @@ Future<void> shareCurrentPage(BuildContext context, bool _isSharing) async {
|
|||||||
_isSharing = true;
|
_isSharing = true;
|
||||||
try {
|
try {
|
||||||
final String currentRoute = GoRouterState.of(context).uri.toString();
|
final String currentRoute = GoRouterState.of(context).uri.toString();
|
||||||
final String baseAppLink = 'https://fcsc-da580.web.app';
|
final String baseAppLink = 'https://fcsc-a161c.web.app';
|
||||||
final String shareLink = '$baseAppLink$currentRoute';
|
final String shareLink = '$baseAppLink$currentRoute';
|
||||||
final String shareText = 'Check this out!';
|
final String shareText = 'Check this out!';
|
||||||
final String svgAssetPath = 'assets/backgrounds/share/fcsc.svg';
|
final String svgAssetPath = 'assets/backgrounds/share/fcsc.svg';
|
||||||
|
|||||||
@ -591,7 +591,7 @@ class ChartWidget extends StatelessWidget {
|
|||||||
BoxConstraints(minHeight: 3), // Allow dynamic height
|
BoxConstraints(minHeight: 3), // Allow dynamic height
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.only(
|
padding: const EdgeInsets.only(
|
||||||
left: 2.0, right: 2.0, bottom: 8.0, top: 1.0),
|
left: 2.0, right: 2.0, bottom: 8.0, top: 30),
|
||||||
child: Column(
|
child: Column(
|
||||||
// Change Row to Column
|
// Change Row to Column
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
@ -2979,7 +2979,7 @@ class ChartWidget extends StatelessWidget {
|
|||||||
// print("Bottomtiles");
|
// print("Bottomtiles");
|
||||||
// print(value);
|
// print(value);
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.only(top: 3.1, left: 20.0),
|
padding: const EdgeInsets.only(top: 4, left: 20.0),
|
||||||
child: SizedBox(
|
child: SizedBox(
|
||||||
width: 40,
|
width: 40,
|
||||||
child: Transform.rotate(
|
child: Transform.rotate(
|
||||||
|
|||||||
@ -358,9 +358,18 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
|
|||||||
// Send the request
|
// Send the request
|
||||||
final response = await request.send();
|
final response = await request.send();
|
||||||
print(response);
|
print(response);
|
||||||
_resetFormFields();
|
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
SnackBar(content: Text("Profile updated successfully!")));
|
SnackBar(content: Text(AppLocalizations.of(context)!.profile_updated_successfully)));
|
||||||
|
// **Set Default Locale in Provider**
|
||||||
|
print('_selectedLanguage $_selectedLanguage');
|
||||||
|
preferredLang = _selectedLanguage == 'English' ? 'en' : 'ar';
|
||||||
|
if (preferredLang == 'ar') {
|
||||||
|
ref.read(localeProvider.notifier).setLocale(const Locale('ar'));
|
||||||
|
} else {
|
||||||
|
ref.read(localeProvider.notifier).setLocale(const Locale('en'));
|
||||||
|
}
|
||||||
|
_resetFormFields();
|
||||||
|
|
||||||
// if (role == 'admin') {
|
// if (role == 'admin') {
|
||||||
// context.go('/manageuser');
|
// context.go('/manageuser');
|
||||||
// } else {
|
// } else {
|
||||||
|
|||||||
@ -43,6 +43,7 @@ class LoginRoute extends HookConsumerWidget {
|
|||||||
dynamic userData;
|
dynamic userData;
|
||||||
String? role;
|
String? role;
|
||||||
int? loginCount;
|
int? loginCount;
|
||||||
|
dynamic preferredLanguage;
|
||||||
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging.instance;
|
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging.instance;
|
||||||
// final FirebaseAuth _auth = FirebaseAuth.instance;
|
// final FirebaseAuth _auth = FirebaseAuth.instance;
|
||||||
static final formKey = GlobalKey<FormState>();
|
static final formKey = GlobalKey<FormState>();
|
||||||
@ -72,7 +73,7 @@ class LoginRoute extends HookConsumerWidget {
|
|||||||
final bool? isVerified = userDetailsResponse.data['verified'];
|
final bool? isVerified = userDetailsResponse.data['verified'];
|
||||||
final bool? isUserMailVerified =
|
final bool? isUserMailVerified =
|
||||||
userDetailsResponse.data['user_mail_verify'];
|
userDetailsResponse.data['user_mail_verify'];
|
||||||
final preferredLanguage = userDetailsResponse.data['language'] ?? '';
|
preferredLanguage = userDetailsResponse.data['language'] ?? '';
|
||||||
|
|
||||||
print('preferredLanguage login $preferredLanguage');
|
print('preferredLanguage login $preferredLanguage');
|
||||||
|
|
||||||
@ -85,11 +86,11 @@ class LoginRoute extends HookConsumerWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// **Set Default Locale in Provider**
|
// **Set Default Locale in Provider**
|
||||||
if (preferredLanguage == 'ar') {
|
// if (preferredLanguage == 'ar') {
|
||||||
ref.read(localeProvider.notifier).setLocale(const Locale('ar'));
|
// ref.read(localeProvider.notifier).setLocale(const Locale('ar'));
|
||||||
} else {
|
// } else {
|
||||||
ref.read(localeProvider.notifier).setLocale(const Locale('en'));
|
// ref.read(localeProvider.notifier).setLocale(const Locale('en'));
|
||||||
}
|
// }
|
||||||
|
|
||||||
userData = userDetailsResponse;
|
userData = userDetailsResponse;
|
||||||
// Check if 'is_profile_completed' is true
|
// Check if 'is_profile_completed' is true
|
||||||
@ -193,6 +194,26 @@ class LoginRoute extends HookConsumerWidget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Function to send the reset password request
|
||||||
|
Future<void> forgotPasswordMail(String email) async {
|
||||||
|
final url =
|
||||||
|
Uri.parse("${pb.baseUrl}api/auth/request-password-reset?email=$email");
|
||||||
|
|
||||||
|
try {
|
||||||
|
final response = await http.get(url);
|
||||||
|
|
||||||
|
if (response.statusCode == 200) {
|
||||||
|
return; // Success, no action needed here
|
||||||
|
} else {
|
||||||
|
final errorResponse = json.decode(response.body);
|
||||||
|
throw Exception(
|
||||||
|
errorResponse['message'] ?? "Failed to send reset email.");
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
throw Exception("Something went wrong. Please try again.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Future<void> authenticateAndStoreData() async {
|
// Future<void> authenticateAndStoreData() async {
|
||||||
// try {
|
// try {
|
||||||
// // Perform authentication
|
// // Perform authentication
|
||||||
@ -342,13 +363,10 @@ class LoginRoute extends HookConsumerWidget {
|
|||||||
);
|
);
|
||||||
if (email == null) return;
|
if (email == null) return;
|
||||||
if (!context.mounted) return;
|
if (!context.mounted) return;
|
||||||
await context.loaderWithErrorDialog(
|
|
||||||
() => ref
|
await context.loaderWithErrorDialog(() async {
|
||||||
.read(
|
await forgotPasswordMail(email);
|
||||||
authUseCaseProvider.notifier,
|
});
|
||||||
)
|
|
||||||
.requestPwReset(email),
|
|
||||||
);
|
|
||||||
if (!context.mounted) return;
|
if (!context.mounted) return;
|
||||||
|
|
||||||
context.simpleDialog(
|
context.simpleDialog(
|
||||||
@ -497,6 +515,12 @@ class LoginRoute extends HookConsumerWidget {
|
|||||||
|
|
||||||
if (isProfileComplete) {
|
if (isProfileComplete) {
|
||||||
print('Redirecting to Home / Intended Path');
|
print('Redirecting to Home / Intended Path');
|
||||||
|
// **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'));
|
||||||
|
}
|
||||||
context.go(intendedPath ?? '/myhomepage');
|
context.go(intendedPath ?? '/myhomepage');
|
||||||
} else {
|
} else {
|
||||||
print('Redirecting to Profile Setup');
|
print('Redirecting to Profile Setup');
|
||||||
|
|||||||
@ -169,6 +169,7 @@ import 'package:pocketbase/pocketbase.dart';
|
|||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:uae_stat/config/api_config.dart';
|
import 'package:uae_stat/config/api_config.dart';
|
||||||
import 'package:uae_stat/config/connectivity_provider.dart';
|
import 'package:uae_stat/config/connectivity_provider.dart';
|
||||||
|
import 'package:uae_stat/config/toggle_lang_service.dart';
|
||||||
import 'package:uae_stat/domain/use_cases/language.dart';
|
import 'package:uae_stat/domain/use_cases/language.dart';
|
||||||
import 'package:uae_stat/infrastructure/data/p_auth_repo.dart';
|
import 'package:uae_stat/infrastructure/data/p_auth_repo.dart';
|
||||||
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
|
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
|
||||||
@ -265,15 +266,15 @@ class _MyHomePageState extends ConsumerState<MyHomePage> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
child: FittedBox(
|
child: FittedBox(
|
||||||
fit: BoxFit
|
fit: BoxFit
|
||||||
.scaleDown, // Prevents wrapping while adjusting text size
|
.scaleDown, // Prevents wrapping while adjusting text size
|
||||||
child: Text(
|
child: Text(
|
||||||
context.translate('Log Out', 'تسجيل الخروج'),
|
context.translate('Log Out', 'تسجيل الخروج'),
|
||||||
style: TextStyle(color: Colors.white, fontSize: 16),
|
style: TextStyle(color: Colors.white, fontSize: 16),
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@ -357,7 +358,7 @@ class EconomyStatsState extends ConsumerState<EconomyStatsWidget> {
|
|||||||
// final _pb = PocketBase('https://pb.venbait.in');
|
// final _pb = PocketBase('https://pb.venbait.in');
|
||||||
final _pb = PocketBase(apiUrl);
|
final _pb = PocketBase(apiUrl);
|
||||||
bool isLoading = true;
|
bool isLoading = true;
|
||||||
|
late UserService _userService;
|
||||||
final GlobalKey cardTopicKey = GlobalKey();
|
final GlobalKey cardTopicKey = GlobalKey();
|
||||||
final GlobalKey cardsKey = GlobalKey();
|
final GlobalKey cardsKey = GlobalKey();
|
||||||
late TutorialCoachMark tutorialCoachMark;
|
late TutorialCoachMark tutorialCoachMark;
|
||||||
@ -1045,6 +1046,7 @@ class EconomyStatsState extends ConsumerState<EconomyStatsWidget> {
|
|||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
_userService = UserService();
|
||||||
locale = ref.read(localeProvider) ?? const Locale('en');
|
locale = ref.read(localeProvider) ?? const Locale('en');
|
||||||
fetchData(locale?.languageCode ?? 'en');
|
fetchData(locale?.languageCode ?? 'en');
|
||||||
// _fetchUserData();
|
// _fetchUserData();
|
||||||
@ -1156,11 +1158,12 @@ class EconomyStatsState extends ConsumerState<EconomyStatsWidget> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
ref.listen<Locale?>(localeProvider, (previous, next) {
|
ref.listen<Locale?>(localeProvider, (previous, next) async {
|
||||||
final localeCode = next?.languageCode ?? 'en'; // Default to 'en' if null
|
final localeCode = next?.languageCode ?? 'en'; // Default to 'en' if null
|
||||||
setState(() {
|
setState(() {
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
});
|
});
|
||||||
|
await _userService.updateLanguage(localeCode);
|
||||||
fetchData(localeCode);
|
fetchData(localeCode);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import 'package:pocketbase/pocketbase.dart';
|
|||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:uae_stat/config/api_config.dart';
|
import 'package:uae_stat/config/api_config.dart';
|
||||||
import 'package:uae_stat/config/connectivity_provider.dart';
|
import 'package:uae_stat/config/connectivity_provider.dart';
|
||||||
|
import 'package:uae_stat/config/toggle_lang_service.dart';
|
||||||
import 'package:uae_stat/domain/use_cases/language.dart';
|
import 'package:uae_stat/domain/use_cases/language.dart';
|
||||||
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/bookmark_asset_path.dart';
|
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/bookmark_asset_path.dart';
|
||||||
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/uae_numbers_asset_path.dart';
|
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/uae_numbers_asset_path.dart';
|
||||||
@ -29,10 +30,12 @@ class _BookMarkState extends ConsumerState<BookMark> {
|
|||||||
int? expandedIndex = 0;
|
int? expandedIndex = 0;
|
||||||
// Current selected tab index
|
// Current selected tab index
|
||||||
int selectedTabIndex = 0;
|
int selectedTabIndex = 0;
|
||||||
|
late UserService _userService;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
_userService = UserService();
|
||||||
final locale = ref.read(localeProvider);
|
final locale = ref.read(localeProvider);
|
||||||
fetchBookmarks(locale?.languageCode ?? 'en');
|
fetchBookmarks(locale?.languageCode ?? 'en');
|
||||||
}
|
}
|
||||||
@ -347,11 +350,13 @@ class _BookMarkState extends ConsumerState<BookMark> {
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
ref.listen<Locale?>(localeProvider, (previous, next) {
|
ref.listen<Locale?>(localeProvider, (previous, next) async {
|
||||||
final localeCode = next?.languageCode ?? 'en'; // Default to 'en' if null
|
final localeCode = next?.languageCode ?? 'en'; // Default to 'en' if null
|
||||||
setState(() {
|
setState(() {
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
});
|
});
|
||||||
|
await _userService.updateLanguage(localeCode);
|
||||||
|
|
||||||
fetchBookmarks(localeCode);
|
fetchBookmarks(localeCode);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -2,8 +2,10 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:uae_stat/config/connectivity_provider.dart';
|
import 'package:uae_stat/config/connectivity_provider.dart';
|
||||||
|
import 'package:uae_stat/config/toggle_lang_service.dart';
|
||||||
import 'package:uae_stat/domain/use_cases/language.dart';
|
import 'package:uae_stat/domain/use_cases/language.dart';
|
||||||
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/enquiry_asset_icon_path.dart';
|
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/enquiry_asset_icon_path.dart';
|
||||||
|
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
|
||||||
import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
|
import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
|
||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
|
|
||||||
@ -15,6 +17,14 @@ class Contact extends ConsumerStatefulWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _ContactState extends ConsumerState<Contact> {
|
class _ContactState extends ConsumerState<Contact> {
|
||||||
|
late UserService _userService;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
_userService = UserService();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final double screenWidth = MediaQuery.of(context).size.width;
|
final double screenWidth = MediaQuery.of(context).size.width;
|
||||||
@ -26,6 +36,11 @@ class _ContactState extends ConsumerState<Contact> {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
ref.listen<Locale?>(localeProvider, (previous, next) async {
|
||||||
|
final localeCode = next?.languageCode ?? 'en'; // Default to 'en' if null
|
||||||
|
await _userService.updateLanguage(localeCode);
|
||||||
|
});
|
||||||
|
|
||||||
return BaseScaffold(
|
return BaseScaffold(
|
||||||
body: Container(
|
body: Container(
|
||||||
color: Colors.grey[200],
|
color: Colors.grey[200],
|
||||||
|
|||||||
@ -16,8 +16,10 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|||||||
import 'package:uae_stat/config/api_config.dart';
|
import 'package:uae_stat/config/api_config.dart';
|
||||||
import 'package:uae_stat/config/connectivity_provider.dart';
|
import 'package:uae_stat/config/connectivity_provider.dart';
|
||||||
import 'package:uae_stat/config/my_theme.dart';
|
import 'package:uae_stat/config/my_theme.dart';
|
||||||
|
import 'package:uae_stat/config/toggle_lang_service.dart';
|
||||||
import 'package:uae_stat/domain/use_cases/language.dart';
|
import 'package:uae_stat/domain/use_cases/language.dart';
|
||||||
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/misc_icon_asset_path.dart';
|
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/misc_icon_asset_path.dart';
|
||||||
|
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
|
||||||
import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
|
import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
|
||||||
|
|
||||||
class EditProfile extends ConsumerStatefulWidget {
|
class EditProfile extends ConsumerStatefulWidget {
|
||||||
@ -31,7 +33,7 @@ class _EditProfileState extends ConsumerState<EditProfile> {
|
|||||||
final _pb = PocketBase(apiUrl);
|
final _pb = PocketBase(apiUrl);
|
||||||
// final _pb = PocketBase('http://127.0.0.1:8090');
|
// final _pb = PocketBase('http://127.0.0.1:8090');
|
||||||
bool _isProfileCompleted = false;
|
bool _isProfileCompleted = false;
|
||||||
|
int changedPreferredLanguage = 0;
|
||||||
// Add focus nodes and hint states
|
// Add focus nodes and hint states
|
||||||
final List<FocusNode> _focusNodes = List.generate(4, (_) => FocusNode());
|
final List<FocusNode> _focusNodes = List.generate(4, (_) => FocusNode());
|
||||||
final List<bool> _showHints = [
|
final List<bool> _showHints = [
|
||||||
@ -96,11 +98,12 @@ class _EditProfileState extends ConsumerState<EditProfile> {
|
|||||||
|
|
||||||
bool _isHoveringDropdown = false;
|
bool _isHoveringDropdown = false;
|
||||||
bool _isHoveringPreferredLang = false;
|
bool _isHoveringPreferredLang = false;
|
||||||
|
late UserService _userService;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
_userService = UserService();
|
||||||
// Add listeners for focus nodes
|
// Add listeners for focus nodes
|
||||||
for (int i = 0; i < _focusNodes.length; i++) {
|
for (int i = 0; i < _focusNodes.length; i++) {
|
||||||
_focusNodes[i].addListener(() {
|
_focusNodes[i].addListener(() {
|
||||||
@ -401,13 +404,23 @@ class _EditProfileState extends ConsumerState<EditProfile> {
|
|||||||
print('ShowConfirmationuser response - $response ');
|
print('ShowConfirmationuser response - $response ');
|
||||||
// Handle response
|
// Handle response
|
||||||
if (response.statusCode == 200) {
|
if (response.statusCode == 200) {
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
|
||||||
|
content: Text(
|
||||||
|
AppLocalizations.of(context)!.profile_updated_successfully)));
|
||||||
|
if (changedPreferredLanguage == 1) {
|
||||||
|
print(_selectedLanguage);
|
||||||
|
preferredLang = _selectedLanguage == 'English' ? 'en' : 'ar';
|
||||||
|
if (preferredLang == 'ar') {
|
||||||
|
ref.read(localeProvider.notifier).setLocale(const Locale('ar'));
|
||||||
|
} else {
|
||||||
|
ref.read(localeProvider.notifier).setLocale(const Locale('en'));
|
||||||
|
}
|
||||||
|
}
|
||||||
_resetFormFields();
|
_resetFormFields();
|
||||||
setState(() {
|
setState(() {
|
||||||
isLoader = false;
|
isLoader = false;
|
||||||
});
|
});
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
|
||||||
SnackBar(content: Text('Profile updated successfully!')),
|
|
||||||
);
|
|
||||||
// print('ShowConfirmation userData - $userData ');
|
// print('ShowConfirmation userData - $userData ');
|
||||||
context.go('/myhomepage');
|
context.go('/myhomepage');
|
||||||
} else {
|
} else {
|
||||||
@ -474,6 +487,12 @@ class _EditProfileState extends ConsumerState<EditProfile> {
|
|||||||
context.push('/internetcheck');
|
context.push('/internetcheck');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
ref.listen<Locale?>(localeProvider, (previous, next) async {
|
||||||
|
final localeCode = next?.languageCode ?? 'en'; // Default to 'en' if null
|
||||||
|
await _userService.updateLanguage(localeCode);
|
||||||
|
});
|
||||||
|
|
||||||
return PopScope(
|
return PopScope(
|
||||||
canPop: false, // Allow back navigation only if not login screen
|
canPop: false, // Allow back navigation only if not login screen
|
||||||
onPopInvokedWithResult: (didPop, result) {
|
onPopInvokedWithResult: (didPop, result) {
|
||||||
@ -942,6 +961,7 @@ class _EditProfileState extends ConsumerState<EditProfile> {
|
|||||||
onChanged: (String? newValue) {
|
onChanged: (String? newValue) {
|
||||||
setState(() {
|
setState(() {
|
||||||
_selectedLanguage = newValue;
|
_selectedLanguage = newValue;
|
||||||
|
changedPreferredLanguage = 1;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
validator: _validatePreferredLang,
|
validator: _validatePreferredLang,
|
||||||
|
|||||||
@ -9,10 +9,12 @@ import 'package:pocketbase/pocketbase.dart';
|
|||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:uae_stat/config/api_config.dart';
|
import 'package:uae_stat/config/api_config.dart';
|
||||||
import 'package:uae_stat/config/connectivity_provider.dart';
|
import 'package:uae_stat/config/connectivity_provider.dart';
|
||||||
|
import 'package:uae_stat/config/toggle_lang_service.dart';
|
||||||
import 'package:uae_stat/domain/use_cases/language.dart';
|
import 'package:uae_stat/domain/use_cases/language.dart';
|
||||||
import 'package:uae_stat/infrastructure/services/img_asset_paths/feedback_asset_path.dart';
|
import 'package:uae_stat/infrastructure/services/img_asset_paths/feedback_asset_path.dart';
|
||||||
|
|
||||||
import 'package:uae_stat/infrastructure/services/packages/go_router.dart';
|
import 'package:uae_stat/infrastructure/services/packages/go_router.dart';
|
||||||
|
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
|
||||||
import 'package:uae_stat/presentation/components/my_drawer.dart';
|
import 'package:uae_stat/presentation/components/my_drawer.dart';
|
||||||
import 'package:mailer/mailer.dart';
|
import 'package:mailer/mailer.dart';
|
||||||
import 'package:mailer/smtp_server.dart';
|
import 'package:mailer/smtp_server.dart';
|
||||||
@ -104,10 +106,12 @@ class _FeedbackFormState extends ConsumerState<FeedbackForm>
|
|||||||
final RegExp _allowedCharacters = RegExp(r'^[a-zA-Z0-9 .,!?-]*$');
|
final RegExp _allowedCharacters = RegExp(r'^[a-zA-Z0-9 .,!?-]*$');
|
||||||
bool _hasError = false;
|
bool _hasError = false;
|
||||||
String _errorMessage = '';
|
String _errorMessage = '';
|
||||||
|
late UserService _userService;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
_userService = UserService();
|
||||||
WidgetsBinding.instance.addObserver(this);
|
WidgetsBinding.instance.addObserver(this);
|
||||||
_loadFeedbackText();
|
_loadFeedbackText();
|
||||||
_feedbackController.addListener(_handleTextChange);
|
_feedbackController.addListener(_handleTextChange);
|
||||||
@ -244,6 +248,11 @@ class _FeedbackFormState extends ConsumerState<FeedbackForm>
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
ref.listen<Locale?>(localeProvider, (previous, next) async {
|
||||||
|
final localeCode = next?.languageCode ?? 'en'; // Default to 'en' if null
|
||||||
|
await _userService.updateLanguage(localeCode);
|
||||||
|
});
|
||||||
|
|
||||||
final userName = GoRouterState.of(context).extra as String? ?? 'Guest User';
|
final userName = GoRouterState.of(context).extra as String? ?? 'Guest User';
|
||||||
return PopScope(
|
return PopScope(
|
||||||
canPop: false, // Allow back navigation only if not login screen
|
canPop: false, // Allow back navigation only if not login screen
|
||||||
|
|||||||
@ -6,7 +6,9 @@ import 'package:intl/intl.dart';
|
|||||||
import 'package:pocketbase/pocketbase.dart';
|
import 'package:pocketbase/pocketbase.dart';
|
||||||
import 'package:uae_stat/config/api_config.dart';
|
import 'package:uae_stat/config/api_config.dart';
|
||||||
import 'package:uae_stat/config/connectivity_provider.dart';
|
import 'package:uae_stat/config/connectivity_provider.dart';
|
||||||
|
import 'package:uae_stat/config/toggle_lang_service.dart';
|
||||||
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/misc_icon_asset_path.dart';
|
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/misc_icon_asset_path.dart';
|
||||||
|
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
|
||||||
|
|
||||||
import 'package:uae_stat/presentation/components/my_bottom_nav_bar.dart';
|
import 'package:uae_stat/presentation/components/my_bottom_nav_bar.dart';
|
||||||
import 'package:uae_stat/presentation/components/my_drawer.dart';
|
import 'package:uae_stat/presentation/components/my_drawer.dart';
|
||||||
@ -26,6 +28,7 @@ class _ManageUserRouterState extends ConsumerState<ManageUserRouter> {
|
|||||||
bool _isAscending = true;
|
bool _isAscending = true;
|
||||||
List<User> filteredUserData = [];
|
List<User> filteredUserData = [];
|
||||||
bool isLoading = true;
|
bool isLoading = true;
|
||||||
|
late UserService _userService;
|
||||||
|
|
||||||
// final List<String> statusOptions = ['Approved', 'Denied', 'Pending'];
|
// final List<String> statusOptions = ['Approved', 'Denied', 'Pending'];
|
||||||
|
|
||||||
@ -45,6 +48,7 @@ class _ManageUserRouterState extends ConsumerState<ManageUserRouter> {
|
|||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
_userService = UserService();
|
||||||
fetchUnverifiedUsers();
|
fetchUnverifiedUsers();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -292,6 +296,11 @@ class _ManageUserRouterState extends ConsumerState<ManageUserRouter> {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
ref.listen<Locale?>(localeProvider, (previous, next) async {
|
||||||
|
final localeCode = next?.languageCode ?? 'en'; // Default to 'en' if null
|
||||||
|
await _userService.updateLanguage(localeCode);
|
||||||
|
});
|
||||||
|
|
||||||
final Map<String, String> statusOptions = {
|
final Map<String, String> statusOptions = {
|
||||||
'Approved': AppLocalizations.of(context)!.approved,
|
'Approved': AppLocalizations.of(context)!.approved,
|
||||||
'Denied': AppLocalizations.of(context)!.denied,
|
'Denied': AppLocalizations.of(context)!.denied,
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import 'package:pocketbase/pocketbase.dart';
|
|||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:uae_stat/config/api_config.dart';
|
import 'package:uae_stat/config/api_config.dart';
|
||||||
import 'package:uae_stat/config/connectivity_provider.dart';
|
import 'package:uae_stat/config/connectivity_provider.dart';
|
||||||
|
import 'package:uae_stat/config/toggle_lang_service.dart';
|
||||||
import 'package:uae_stat/domain/use_cases/language.dart';
|
import 'package:uae_stat/domain/use_cases/language.dart';
|
||||||
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
|
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
|
||||||
import '../../custom_drawer_routes.dart';
|
import '../../custom_drawer_routes.dart';
|
||||||
@ -30,6 +31,7 @@ class _NotificationPageState extends ConsumerState<NotificationPage> {
|
|||||||
int selectedTabIndex = 0;
|
int selectedTabIndex = 0;
|
||||||
late final Locale locale;
|
late final Locale locale;
|
||||||
dynamic userID;
|
dynamic userID;
|
||||||
|
late UserService _userService;
|
||||||
|
|
||||||
// Tab categories
|
// Tab categories
|
||||||
// final List<String> tabs = [
|
// final List<String> tabs = [
|
||||||
@ -45,6 +47,7 @@ class _NotificationPageState extends ConsumerState<NotificationPage> {
|
|||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
locale = ref.read(localeProvider) ?? const Locale('en');
|
locale = ref.read(localeProvider) ?? const Locale('en');
|
||||||
|
_userService = UserService();
|
||||||
_fetchUserData();
|
_fetchUserData();
|
||||||
fetchNotifications(locale?.languageCode ?? 'en');
|
fetchNotifications(locale?.languageCode ?? 'en');
|
||||||
}
|
}
|
||||||
@ -106,10 +109,11 @@ class _NotificationPageState extends ConsumerState<NotificationPage> {
|
|||||||
jsonDecode(response.body); // Decode JSON
|
jsonDecode(response.body); // Decode JSON
|
||||||
|
|
||||||
if (jsonResponse['message'] == 'Success') {
|
if (jsonResponse['message'] == 'Success') {
|
||||||
setState(() {
|
setState(() async {
|
||||||
notifications = List<Map<String, dynamic>>.from(
|
notifications = List<Map<String, dynamic>>.from(
|
||||||
jsonResponse['data']); // Assign decoded data
|
jsonResponse['data']); // Assign decoded data
|
||||||
print('notifications $notifications');
|
print('notifications $notifications');
|
||||||
|
await Future.delayed(Duration(seconds: 5));
|
||||||
isLoading = false;
|
isLoading = false;
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
@ -141,11 +145,12 @@ class _NotificationPageState extends ConsumerState<NotificationPage> {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
ref.listen<Locale?>(localeProvider, (previous, next) {
|
ref.listen<Locale?>(localeProvider, (previous, next) async {
|
||||||
final localeCode = next?.languageCode ?? 'en'; // Default to 'en' if null
|
final localeCode = next?.languageCode ?? 'en'; // Default to 'en' if null
|
||||||
setState(() {
|
setState(() {
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
});
|
});
|
||||||
|
await _userService.updateLanguage(localeCode);
|
||||||
fetchNotifications(localeCode);
|
fetchNotifications(localeCode);
|
||||||
});
|
});
|
||||||
final List<Map<String, dynamic>> tabs = [
|
final List<Map<String, dynamic>> tabs = [
|
||||||
|
|||||||
@ -4,8 +4,10 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
import 'package:pocketbase/pocketbase.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/config/api_config.dart';
|
||||||
import 'package:uae_stat/config/connectivity_provider.dart';
|
import 'package:uae_stat/config/connectivity_provider.dart';
|
||||||
|
import 'package:uae_stat/config/toggle_lang_service.dart';
|
||||||
import 'package:uae_stat/domain/use_cases/language.dart';
|
import 'package:uae_stat/domain/use_cases/language.dart';
|
||||||
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
|
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
|
||||||
import '../../custom_drawer_routes.dart';
|
import '../../custom_drawer_routes.dart';
|
||||||
@ -38,6 +40,7 @@ class _NotificationDetailsState extends ConsumerState<NotificationDetails> {
|
|||||||
final _pb = PocketBase(apiUrl);
|
final _pb = PocketBase(apiUrl);
|
||||||
Map<String, dynamic>? notification;
|
Map<String, dynamic>? notification;
|
||||||
bool isLoading = true;
|
bool isLoading = true;
|
||||||
|
late UserService _userService;
|
||||||
|
|
||||||
// Current selected tab index
|
// Current selected tab index
|
||||||
int selectedTabIndex = 0;
|
int selectedTabIndex = 0;
|
||||||
@ -49,6 +52,7 @@ class _NotificationDetailsState extends ConsumerState<NotificationDetails> {
|
|||||||
super.initState();
|
super.initState();
|
||||||
print(widget.id);
|
print(widget.id);
|
||||||
locale = ref.read(localeProvider) ?? const Locale('en');
|
locale = ref.read(localeProvider) ?? const Locale('en');
|
||||||
|
_userService = UserService();
|
||||||
fetchNotifications(locale?.languageCode ?? 'en');
|
fetchNotifications(locale?.languageCode ?? 'en');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,11 +120,12 @@ class _NotificationDetailsState extends ConsumerState<NotificationDetails> {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
ref.listen<Locale?>(localeProvider, (previous, next) {
|
ref.listen<Locale?>(localeProvider, (previous, next) async {
|
||||||
final localeCode = next?.languageCode ?? 'en'; // Default to 'en' if null
|
final localeCode = next?.languageCode ?? 'en'; // Default to 'en' if null
|
||||||
setState(() {
|
setState(() {
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
});
|
});
|
||||||
|
await _userService.updateLanguage(localeCode);
|
||||||
fetchNotifications(localeCode);
|
fetchNotifications(localeCode);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
name: uae_stat
|
name: uae_stat
|
||||||
description: "View statistics about the UAE from the Federal Center for Statistics and Competitiveness."
|
description: "View statistics about the UAE from the Federal Center for Statistics and Competitiveness."
|
||||||
publish_to: "none"
|
publish_to: "none"
|
||||||
version: 1.0.37+38
|
version: 1.0.38+39
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=3.2.3 <4.0.0"
|
sdk: ">=3.2.3 <4.0.0"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user