forgot password

This commit is contained in:
Surendiran 2025-08-13 10:31:02 +05:30
parent 40aefbb045
commit 65a7f87363
26 changed files with 1612 additions and 972 deletions

View File

@ -18,7 +18,7 @@ dependencies:
pocketbase: ^0.18.1
excel: ^4.0.3
csv: ^6.0.0
intl: ^0.19.0
intl: ^0.20.2
freezed_annotation: ^2.4.2
# path: ^1.8.0

View File

@ -2,7 +2,6 @@ import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
// import 'package:app_links/app_links.dart';
import 'package:uae_stat/presentation/Screens/Bottom%20Navigation%20Pages/UAE_Numbers/Social/marriages.dart';
import 'package:uae_stat/presentation/routes/auth_routes/login_route.dart';
import 'package:uae_stat/presentation/routes/bottom_bar_routes/tab_routes/home_route.dart';
@ -44,10 +43,7 @@ class _DeepLinkListenerState extends State<DeepLinkListener> {
if (uri.pathSegments.isNotEmpty) {
final String firstSegment = uri.pathSegments.first;
if (firstSegment == 'marriages') {
Navigator.of(context)
.push(MaterialPageRoute(builder: (context) => Marriages()));
} else if (firstSegment == 'login') {
if (firstSegment == 'login') {
Navigator.of(context)
.push(MaterialPageRoute(builder: (context) => LoginRoute()));
} else if (firstSegment == 'home') {

View File

@ -302,7 +302,6 @@ import 'package:uae_stat/domain/entities/session_entity.dart';
import 'package:uae_stat/infrastructure/data/p_auth_repo.dart';
import 'package:uae_stat/presentation/Screens/Bottom%20Navigation%20Pages/Competitiveness/Detailedcompetitiveness.dart';
import 'package:uae_stat/presentation/Screens/Bottom%20Navigation%20Pages/Country_Profile/DetailedCountryProfilePage.dart';
import 'package:uae_stat/presentation/Screens/Bottom%20Navigation%20Pages/UAE_Numbers/Social/marriages.dart';
import 'package:uae_stat/presentation/Screens/app_tour/WelcomePage.dart';
import 'package:uae_stat/presentation/Screens/auth_verification/forgot_password.dart';
import 'package:uae_stat/presentation/Screens/auth_verification/privacy_policy.dart';
@ -678,11 +677,6 @@ final GoRouter router = GoRouter(
},
),
GoRoute(
path: '/marriages',
builder: (context, state) => Marriages(),
),
GoRoute(
path: '/contact',
builder: (context, state) => Contact(),

View File

@ -0,0 +1,829 @@
import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:intl/intl.dart' as intl;
import 'app_localizations_ar.dart';
import 'app_localizations_en.dart';
// ignore_for_file: type=lint
/// Callers can lookup localized strings with an instance of AppLocalizations
/// returned by `AppLocalizations.of(context)`.
///
/// Applications need to include `AppLocalizations.delegate()` in their app's
/// `localizationDelegates` list, and the locales they support in the app's
/// `supportedLocales` list. For example:
///
/// ```dart
/// import 'l10n/app_localizations.dart';
///
/// return MaterialApp(
/// localizationsDelegates: AppLocalizations.localizationsDelegates,
/// supportedLocales: AppLocalizations.supportedLocales,
/// home: MyApplicationHome(),
/// );
/// ```
///
/// ## Update pubspec.yaml
///
/// Please make sure to update your pubspec.yaml to include the following
/// packages:
///
/// ```yaml
/// dependencies:
/// # Internationalization support.
/// flutter_localizations:
/// sdk: flutter
/// intl: any # Use the pinned version from flutter_localizations
///
/// # Rest of dependencies
/// ```
///
/// ## iOS Applications
///
/// iOS applications define key application metadata, including supported
/// locales, in an Info.plist file that is built into the application bundle.
/// To configure the locales supported by your app, youll need to edit this
/// file.
///
/// First, open your projects ios/Runner.xcworkspace Xcode workspace file.
/// Then, in the Project Navigator, open the Info.plist file under the Runner
/// projects Runner folder.
///
/// Next, select the Information Property List item, select Add Item from the
/// Editor menu, then select Localizations from the pop-up menu.
///
/// Select and expand the newly-created Localizations item then, for each
/// locale your application supports, add a new item and select the locale
/// you wish to add from the pop-up menu in the Value field. This list should
/// be consistent with the languages listed in the AppLocalizations.supportedLocales
/// property.
abstract class AppLocalizations {
AppLocalizations(String locale)
: localeName = intl.Intl.canonicalizedLocale(locale.toString());
final String localeName;
static AppLocalizations? of(BuildContext context) {
return Localizations.of<AppLocalizations>(context, AppLocalizations);
}
static const LocalizationsDelegate<AppLocalizations> delegate =
_AppLocalizationsDelegate();
/// A list of this localizations delegate along with the default localizations
/// delegates.
///
/// Returns a list of localizations delegates containing this delegate along with
/// GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate,
/// and GlobalWidgetsLocalizations.delegate.
///
/// Additional delegates can be added by appending to this list in
/// MaterialApp. This list does not have to be used at all if a custom list
/// of delegates is preferred or required.
static const List<LocalizationsDelegate<dynamic>> localizationsDelegates =
<LocalizationsDelegate<dynamic>>[
delegate,
GlobalMaterialLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
];
/// A list of this localizations delegate's supported locales.
static const List<Locale> supportedLocales = <Locale>[
Locale('ar'),
Locale('en')
];
/// No description provided for @all_bookmarks.
///
/// In en, this message translates to:
/// **'All Bookmarks'**
String get all_bookmarks;
/// No description provided for @economy_title.
///
/// In en, this message translates to:
/// **'Economy'**
String get economy_title;
/// No description provided for @social_title.
///
/// In en, this message translates to:
/// **'Social'**
String get social_title;
/// No description provided for @environment_title.
///
/// In en, this message translates to:
/// **'Environment'**
String get environment_title;
/// No description provided for @economy_title_upper.
///
/// In en, this message translates to:
/// **'ECONOMY'**
String get economy_title_upper;
/// No description provided for @social_title_upper.
///
/// In en, this message translates to:
/// **'SOCIAL'**
String get social_title_upper;
/// No description provided for @environment_title_upper.
///
/// In en, this message translates to:
/// **'ENVIRONMENT'**
String get environment_title_upper;
/// No description provided for @bookmarks.
///
/// In en, this message translates to:
/// **'Bookmarks'**
String get bookmarks;
/// No description provided for @searchCountry.
///
/// In en, this message translates to:
/// **'Search Country'**
String get searchCountry;
/// No description provided for @feedback_title.
///
/// In en, this message translates to:
/// **'Feedback'**
String get feedback_title;
/// No description provided for @feedback_failed_msg.
///
/// In en, this message translates to:
/// **'Your feedback could not be \n submitted. Please try again'**
String get feedback_failed_msg;
/// No description provided for @thankYou.
///
/// In en, this message translates to:
/// **'Thank you'**
String get thankYou;
/// No description provided for @feedback_message.
///
/// In en, this message translates to:
/// **'For your valuable feedback, we truly appreciate your input!'**
String get feedback_message;
/// No description provided for @failed_to_sharefeedback.
///
/// In en, this message translates to:
/// **'Failed to Share Feedback'**
String get failed_to_sharefeedback;
/// No description provided for @feedback_submitted.
///
/// In en, this message translates to:
/// **'Feedback submitted successfully!'**
String get feedback_submitted;
/// No description provided for @formError.
///
/// In en, this message translates to:
/// **'Please correct the errors before submitting.'**
String get formError;
/// No description provided for @feedback_failed.
///
/// In en, this message translates to:
/// **'Failed to submit feedback: {error}'**
String feedback_failed(Object error);
/// No description provided for @skip.
///
/// In en, this message translates to:
/// **'Skip'**
String get skip;
/// No description provided for @got_it.
///
/// In en, this message translates to:
/// **'Got it'**
String get got_it;
/// No description provided for @exit_app.
///
/// In en, this message translates to:
/// **'Exit App'**
String get exit_app;
/// No description provided for @exit_confirmation.
///
/// In en, this message translates to:
/// **'Are you sure you want to exit?'**
String get exit_confirmation;
/// No description provided for @cancel.
///
/// In en, this message translates to:
/// **'Cancel'**
String get cancel;
/// No description provided for @exit.
///
/// In en, this message translates to:
/// **'Exit'**
String get exit;
/// No description provided for @bookmark_title.
///
/// In en, this message translates to:
/// **'Bookmark'**
String get bookmark_title;
/// No description provided for @failed_To_Remove.
///
/// In en, this message translates to:
/// **'Failed to Remove'**
String get failed_To_Remove;
/// No description provided for @removed_from_Bookmark.
///
/// In en, this message translates to:
/// **'Removed from Bookmark'**
String get removed_from_Bookmark;
/// No description provided for @added_to_Bookmark.
///
/// In en, this message translates to:
/// **'Added to Bookmark.'**
String get added_to_Bookmark;
/// No description provided for @notification.
///
/// In en, this message translates to:
/// **'Notification'**
String get notification;
/// No description provided for @register_title.
///
/// In en, this message translates to:
/// **'Register'**
String get register_title;
/// No description provided for @register_details.
///
/// In en, this message translates to:
/// **'Please enter your details'**
String get register_details;
/// No description provided for @register_name.
///
/// In en, this message translates to:
/// **'Username'**
String get register_name;
/// No description provided for @email_id.
///
/// In en, this message translates to:
/// **'Email ID'**
String get email_id;
/// No description provided for @enter_name.
///
/// In en, this message translates to:
/// **'Enter your User Name'**
String get enter_name;
/// No description provided for @enter_your_email.
///
/// In en, this message translates to:
/// **'Enter your email'**
String get enter_your_email;
/// No description provided for @enter_your_password.
///
/// In en, this message translates to:
/// **'Enter your password'**
String get enter_your_password;
/// No description provided for @register_Confirm_password.
///
/// In en, this message translates to:
/// **'Confirm password'**
String get register_Confirm_password;
/// No description provided for @agree.
///
/// In en, this message translates to:
/// **'I agree to the '**
String get agree;
/// No description provided for @t_and.
///
/// In en, this message translates to:
/// **' and '**
String get t_and;
/// No description provided for @conditions.
///
/// In en, this message translates to:
/// **' of FCSC'**
String get conditions;
/// No description provided for @terms_conditions.
///
/// In en, this message translates to:
/// **'Terms & Conditions'**
String get terms_conditions;
/// No description provided for @privacy_policy.
///
/// In en, this message translates to:
/// **'Privacy Policy'**
String get privacy_policy;
/// No description provided for @account_confirmation.
///
/// In en, this message translates to:
/// **'Already have an account?'**
String get account_confirmation;
/// No description provided for @login_title.
///
/// In en, this message translates to:
/// **'Login'**
String get login_title;
/// No description provided for @all_updates.
///
/// In en, this message translates to:
/// **'All updates'**
String get all_updates;
/// No description provided for @app_updates.
///
/// In en, this message translates to:
/// **'App updates'**
String get app_updates;
/// No description provided for @notificationSocial.
///
/// In en, this message translates to:
/// **'Social'**
String get notificationSocial;
/// No description provided for @notificationEconomy.
///
/// In en, this message translates to:
/// **'Economy'**
String get notificationEconomy;
/// No description provided for @notificationEnvironment.
///
/// In en, this message translates to:
/// **'Environment'**
String get notificationEnvironment;
/// No description provided for @notificationFavourites.
///
/// In en, this message translates to:
/// **'Favourites'**
String get notificationFavourites;
/// No description provided for @profile_title.
///
/// In en, this message translates to:
/// **'Edit Profile'**
String get profile_title;
/// No description provided for @my_profile.
///
/// In en, this message translates to:
/// **'My Profile'**
String get my_profile;
/// No description provided for @logout.
///
/// In en, this message translates to:
/// **'Logout'**
String get logout;
/// No description provided for @full_name.
///
/// In en, this message translates to:
/// **'Full Name*'**
String get full_name;
/// No description provided for @dob.
///
/// In en, this message translates to:
/// **'Date of Birth*'**
String get dob;
/// No description provided for @region.
///
/// In en, this message translates to:
/// **'Country/Region'**
String get region;
/// No description provided for @preferredLang.
///
/// In en, this message translates to:
/// **'Preferred Language'**
String get preferredLang;
/// No description provided for @confirm.
///
/// In en, this message translates to:
/// **'Confirm'**
String get confirm;
/// No description provided for @change_password.
///
/// In en, this message translates to:
/// **'Change Password'**
String get change_password;
/// No description provided for @sure_save_page.
///
/// In en, this message translates to:
/// **'Are you sure you want to save this page? '**
String get sure_save_page;
/// No description provided for @not_able_to_change.
///
/// In en, this message translates to:
/// **'Once saved, you will not be able to change your '**
String get not_able_to_change;
/// No description provided for @save.
///
/// In en, this message translates to:
/// **'Save'**
String get save;
/// No description provided for @name.
///
/// In en, this message translates to:
/// **'Name'**
String get name;
/// No description provided for @guide_title.
///
/// In en, this message translates to:
/// **'User Guide'**
String get guide_title;
/// No description provided for @nav_home.
///
/// In en, this message translates to:
/// **'HOME'**
String get nav_home;
/// No description provided for @nav_uae.
///
/// In en, this message translates to:
/// **'UAE Numbers'**
String get nav_uae;
/// No description provided for @nav_competitiveness.
///
/// In en, this message translates to:
/// **'Competitiveness'**
String get nav_competitiveness;
/// No description provided for @country_profile.
///
/// In en, this message translates to:
/// **'Country Profile'**
String get country_profile;
/// No description provided for @agree_terms_conditions.
///
/// In en, this message translates to:
/// **'Please agree to terms and conditions.'**
String get agree_terms_conditions;
/// No description provided for @retry.
///
/// In en, this message translates to:
/// **'Retry'**
String get retry;
/// No description provided for @select.
///
/// In en, this message translates to:
/// **'Select'**
String get select;
/// No description provided for @email_exists.
///
/// In en, this message translates to:
/// **'Email exists'**
String get email_exists;
/// No description provided for @email_exists_msg.
///
/// In en, this message translates to:
/// **'Email ID already exists. Please use a different email.'**
String get email_exists_msg;
/// No description provided for @email_invalid.
///
/// In en, this message translates to:
/// **'The email is invalid or already in use.'**
String get email_invalid;
/// No description provided for @required.
///
/// In en, this message translates to:
/// **'Required'**
String get required;
/// No description provided for @only40charac.
///
/// In en, this message translates to:
/// **'Must not exceed 40 characters'**
String get only40charac;
/// No description provided for @invalid_characters.
///
/// In en, this message translates to:
/// **'Invalid Characters'**
String get invalid_characters;
/// No description provided for @invalid_email.
///
/// In en, this message translates to:
/// **'Invalid Email'**
String get invalid_email;
/// No description provided for @password_invalid.
///
/// In en, this message translates to:
/// **'Password contains invalid characters'**
String get password_invalid;
/// No description provided for @password_match.
///
/// In en, this message translates to:
/// **'Passwords do not match'**
String get password_match;
/// No description provided for @only8charac.
///
/// In en, this message translates to:
/// **'Password must be at least 8characters'**
String get only8charac;
/// No description provided for @manage_user.
///
/// In en, this message translates to:
/// **'Manage User'**
String get manage_user;
/// No description provided for @user_name.
///
/// In en, this message translates to:
/// **'User Name'**
String get user_name;
/// No description provided for @reg_date.
///
/// In en, this message translates to:
/// **'Registration Date'**
String get reg_date;
/// No description provided for @status.
///
/// In en, this message translates to:
/// **'Status'**
String get status;
/// No description provided for @denied.
///
/// In en, this message translates to:
/// **'Denied'**
String get denied;
/// No description provided for @pending.
///
/// In en, this message translates to:
/// **'Pending'**
String get pending;
/// No description provided for @approved.
///
/// In en, this message translates to:
/// **'Approved'**
String get approved;
/// No description provided for @approve_msg.
///
/// In en, this message translates to:
/// **'Are you sure you want to change the status to '**
String get approve_msg;
/// No description provided for @yes.
///
/// In en, this message translates to:
/// **'Yes'**
String get yes;
/// No description provided for @no.
///
/// In en, this message translates to:
/// **'No'**
String get no;
/// No description provided for @no_result_found.
///
/// In en, this message translates to:
/// **'No results found'**
String get no_result_found;
/// No description provided for @search.
///
/// In en, this message translates to:
/// **'Search'**
String get search;
/// No description provided for @status_success.
///
/// In en, this message translates to:
/// **'Status updated successfully'**
String get status_success;
/// No description provided for @profile_updated_successfully.
///
/// In en, this message translates to:
/// **'Profile updated successfully'**
String get profile_updated_successfully;
/// No description provided for @create_new_password.
///
/// In en, this message translates to:
/// **'Create New Password'**
String get create_new_password;
/// No description provided for @different_password.
///
/// In en, this message translates to:
/// **'Your New Password Must Be Different form Previously Used Password'**
String get different_password;
/// No description provided for @old_password.
///
/// In en, this message translates to:
/// **'Old Password'**
String get old_password;
/// No description provided for @enter_new_password.
///
/// In en, this message translates to:
/// **'Enter new password'**
String get enter_new_password;
/// No description provided for @confirm_new_password.
///
/// In en, this message translates to:
/// **'Confirm new password'**
String get confirm_new_password;
/// No description provided for @password_changed_successfully.
///
/// In en, this message translates to:
/// **'Password Changed Successfully'**
String get password_changed_successfully;
/// No description provided for @enter_old_password.
///
/// In en, this message translates to:
/// **'Enter old Password'**
String get enter_old_password;
/// No description provided for @your_old_password_incorrect.
///
/// In en, this message translates to:
/// **'Your old password is incorrect.'**
String get your_old_password_incorrect;
/// No description provided for @failed_to_update_password.
///
/// In en, this message translates to:
/// **''**
String get failed_to_update_password;
/// No description provided for @password_update_successfully.
///
/// In en, this message translates to:
/// **'Password updated successfully.'**
String get password_update_successfully;
/// No description provided for @new_password_not_same_as_old.
///
/// In en, this message translates to:
/// **'New password must not be the same as the old password'**
String get new_password_not_same_as_old;
/// No description provided for @password_between_8_to_40.
///
/// In en, this message translates to:
/// **'Password must be between 8 and 40 characters'**
String get password_between_8_to_40;
/// No description provided for @new_password_required.
///
/// In en, this message translates to:
/// **'New password is required'**
String get new_password_required;
/// No description provided for @old_password_is_required.
///
/// In en, this message translates to:
/// **'Old password is required'**
String get old_password_is_required;
/// No description provided for @confirm_password_is_required.
///
/// In en, this message translates to:
/// **'Confirm password is required'**
String get confirm_password_is_required;
/// No description provided for @kpiCards.
///
/// In en, this message translates to:
/// **'View interactive KPI cards and graphs to explore data trends and compare key metrics visually.'**
String get kpiCards;
/// No description provided for @home_topic.
///
/// In en, this message translates to:
/// **'Tap on any category (e.g., Economy, Social, Environment) to explore detailed KPIs, visualizations, and data insights.'**
String get home_topic;
/// No description provided for @economy.
///
/// In en, this message translates to:
/// **'Access detailed statistics and drill-down pages for KPIs in the Economy category to uncover key trends and metrics.'**
String get economy;
/// No description provided for @bookMark.
///
/// In en, this message translates to:
/// **'Bookmark important KPIs or datasets for quick and easy access anytime through the Bookmarks section.'**
String get bookMark;
/// No description provided for @toggle.
///
/// In en, this message translates to:
/// **'Switch between English and Arabic using the language toggle at the top-right corner for a bilingual experience.'**
String get toggle;
/// No description provided for @tour_navBar.
///
/// In en, this message translates to:
/// **'Access dedicated pages and additional features by selecting options from the Main Menu.'**
String get tour_navBar;
/// No description provided for @mainMenu.
///
/// In en, this message translates to:
/// **'Use the navigation bar to quickly access Profile, Feedback, User Guide, Notifications, and other key app features.'**
String get mainMenu;
}
class _AppLocalizationsDelegate
extends LocalizationsDelegate<AppLocalizations> {
const _AppLocalizationsDelegate();
@override
Future<AppLocalizations> load(Locale locale) {
return SynchronousFuture<AppLocalizations>(lookupAppLocalizations(locale));
}
@override
bool isSupported(Locale locale) =>
<String>['ar', 'en'].contains(locale.languageCode);
@override
bool shouldReload(_AppLocalizationsDelegate old) => false;
}
AppLocalizations lookupAppLocalizations(Locale locale) {
// Lookup logic when only language code is specified.
switch (locale.languageCode) {
case 'ar':
return AppLocalizationsAr();
case 'en':
return AppLocalizationsEn();
}
throw FlutterError(
'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely '
'an issue with the localizations generation tool. Please file an issue '
'on GitHub with a reproducible sample app and the gen-l10n configuration '
'that was used.');
}

View File

@ -0,0 +1,376 @@
// ignore: unused_import
import 'package:intl/intl.dart' as intl;
import 'app_localizations.dart';
// ignore_for_file: type=lint
/// The translations for Arabic (`ar`).
class AppLocalizationsAr extends AppLocalizations {
AppLocalizationsAr([String locale = 'ar']) : super(locale);
@override
String get all_bookmarks => 'كل العلامات المرجعية';
@override
String get economy_title => 'اقتصاد';
@override
String get social_title => 'اجتماعي';
@override
String get environment_title => 'بيئة';
@override
String get economy_title_upper => 'اقتصاد';
@override
String get social_title_upper => 'اجتماعي';
@override
String get environment_title_upper => 'بيئة';
@override
String get bookmarks => 'الإشارات المرجعية';
@override
String get searchCountry => 'Search Country';
@override
String get feedback_title => 'تعليق';
@override
String get feedback_failed_msg =>
'لم يتم إرسال تعليقاتك. يرجى المحاولة مرة أخرى.';
@override
String get thankYou => 'شكراً';
@override
String get feedback_message => 'لملاحظاتك القيمة، نحن نقدر مساهمتك حقًا!';
@override
String get failed_to_sharefeedback => 'فشل في مشاركة الملاحظات';
@override
String get feedback_submitted => 'تم إرسال الملاحظات بنجاح!';
@override
String get formError => 'يرجى تصحيح الأخطاء قبل الإرسال.';
@override
String feedback_failed(Object error) {
return 'فشل في إرسال التعليق: $error';
}
@override
String get skip => 'تخطي';
@override
String get got_it => 'فهمت';
@override
String get exit_app => 'الخروج من التطبيق';
@override
String get exit_confirmation => 'هل أنت متأكد أنك تريد الخروج؟';
@override
String get cancel => 'إلغاء';
@override
String get exit => 'خروج';
@override
String get bookmark_title => 'إشارة مرجعية';
@override
String get failed_To_Remove => 'فشلت الإزالة';
@override
String get removed_from_Bookmark => 'تمت الإزالة من الإشارة المرجعية';
@override
String get added_to_Bookmark => 'تمت إضافته إلى الإشارة المرجعية';
@override
String get notification => 'إشعار';
@override
String get register_title => 'التسجيل';
@override
String get register_details => 'من فضلك ادخل بياناتك';
@override
String get register_name => 'اسم المستخدم';
@override
String get email_id => 'معرف البريد الإلكتروني';
@override
String get enter_name => 'أدخل الاسم';
@override
String get enter_your_email => 'أدخل بريدك الإلكتروني';
@override
String get enter_your_password => 'أدخل كلمة المرور';
@override
String get register_Confirm_password => 'تأكيد كلمة المرور';
@override
String get agree =>
'أوافق على الشروط والأحكام وسياسة الخصوصية للمركز الإتحادي للتنافسية والإحصاء';
@override
String get t_and => '';
@override
String get conditions => '';
@override
String get terms_conditions => 'الشروط والأحكام';
@override
String get privacy_policy => 'سياسة الخصوصية';
@override
String get account_confirmation => 'هل لديك حساب؟ سجل الدخول';
@override
String get login_title => 'تسجيل الدخول';
@override
String get all_updates => 'جميع التحديثات';
@override
String get app_updates => 'تحديثات التطبيق';
@override
String get notificationSocial => 'الاجتماعي';
@override
String get notificationEconomy => 'الاقتصاد';
@override
String get notificationEnvironment => 'البيئة';
@override
String get notificationFavourites => 'المفضلة';
@override
String get profile_title => 'نموذج الملاحظات';
@override
String get my_profile => 'ملفي الشخصي';
@override
String get logout => 'تسجيل الخروج';
@override
String get full_name => 'الاسم الكامل';
@override
String get dob => 'تاريخ الميلاد';
@override
String get region => 'الدولة/المنطقة';
@override
String get preferredLang => 'اللغة المفضلة';
@override
String get confirm => 'تأكيد';
@override
String get change_password => 'تغيير كلمة المرور';
@override
String get sure_save_page => ' هل أنت متأكد أنك ترغب في حفظ هذه الصفحة؟';
@override
String get not_able_to_change =>
'بمجرد الحفظ، لن تتمكن من تعديل اسمك أو تاريخ ميلادك.';
@override
String get save => 'حفظ';
@override
String get name => 'اسم';
@override
String get guide_title => 'نموذج الملاحظات';
@override
String get nav_home => 'الصفحة الرئيسية';
@override
String get nav_uae => 'أرقام الإمارات';
@override
String get nav_competitiveness => 'القدرة التنافسية';
@override
String get country_profile => 'ملف تعريف الدولة';
@override
String get agree_terms_conditions => 'يرجى الموافقة على الشروط والأحكام.';
@override
String get retry => 'Retry';
@override
String get select => 'يختار';
@override
String get email_exists => 'البريد الإلكتروني موجود';
@override
String get email_exists_msg =>
'معرف البريد الإلكتروني موجود بالفعل. الرجاء استخدام بريد إلكتروني مختلف.';
@override
String get email_invalid =>
'البريد الإلكتروني غير صالح أو قيد الاستخدام بالفعل.';
@override
String get required => 'مطلوب';
@override
String get only40charac => 'يجب ألا يتجاوز 40 حرفًا';
@override
String get invalid_characters => 'أحرف غير صالحة';
@override
String get invalid_email => 'البريد الإلكتروني غير صالح';
@override
String get password_invalid => 'تحتوي كلمة المرور على أحرف غير صالحة';
@override
String get password_match => 'كلمات المرور غير متطابقة';
@override
String get only8charac => 'يجب أن تتكون كلمة المرور من 8 أحرف على الأقل';
@override
String get manage_user => 'إدارة المستخدم';
@override
String get user_name => 'اسم المستخدم';
@override
String get reg_date => 'تاريخ التسجيل';
@override
String get status => 'الحالة';
@override
String get denied => 'مرفوض';
@override
String get pending => ' قيد الانتظار';
@override
String get approved => 'تمت الموافقة';
@override
String get approve_msg => 'هل أنت متأكد أنك ترغب في تغيير الحالة إلى';
@override
String get yes => 'نعم';
@override
String get no => 'لا';
@override
String get no_result_found => 'لم يتم العثور على نتائج';
@override
String get search => 'يبحث';
@override
String get status_success => 'تم تحديث الحالة بنجاح';
@override
String get profile_updated_successfully => 'تم تحديث الملف الشخصي بنجاح';
@override
String get create_new_password => 'إنشاء كلمة مرور جديدة';
@override
String get different_password =>
'يجب أن تكون كلمة المرور الجديدة مختلفة عن كلمة المرور المستخدمة سابقًا.';
@override
String get old_password => 'كلمة المرور القديمة';
@override
String get enter_new_password => 'أدخل كلمة المرور الجديدة';
@override
String get confirm_new_password => 'تأكيد كلمة المرور الجديدة';
@override
String get password_changed_successfully => 'تم تغيير كلمة المرور بنجاح';
@override
String get enter_old_password => 'أدخل كلمة المرور القديمة';
@override
String get your_old_password_incorrect =>
'كلمة المرور القديمة الخاصة بك غير صحيحة.';
@override
String get failed_to_update_password => '';
@override
String get password_update_successfully => 'تم تحديث كلمة المرور بنجاح.';
@override
String get new_password_not_same_as_old =>
'كلمة المرور الجديدة يجب ألا تكون نفس كلمة المرور القديمة';
@override
String get password_between_8_to_40 =>
'يجب أن تتراوح كلمة المرور بين 8 و40 حرفًا';
@override
String get new_password_required => 'كلمة المرور الجديدة مطلوبة';
@override
String get old_password_is_required => 'كلمة المرور القديمة مطلوبة';
@override
String get confirm_password_is_required => 'تأكيد كلمة المرور مطلوب';
@override
String get kpiCards =>
'يمكنك عرض بطاقات مؤشرات الأداء الرئيسية التفاعلية والرسوم البيانية لاستكشاف اتجاهات البيانات ومقارنة المقاييس الرئيسية بصريًا';
@override
String get home_topic =>
'اختر أي فئة (على سيبل المثال : الاقتصاد، الاجتماعية، البيئة) لاستكشاف مؤشرات الأداء الرئيسية التفصيلية ، التصورات، ورؤى البيانات .';
@override
String get economy =>
'يمكنك الوصول إلى الإحصائيات التفصيلية وصفحات التحليل لمؤشرات الأداء الرئيسية في فئة الاقتصاد لاكتشاف الاتجاهات والمقاييس الرئيسية .';
@override
String get bookMark =>
'يمكنك وضع إشارة مرجعية على مؤشرات الأداء الرئيسية أو مجموعات البيانات المهمة للوصول السريع والسهل في أي وقت من خلال قسم الإشارات المرجعية. ';
@override
String get toggle =>
'يمكنك التبديل بين اللغتين الإنجليزية والعربية باستخدام مفتاح تبديل اللغة في الزاوية اليمنى العليا للحصول على تجربة ثنائية اللغة.';
@override
String get tour_navBar =>
'يمكنك استخدام شريط التنقل للوصول السريع إلى الملف الشخصي ,التعليقات , دليل المستخدم , الإشعارات والميزات الأساسية الأخرى للتطبيق.';
@override
String get mainMenu =>
'يمكنك الوصول إلى الصفحات المخصصة والميزات الإضافية عن طريق تحديد الخيارات من القائمة الرئيسية.';
}

View File

@ -0,0 +1,374 @@
// ignore: unused_import
import 'package:intl/intl.dart' as intl;
import 'app_localizations.dart';
// ignore_for_file: type=lint
/// The translations for English (`en`).
class AppLocalizationsEn extends AppLocalizations {
AppLocalizationsEn([String locale = 'en']) : super(locale);
@override
String get all_bookmarks => 'All Bookmarks';
@override
String get economy_title => 'Economy';
@override
String get social_title => 'Social';
@override
String get environment_title => 'Environment';
@override
String get economy_title_upper => 'ECONOMY';
@override
String get social_title_upper => 'SOCIAL';
@override
String get environment_title_upper => 'ENVIRONMENT';
@override
String get bookmarks => 'Bookmarks';
@override
String get searchCountry => 'Search Country';
@override
String get feedback_title => 'Feedback';
@override
String get feedback_failed_msg =>
'Your feedback could not be \n submitted. Please try again';
@override
String get thankYou => 'Thank you';
@override
String get feedback_message =>
'For your valuable feedback, we truly appreciate your input!';
@override
String get failed_to_sharefeedback => 'Failed to Share Feedback';
@override
String get feedback_submitted => 'Feedback submitted successfully!';
@override
String get formError => 'Please correct the errors before submitting.';
@override
String feedback_failed(Object error) {
return 'Failed to submit feedback: $error';
}
@override
String get skip => 'Skip';
@override
String get got_it => 'Got it';
@override
String get exit_app => 'Exit App';
@override
String get exit_confirmation => 'Are you sure you want to exit?';
@override
String get cancel => 'Cancel';
@override
String get exit => 'Exit';
@override
String get bookmark_title => 'Bookmark';
@override
String get failed_To_Remove => 'Failed to Remove';
@override
String get removed_from_Bookmark => 'Removed from Bookmark';
@override
String get added_to_Bookmark => 'Added to Bookmark.';
@override
String get notification => 'Notification';
@override
String get register_title => 'Register';
@override
String get register_details => 'Please enter your details';
@override
String get register_name => 'Username';
@override
String get email_id => 'Email ID';
@override
String get enter_name => 'Enter your User Name';
@override
String get enter_your_email => 'Enter your email';
@override
String get enter_your_password => 'Enter your password';
@override
String get register_Confirm_password => 'Confirm password';
@override
String get agree => 'I agree to the ';
@override
String get t_and => ' and ';
@override
String get conditions => ' of FCSC';
@override
String get terms_conditions => 'Terms & Conditions';
@override
String get privacy_policy => 'Privacy Policy';
@override
String get account_confirmation => 'Already have an account?';
@override
String get login_title => 'Login';
@override
String get all_updates => 'All updates';
@override
String get app_updates => 'App updates';
@override
String get notificationSocial => 'Social';
@override
String get notificationEconomy => 'Economy';
@override
String get notificationEnvironment => 'Environment';
@override
String get notificationFavourites => 'Favourites';
@override
String get profile_title => 'Edit Profile';
@override
String get my_profile => 'My Profile';
@override
String get logout => 'Logout';
@override
String get full_name => 'Full Name*';
@override
String get dob => 'Date of Birth*';
@override
String get region => 'Country/Region';
@override
String get preferredLang => 'Preferred Language';
@override
String get confirm => 'Confirm';
@override
String get change_password => 'Change Password';
@override
String get sure_save_page => 'Are you sure you want to save this page? ';
@override
String get not_able_to_change =>
'Once saved, you will not be able to change your ';
@override
String get save => 'Save';
@override
String get name => 'Name';
@override
String get guide_title => 'User Guide';
@override
String get nav_home => 'HOME';
@override
String get nav_uae => 'UAE Numbers';
@override
String get nav_competitiveness => 'Competitiveness';
@override
String get country_profile => 'Country Profile';
@override
String get agree_terms_conditions => 'Please agree to terms and conditions.';
@override
String get retry => 'Retry';
@override
String get select => 'Select';
@override
String get email_exists => 'Email exists';
@override
String get email_exists_msg =>
'Email ID already exists. Please use a different email.';
@override
String get email_invalid => 'The email is invalid or already in use.';
@override
String get required => 'Required';
@override
String get only40charac => 'Must not exceed 40 characters';
@override
String get invalid_characters => 'Invalid Characters';
@override
String get invalid_email => 'Invalid Email';
@override
String get password_invalid => 'Password contains invalid characters';
@override
String get password_match => 'Passwords do not match';
@override
String get only8charac => 'Password must be at least 8characters';
@override
String get manage_user => 'Manage User';
@override
String get user_name => 'User Name';
@override
String get reg_date => 'Registration Date';
@override
String get status => 'Status';
@override
String get denied => 'Denied';
@override
String get pending => 'Pending';
@override
String get approved => 'Approved';
@override
String get approve_msg => 'Are you sure you want to change the status to ';
@override
String get yes => 'Yes';
@override
String get no => 'No';
@override
String get no_result_found => 'No results found';
@override
String get search => 'Search';
@override
String get status_success => 'Status updated successfully';
@override
String get profile_updated_successfully => 'Profile updated successfully';
@override
String get create_new_password => 'Create New Password';
@override
String get different_password =>
'Your New Password Must Be Different form Previously Used Password';
@override
String get old_password => 'Old Password';
@override
String get enter_new_password => 'Enter new password';
@override
String get confirm_new_password => 'Confirm new password';
@override
String get password_changed_successfully => 'Password Changed Successfully';
@override
String get enter_old_password => 'Enter old Password';
@override
String get your_old_password_incorrect => 'Your old password is incorrect.';
@override
String get failed_to_update_password => '';
@override
String get password_update_successfully => 'Password updated successfully.';
@override
String get new_password_not_same_as_old =>
'New password must not be the same as the old password';
@override
String get password_between_8_to_40 =>
'Password must be between 8 and 40 characters';
@override
String get new_password_required => 'New password is required';
@override
String get old_password_is_required => 'Old password is required';
@override
String get confirm_password_is_required => 'Confirm password is required';
@override
String get kpiCards =>
'View interactive KPI cards and graphs to explore data trends and compare key metrics visually.';
@override
String get home_topic =>
'Tap on any category (e.g., Economy, Social, Environment) to explore detailed KPIs, visualizations, and data insights.';
@override
String get economy =>
'Access detailed statistics and drill-down pages for KPIs in the Economy category to uncover key trends and metrics.';
@override
String get bookMark =>
'Bookmark important KPIs or datasets for quick and easy access anytime through the Bookmarks section.';
@override
String get toggle =>
'Switch between English and Arabic using the language toggle at the top-right corner for a bilingual experience.';
@override
String get tour_navBar =>
'Access dedicated pages and additional features by selecting options from the Main Menu.';
@override
String get mainMenu =>
'Use the navigation bar to quickly access Profile, Feedback, User Guide, Notifications, and other key app features.';
}

View File

@ -12,8 +12,7 @@ import 'package:uae_stat/config/injector.dart';
import 'package:uae_stat/config/my_router.dart';
import 'package:uae_stat/config/theme/theme_provider.dart';
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:uae_stat/l10n/app_localizations.dart';
// void main() async {
// WidgetsFlutterBinding.ensureInitialized();
// // await (await SharedPreferences.getInstance()).clear();

View File

@ -1,10 +1,10 @@
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import 'package:flutter_svg/flutter_svg.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/l10n/app_localizations.dart';
import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
import 'package:fl_chart/fl_chart.dart';
import 'package:external_repos/external_repos.dart';

View File

@ -1,913 +0,0 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import 'package:tutorial_coach_mark/tutorial_coach_mark.dart';
import 'package:uae_stat/domain/use_cases/language.dart';
import 'package:uae_stat/presentation/components/constant/constant.dart';
import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
import 'package:fl_chart/fl_chart.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:uae_stat/presentation/Screens/app_tour/Target_content.dart';
class Marriages extends ConsumerStatefulWidget {
const Marriages({super.key});
@override
ConsumerState<Marriages> createState() => _MarriagesState();
}
class _MarriagesState extends ConsumerState<Marriages> {
late List<TargetFocus> marriageTargets;
late List<TargetFocus> previousMarriageTargets;
late TutorialCoachMark tutorialCoachMark;
final GlobalKey chartKey = GlobalKey();
final GlobalKey bookMarkKey = GlobalKey();
late double cardHeight= 0;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
_calculateMarkPosition();
_startTutorialAfterRender();
});
}
void handleSkip() {
tutorialCoachMark.skip();
debugPrint('Skip clicked');
ref.read(chartsTourProvider.notifier).state = true;
ref.read(previousChartsTourProvider.notifier).state = true;
ref.read(homeTourProvider.notifier).state = true;
ref.read( previousHomeTourProvider.notifier).state = true;
ref.read(scaffoldTourProvider.notifier).state = true;
ref.read(previousScaffoldTourProvider.notifier).state = true;
context.go('/myhomepage');
}
void _kpiTutorialCoachMark() {
_initmarriageTargets();
tutorialCoachMark = TutorialCoachMark(
paddingFocus: 0,
useSafeArea: true,
pulseEnable: false,
hideSkip: true,
targets: marriageTargets,
onClickTarget: (target) {
if (target.identify == 'chartKey') {
// Scroll to the long widget
Scrollable.ensureVisible(
chartKey.currentContext!,
duration: Duration(milliseconds: 500),
);
}
},
onFinish: () {
context.push('/myhomepage');
debugPrint('Marriage Tutorial Finished');
},
)..show(context: context);
}
void _previousKpiTutorial() {
_initpreviousTargets();
tutorialCoachMark = TutorialCoachMark(
paddingFocus: 0,
useSafeArea: true,
pulseEnable: false,
hideSkip: true,
targets: previousMarriageTargets,
onFinish: () {
context.push('/myhomepage');
debugPrint('Previous Marriage Tutorial Finished');
},
)..show(context: context);
}
void _startTutorialAfterRender() {
final chartTour = ref.watch(chartsTourProvider);
final previousChartTour = ref.watch(previousChartsTourProvider);
if (chartKey.currentContext != null && !chartTour) {
_kpiTutorialCoachMark();
} else if(!previousChartTour) {
_previousKpiTutorial();
}
else if (!chartTour || !previousChartTour){
Future.delayed(Duration(milliseconds: 100), _startTutorialAfterRender);
}else{
return;
}
}
void _calculateMarkPosition() {
final RenderBox cardRenderBox = bookMarkKey.currentContext!.findRenderObject() as RenderBox;
final Size cardSize = cardRenderBox.size;
cardHeight = cardSize.height;
debugPrint('height : $cardHeight');
}
void _initmarriageTargets(){
final double screenWidth= MediaQuery.of(context).size.width;
final double screenHeight= MediaQuery.of(context).size.height;
marriageTargets=[
TargetFocus(
identify: 'chartsKey',
keyTarget: chartKey,
shape: ShapeLightFocus.RRect,
contents: [
createTargetContent(
text: AppLocalizations.of(context)!.kpiCards,
alignment: ContentAlign.top,
gap:50,
space: 0,
),
TargetContent(
align: ContentAlign.bottom,
child: SizedBox(
width: double.infinity,
height: MediaQuery.of(context).size.height*0.3,
child: Stack(
children: [
Positioned(
bottom: 25,
left: 16,
right: 16,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
ElevatedButton(
onPressed: () => handleSkip(),
style: ElevatedButton.styleFrom(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
side: const BorderSide(color: Colors.white),
backgroundColor: Colors.transparent,
elevation: 0,
),
child: Text(
'Skip',
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
color: Colors.white,
fontSize: 14,
),
),
),
Column(
children: [
Text(
'3/7',
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
color: Colors.white,
fontSize: 14,
),
),
const SizedBox(height: 3),
Row(
children: [
Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(color: Colors.white, width: 2.0),
),
child: IconButton(
iconSize: 20,
icon: const Icon(Icons.arrow_back, color: Colors.white),
onPressed: () {
ref.read(chartsTourProvider.notifier).state=true;
ref.read(previousHomeTourProvider.notifier).state=false;
tutorialCoachMark.finish();
},
),
),
const SizedBox(width: 10),
Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Color(0xFF7DAFBC),
border: Border.all(color: Color(0xFF7DAFBC), width: 1.5),
),
child: IconButton(
iconSize: 20,
icon: const Icon(Icons.arrow_forward, color: Colors.white),
onPressed: () {
tutorialCoachMark.next();
},
),
),
],
),
],
),
],
),
),
],
),
),
),
TargetContent(
padding: EdgeInsets.only(bottom: 0,top : 0,),
align: ContentAlign.top,
child: SizedBox(
width: MediaQuery.of(context).size.width,
height:MediaQuery.of(context).size.height*0.69 ,
child: Stack(
children: [
Positioned(
left: MediaQuery.of(context).size.width*0.40,
bottom: 0,
child: Image.asset(
'assets/app_tour/leftUp.png',
width: 100,
height: 90,
),
),
]
),
),
),
],
),
TargetFocus(
identify: 'BookMarkKey',
keyTarget: bookMarkKey,
shape: ShapeLightFocus.RRect,
contents: [
createTargetContent(
text: AppLocalizations.of(context)!.bookMark,
alignment: ContentAlign.bottom,
gap: 23,
space: 50,
),
TargetContent(
align: ContentAlign.bottom,
child: SizedBox(
width: double.infinity,
height: MediaQuery.of(context).size.height*0.60,
child: Stack(
children: [
Positioned(
bottom: 35,
left: 16,
right: 16,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
ElevatedButton(
onPressed: () => handleSkip(),
style: ElevatedButton.styleFrom(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
side: const BorderSide(color: Colors.white),
backgroundColor: Colors.transparent,
elevation: 0,
),
child: Text(
'Skip',
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
color: Colors.white,
fontSize: 14,
),
),
),
Column(
children: [
Text(
'4/7',
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
color: Colors.white,
fontSize: 14,
),
),
const SizedBox(height: 3),
Row(
children: [
Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(color: Colors.white, width: 2.0),
),
child: IconButton(
iconSize: 20,
icon: const Icon(Icons.arrow_back, color: Colors.white),
onPressed: () {
tutorialCoachMark.previous();
},
),
),
const SizedBox(width: 10),
Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Color(0xFF7DAFBC),
border: Border.all(color: Color(0xFF7DAFBC), width: 1),
),
child: IconButton(
iconSize: 20,
icon: const Icon(Icons.arrow_forward, color: Colors.white),
onPressed: () {
ref.read(chartsTourProvider.notifier).state=true;
ref.read(scaffoldTourProvider.notifier).state=false;
tutorialCoachMark.finish();
},
),
),
],
),
],
),
],
),
),
],
),
),
),
TargetContent(
padding: EdgeInsets.only(left:0, top: cardHeight+20),
align: ContentAlign.right,
child: Container(
width: screenWidth/4,
height: screenHeight,
child: Stack(
children: [
Image.asset(
'assets/app_tour/leftDown.png',
fit: BoxFit.contain,
),
// Positioned(
// top: 0,
// left: MediaQuery.of(context).size.width* 0.5,
// child: SizedBox(
// width: 50,
// height: 100,
// child: Image.asset(
// 'assets/app_tour/bookmark2.png',
// fit: BoxFit.contain,
// ),
// ),
// ),
],
),
),
),
],
),
];
}
void _initpreviousTargets(){
final double screenWidth= MediaQuery.of(context).size.width;
final double screenHeight= MediaQuery.of(context).size.height;
previousMarriageTargets=[
TargetFocus(
identify: 'BookMarkKey',
keyTarget: bookMarkKey,
shape: ShapeLightFocus.RRect,
contents: [
createTargetContent(
text: AppLocalizations.of(context)!.bookMark,
space: 50,
alignment: ContentAlign.bottom,
gap: 23,
),
TargetContent(
align: ContentAlign.bottom,
child: SizedBox(
width: double.infinity,
height: MediaQuery.of(context).size.height*0.60,
child: Stack(
children: [
Positioned(
bottom: 35,
left: 16,
right: 16,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
ElevatedButton(
onPressed: () => handleSkip(),
style: ElevatedButton.styleFrom(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
side: const BorderSide(color: Colors.white),
backgroundColor: Colors.transparent,
elevation: 0,
),
child: Text(
'Skip',
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
color: Colors.white,
fontSize: 14,
),
),
),
Column(
children: [
Text(
'4/7',
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
color: Colors.white,
fontSize: 14,
),
),
const SizedBox(height: 3),
Row(
children: [
Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(color: Colors.white, width: 2.0),
),
child: IconButton(
iconSize: 20,
icon: const Icon(Icons.arrow_back, color: Colors.white),
onPressed: () {
tutorialCoachMark.next();
},
),
),
const SizedBox(width: 10),
Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Color(0xFF7DAFBC),
border: Border.all(color:Color(0xFF7DAFBC), width: 1.5),
),
child: IconButton(
iconSize: 20,
icon: const Icon(Icons.arrow_forward, color: Colors.white),
onPressed: () {
ref.read(chartsTourProvider.notifier).state=true;
ref.read(scaffoldTourProvider.notifier).state=false;
tutorialCoachMark.finish();
},
),
),
],
),
],
),
],
),
),
],
),
),
),
TargetContent(
padding: EdgeInsets.only(left:0, top: cardHeight+20),
align: ContentAlign.right,
child: Container(
width: screenWidth/4,
height: screenHeight,
child: Stack(
children: [
Image.asset(
'assets/app_tour/leftDown.png',
fit: BoxFit.contain,
),
// Positioned(
// top: 0,
// left: MediaQuery.of(context).size.width* 0.5,
// child: SizedBox(
// width: 50,
// height: 100,
// child: Image.asset(
// 'assets/app_tour/bookmark2.png',
// fit: BoxFit.contain,
// ),
// ),
// ),
],
),
),
),
],
),
TargetFocus(
identify: 'chartsKey',
keyTarget: chartKey,
shape: ShapeLightFocus.RRect,
contents: [
createTargetContent(
text: AppLocalizations.of(context)!.kpiCards,
space: 0,
alignment: ContentAlign.top,
gap:50,
),
TargetContent(
align: ContentAlign.bottom,
child: SizedBox(
width: double.infinity,
height: MediaQuery.of(context).size.height*0.3,
child: Stack(
children: [
Positioned(
bottom: 30,
left: 16,
right: 16,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
ElevatedButton(
onPressed: () => handleSkip(),
style: ElevatedButton.styleFrom(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
side: const BorderSide(color: Colors.white),
backgroundColor: Colors.transparent,
elevation: 0,
),
child: Text(
'Skip',
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
color: Colors.white,
fontSize: 14,
),
),
),
Column(
children: [
Text(
'3/7',
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
color: Colors.white,
fontSize: 14,
),
),
const SizedBox(height: 3),
Row(
children: [
Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(color: Colors.white, width: 2.0),
),
child: IconButton(
iconSize: 20,
icon: const Icon(Icons.arrow_back, color: Colors.white),
onPressed: () {
ref.read(previousChartsTourProvider.notifier).state=true;
ref.read(previousHomeTourProvider.notifier).state=false;
tutorialCoachMark.finish();
},
),
),
const SizedBox(width: 10),
Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Color(0xFF7DAFBC),
border: Border.all(color:Color(0xFF7DAFBC), width: 1.5),
),
child: IconButton(
iconSize: 20,
icon: const Icon(Icons.arrow_forward, color: Colors.white),
onPressed: () {
tutorialCoachMark.previous();
},
),
),
],
),
],
),
],
),
),
],
),
),
),
TargetContent(
padding: EdgeInsets.only(bottom: 0,top : 0,),
align: ContentAlign.top,
child: SizedBox(
width: MediaQuery.of(context).size.width,
height:MediaQuery.of(context).size.height*0.69 ,
child: Stack(
children: [
Positioned(
left: MediaQuery.of(context).size.width*0.40,
bottom: 0,
child: Image.asset(
'assets/app_tour/leftUp.png',
width: 100,
height: 90,
),
),
]
),
),
),
],
),
];
}
@override
Widget build(BuildContext context) {
double myheight = MediaQuery.of(context).size.height;
double mywidth = MediaQuery.of(context).size.width;
final List<String> xAxisData = ['2019', '2020', '2021', '2022', '2023'];
final List<double> yAxisData = [2, 4, 1, 5, 3];
return BaseScaffold(
appbarColor: Color(0xFFC6BEB2),
title: Text("UAE Numbers",style: TextStyle(color: Colors.white,fontWeight: FontWeight.bold),),
showBackButton: true,
body: SingleChildScrollView(
child: Column(
children : [
Container(
height: myheight/4.5,
width: double.infinity,
color: Color(0xFFC6BEB2),
child: Padding(padding: EdgeInsets.only(left: 30,right: 30,top: 20,bottom: 10),child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("SOCIAL",style: TextStyle(color: Colors.white,fontSize: 30),),
Container(width: mywidth/5,child: Divider(thickness: 10,color: Colors.white,)),
Text("Marriages",style: TextStyle(color: Colors.white,fontSize: 20),),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
IconButton(key :bookMarkKey,onPressed: (){}, icon: Icon(Icons.bookmark_add_outlined,color: Colors.white,size: 40,)),
IconButton(onPressed: (){}, icon: Icon(Icons.share,color: Colors.white,size: 30,)),
],),
],
),)
),
SingleChildScrollView(child: Container(
height: myheight,
color: Color(0xFFC6BEB2),
child: Padding(
padding: const EdgeInsets.only(top: 0.0,left: 10,right: 10,bottom: 20),
child: Column(
children: [
Row(
key:chartKey,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Container(height: myheight/3.5,width: mywidth/2.5,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(10))
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset(
'assets/icons/indicator/social/marriage.png',
height: myheight / 10, // This ensures the image fits within the container's height
width: myheight / 10, // You can adjust the size as needed
),
Text("Total",style: TextStyle(fontWeight: FontWeight.bold,fontSize: 26),),
Text("2022",style: TextStyle(fontSize: 15,color: Colors.grey),),
Text("16759",style: TextStyle(fontSize: 26,fontWeight: FontWeight.bold,color: socialColor),),
],
),
),
Container(height: myheight/3.5,width: mywidth/2.5,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(10))
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset(
'assets/icons/indicator/social/marriage.png',
height: myheight / 10, // This ensures the image fits within the container's height
width: myheight / 10, // You can adjust the size as needed
),
Text("Average",style: TextStyle(fontWeight: FontWeight.bold,fontSize: 26),),
Text("(2021 - 2022)",style: TextStyle(fontSize: 15,color: Colors.grey),),
Text("15987",style: TextStyle(fontSize: 26,fontWeight: FontWeight.bold,color: socialColor),),
],
),
),
],
),
SizedBox(height: myheight/20,),
Container(
height: myheight/2.5,
width: mywidth/1.2,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(10))
),
child: Padding(
padding: const EdgeInsets.all(10.0),
child: Column(
children: [
SizedBox(height: myheight/30,),
Center(child: Text("Total Marriages by Marriage Type",style: TextStyle(fontSize: 16,fontWeight: FontWeight.bold),),
),
SizedBox(height: myheight/30,),
Container(
height: myheight/4,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12),
boxShadow: [
BoxShadow(
color: Colors.black12,
blurRadius: 8,
offset: Offset(0, 4),
),
],
),
child:
Padding(
padding: const EdgeInsets.only(top: 16,left: 8.0,right: 8.0,bottom: 8.0),
child: BarChart(
BarChartData(
alignment: BarChartAlignment.spaceAround,
maxY: 8,
barTouchData: BarTouchData(enabled: false),
titlesData: FlTitlesData(
leftTitles: AxisTitles(
sideTitles: SideTitles(
showTitles: true,
interval: 2,
getTitlesWidget: (value, meta) {
return Padding(
padding: const EdgeInsets.only(right: 8.0),
child: Text('${value.toInt()}K'),
);
},
reservedSize: 60,
),
),
bottomTitles: AxisTitles(
sideTitles: SideTitles(
showTitles: true,
getTitlesWidget: (value, meta) {
return Padding(
padding: const EdgeInsets.only(top: 8.0),
child: Text(xAxisData[value.toInt()]),
);
},
reservedSize: 40,
),
),
topTitles: AxisTitles(
sideTitles: SideTitles(showTitles: false), // Hides top titles
),
rightTitles: AxisTitles(
sideTitles: SideTitles(showTitles: false), // Hides right titles
),
),
gridData: FlGridData(show: false),
borderData: FlBorderData(show: false),
barGroups: List.generate(
xAxisData.length,
(index) => BarChartGroupData(
x: index,
barRods: [
BarChartRodData(
toY: yAxisData[index],
color: Colors.blueAccent,
//colors: [Colors.blueAccent],
borderRadius: BorderRadius.circular(4),
width: 20,
),
],
),
),
),
),
),
),
// Container(
// decoration: BoxDecoration(
// color: Colors.white,
// borderRadius: BorderRadius.circular(12),
// boxShadow: [
// BoxShadow(
// color: Colors.black12,
// blurRadius: 8,
// offset: Offset(0, 4),
// ),
// ],
// ),
// child:
// BarChart(
// BarChartData(
// alignment: BarChartAlignment.spaceAround,
// maxY: 20,
// barTouchData: BarTouchData(enabled: false),
// titlesData: FlTitlesData(
// leftTitles: AxisTitles(
// sideTitles: SideTitles(
// showTitles: true,
// getTitlesWidget: (value, meta) {
// return Padding(
// padding: const EdgeInsets.only(right: 8.0),
// child: Text('${value.toInt()}K'),
// );
// },
// reservedSize: 40,
// ),
// ),
// bottomTitles: AxisTitles(
// sideTitles: SideTitles(
// showTitles: true,
// getTitlesWidget: (value, meta) {
// return Padding(
// padding: const EdgeInsets.only(top: 8.0),
// child: Text(xAxisData[value.toInt()]),
// );
// },
// reservedSize: 40,
// ),
// ),
// ),
// gridData: FlGridData(show: false),
// borderData: FlBorderData(show: false),
// barGroups: List.generate(
// xAxisData.length,
// (index) => BarChartGroupData(
// x: index,
// barRods: [
// BarChartRodData(
// toY: yAxisData[index],
// color: Colors.blueAccent,
// //colors: [Colors.blueAccent],
// borderRadius: BorderRadius.circular(4),
// width: 20,
// ),
// ],
// ),
// ),
// ),
// ),
// ),
],
),
),
)
],
),
),
),)
]
),
), mycenterTitle: false,
);
}
}

View File

@ -17,8 +17,7 @@ import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.
import 'package:uae_stat/presentation/components/constant/constant.dart';
import 'package:http/http.dart' as http;
import 'package:uae_stat/config/api_config.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
// import 'package:uae_stat/l10n/app_localizations.dart';
import 'package:uae_stat/l10n/app_localizations.dart';
class UaeNumbers extends ConsumerWidget {
const UaeNumbers({super.key});

View File

@ -16,8 +16,7 @@ import 'package:uae_stat/presentation/Screens/profilepage.dart';
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
import 'package:uae_stat/presentation/components/my_toggle.dart';
import 'package:uae_stat/presentation/components/space.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
// import 'package:uae_stat/l10n/app_localizations.dart';
import 'package:uae_stat/l10n/app_localizations.dart';
import 'package:uae_stat/config/my_theme.dart';
class CreateNewPw extends ConsumerStatefulWidget {

View File

@ -11,12 +11,11 @@ import 'package:uae_stat/domain/use_cases/language.dart';
import 'package:uae_stat/infrastructure/data/p_auth_repo.dart';
import 'package:uae_stat/infrastructure/services/img_asset_paths/banner_asset_path.dart';
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/misc_icon_asset_path.dart';
import 'package:uae_stat/l10n/app_localizations.dart';
import 'package:uae_stat/presentation/Screens/profilepage.dart';
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
import 'package:uae_stat/presentation/components/my_toggle.dart';
import 'package:uae_stat/presentation/components/space.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:uae_stat/config/my_theme.dart';
class ForgotPassword extends ConsumerStatefulWidget {

View File

@ -13,8 +13,7 @@ import 'package:uae_stat/domain/use_cases/language.dart';
import 'package:uae_stat/infrastructure/services/img_asset_paths/banner_asset_path.dart';
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/misc_icon_asset_path.dart';
import 'package:uae_stat/presentation/Screens/profilepage.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
// import 'package:uae_stat/l10n/app_localizations.dart';
import 'package:uae_stat/l10n/app_localizations.dart';
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
import 'package:uae_stat/presentation/components/my_toggle.dart';

View File

@ -22,7 +22,7 @@ import 'package:uae_stat/presentation/Screens/charts/services/api_service.dart';
import 'package:uae_stat/presentation/Screens/charts/widgets/chart_widget.dart';
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
import 'package:uae_stat/presentation/components/my_toggle.dart';
// import 'package:uae_stat/l10n/app_localizations.dart';
import 'package:uae_stat/l10n/app_localizations.dart';
import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
import 'package:uae_stat/presentation/Screens/app_tour/Target_content.dart';
import '../filters/search_filter_helper.dart';
@ -30,7 +30,6 @@ import 'package:flutter_svg/flutter_svg.dart';
import 'package:share_plus/share_plus.dart';
import 'package:path_provider/path_provider.dart';
import 'dart:io';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
class ChartScreen1 extends ConsumerStatefulWidget {
final String dataSets;

View File

@ -23,8 +23,7 @@ import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/misc_icon
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
import 'package:uae_stat/presentation/components/my_toggle.dart';
import 'package:uae_stat/presentation/routes/bottom_bar_routes/tab_routes/home_route.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
// import 'package:uae_stat/l10n/app_localizations.dart';
import 'package:uae_stat/l10n/app_localizations.dart';
import '../components/my_bottom_nav_bar.dart';
import 'auth_verification/changepassword.dart';
import 'demo_home.dart';

View File

@ -25,6 +25,7 @@ import 'package:uae_stat/domain/use_cases/language.dart';
import 'package:uae_stat/infrastructure/data/p_auth_repo.dart';
import 'package:uae_stat/infrastructure/services/img_asset_paths/banner_asset_path.dart';
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/misc_icon_asset_path.dart';
import 'package:uae_stat/l10n/app_localizations.dart';
import 'package:uae_stat/presentation/Screens/demo_home.dart';
import 'package:uae_stat/presentation/components/dialogs.dart';
import 'package:uae_stat/presentation/components/lang_toggle.dart';
@ -36,8 +37,7 @@ import 'package:http/http.dart' as http;
import 'package:url_launcher/url_launcher.dart';
import '../../Screens/auth_verification/registration.dart';
import 'package:pocketbase/pocketbase.dart';
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 '../../components/indicators/locale_provider.dart';
import '../../components/my_toggle.dart';

View File

@ -175,11 +175,11 @@ import 'package:uae_stat/config/toggle_lang_service.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/services/img_asset_paths/logo_asset_path.dart';
import 'package:uae_stat/l10n/app_localizations.dart';
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
import 'package:tutorial_coach_mark/tutorial_coach_mark.dart';
import 'package:uae_stat/presentation/Screens/app_tour/Target_content.dart';
import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
import 'package:http/http.dart' as http;
import 'package:uae_stat/config/api_config.dart';

View File

@ -6,8 +6,7 @@ import 'package:flutter_svg/svg.dart';
import 'package:go_router/go_router.dart';
import 'package:dio/dio.dart';
import 'package:http/http.dart' as http;
// import 'package:uae_stat/l10n/app_localizations.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:uae_stat/l10n/app_localizations.dart';
import 'package:pocketbase/pocketbase.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:uae_stat/config/api_config.dart';

View File

@ -23,8 +23,7 @@ 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/presentation/components/indicators/locale_provider.dart';
import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
// import 'package:uae_stat/l10n/app_localizations.dart';
import 'package:uae_stat/l10n/app_localizations.dart';
class EditProfile extends ConsumerStatefulWidget {
const EditProfile({super.key});

View File

@ -8,7 +8,6 @@ import 'package:go_router/go_router.dart';
import 'package:http/http.dart' as http;
import 'package:intl/intl.dart';
import 'package:uae_stat/config/theme/theme_provider.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:pocketbase/pocketbase.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:uae_stat/config/api_config.dart';
@ -18,6 +17,7 @@ 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/packages/go_router.dart';
import 'package:uae_stat/l10n/app_localizations.dart';
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
import 'package:uae_stat/presentation/components/my_drawer.dart';
import 'package:mailer/mailer.dart';

View File

@ -17,8 +17,7 @@ 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_drawer.dart';
import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
// import 'package:uae_stat/l10n/app_localizations.dart';
import 'package:uae_stat/l10n/app_localizations.dart';
class ManageUserRouter extends ConsumerStatefulWidget {
late final Widget title;

View File

@ -14,8 +14,7 @@ import 'package:uae_stat/domain/use_cases/language.dart';
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
import '../../custom_drawer_routes.dart';
import 'package:http/http.dart' as http;
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
// import 'package:uae_stat/l10n/app_localizations.dart';
import 'package:uae_stat/l10n/app_localizations.dart';
class NotificationPage extends ConsumerStatefulWidget {
@override

View File

@ -4,14 +4,10 @@ import 'package:go_router/go_router.dart';
import 'package:uae_stat/config/theme/theme_provider.dart';
import 'package:uae_stat/config/toggle_lang_service.dart';
import 'package:uae_stat/domain/use_cases/language.dart';
// import 'package:flutter_gen/gen_l10n/app_localizations.dart';
// import 'package:uae_stat/l10n/app_localizations.dart';
import 'package:uae_stat/l10n/app_localizations.dart';
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
// import 'package:uae_stat/presentation/Screens/Bottom%20Navigation%20Pages/Country_Profile/country_profile.dart';
import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
import 'package:iconify_design/iconify_design.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
// import 'package:uae_stat/l10n/app_localizations.dart';
class Userguide extends ConsumerStatefulWidget {
Userguide({super.key});

View File

@ -12,7 +12,6 @@ import 'package:package_info_plus/package_info_plus.dart';
import 'package:pocketbase/pocketbase.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:tutorial_coach_mark/tutorial_coach_mark.dart';
import 'package:uae_stat/config/injector.dart';
import 'package:uae_stat/config/theme/app_theme.dart';
@ -24,7 +23,7 @@ import 'package:uae_stat/domain/use_cases/language.dart';
import 'package:uae_stat/infrastructure/data/p_auth_repo.dart';
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/bottom_bar_asset_icon_path.dart';
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/drawer_asset_icon_path.dart';
// import 'package:uae_stat/l10n/app_localizations.dart';
import 'package:uae_stat/l10n/app_localizations.dart';
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
import 'package:uae_stat/presentation/components/my_toggle.dart';

View File

@ -117,10 +117,10 @@ packages:
dependency: transitive
description:
name: async
sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
url: "https://pub.dev"
source: hosted
version: "2.12.0"
version: "2.13.0"
boolean_selector:
dependency: transitive
description:
@ -476,10 +476,10 @@ packages:
dependency: transitive
description:
name: fake_async
sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc"
sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
url: "https://pub.dev"
source: hosted
version: "1.3.2"
version: "1.3.3"
fast_immutable_collections:
dependency: "direct main"
description:
@ -1024,10 +1024,10 @@ packages:
dependency: "direct main"
description:
name: intl
sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5"
url: "https://pub.dev"
source: hosted
version: "0.19.0"
version: "0.20.2"
io:
dependency: transitive
description:
@ -1072,10 +1072,10 @@ packages:
dependency: transitive
description:
name: leak_tracker
sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
url: "https://pub.dev"
source: hosted
version: "10.0.8"
version: "10.0.9"
leak_tracker_flutter_testing:
dependency: transitive
description:
@ -1136,10 +1136,10 @@ packages:
dependency: "direct main"
description:
name: material_charts
sha256: ada5af96e9cdd9888c1931eaf307e6693408584ca0de1b1c795f9862590f9fcf
sha256: f30b2410c00cc946440e606600b7b72d107737ec508a1300fbc4119820a0f454
url: "https://pub.dev"
source: hosted
version: "0.0.25"
version: "0.0.28"
material_color_utilities:
dependency: transitive
description:
@ -1795,10 +1795,10 @@ packages:
dependency: transitive
description:
name: vm_service
sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14"
sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
url: "https://pub.dev"
source: hosted
version: "14.3.1"
version: "15.0.0"
watcher:
dependency: transitive
description:

View File

@ -33,7 +33,7 @@ dependencies:
# path: packages/dynamic_layouts
csv: ^6.0.0
excel: ^4.0.2
intl: ^0.19.0
intl: ^0.20.2
# firebase_core: ^3.12.1
the_validator: ^2.0.0
pocketbase: ^0.18.1