Merge branch 'dev' of github.com:VinistanSS/FCSC into dev

This commit is contained in:
venbaittech 2025-01-22 18:49:08 +05:30
commit 1a39a7c740
13 changed files with 746 additions and 651 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

View File

@ -299,6 +299,7 @@ import 'package:uae_stat/presentation/Screens/auth_verification/registration.dar
import 'package:uae_stat/presentation/Screens/charts/chart.dart'; import 'package:uae_stat/presentation/Screens/charts/chart.dart';
import 'package:uae_stat/presentation/Screens/charts/screens/chart_screen.dart'; import 'package:uae_stat/presentation/Screens/charts/screens/chart_screen.dart';
import 'package:uae_stat/presentation/Screens/demo_home2.dart'; import 'package:uae_stat/presentation/Screens/demo_home2.dart';
import 'package:uae_stat/presentation/Screens/online_offline_verification/internet_check.dart';
import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/getting_started.dart'; import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/getting_started.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';
@ -329,6 +330,11 @@ final GoRouter router = GoRouter(
//builder: (context, state) => LoginRoute(), //builder: (context, state) => LoginRoute(),
builder: (context, state) => LoginRoute(), builder: (context, state) => LoginRoute(),
), ),
GoRoute(
path: '/internetcheck',
builder: (context, state) => InternetCheck(),
),
GoRoute( GoRoute(
path: '/login', path: '/login',
builder: (context, state) => LoginRoute(), builder: (context, state) => LoginRoute(),

View File

@ -0,0 +1,32 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:connectivity_plus/connectivity_plus.dart';
class ConnectivityService {
final Connectivity _connectivity = Connectivity();
// This will hold the connectivity status
Stream<List<ConnectivityResult>> get connectivityStream =>
_connectivity.onConnectivityChanged;
}
// The provider that will provide the connectivity service
final connectivityServiceProvider = Provider<ConnectivityService>((ref) {
return ConnectivityService();
});
// StateNotifier to manage connectivity state
class ConnectivityNotifier extends StateNotifier<bool> {
final ConnectivityService _connectivityService;
ConnectivityNotifier(this._connectivityService) : super(true) {
_connectivityService.connectivityStream.listen((result) {
state = result != ConnectivityResult.none;
});
}
}
// The provider for the connectivity state
final connectivityProvider = StateNotifierProvider<ConnectivityNotifier, bool>((ref) {
final connectivityService = ref.read(connectivityServiceProvider);
return ConnectivityNotifier(connectivityService);
});

View File

@ -1,24 +1,24 @@
{ {
"feedback_title": "نموذج الملاحظات", "feedback_title": "التعليقات",
"feedback_failed_msg": "لم يتم إرسال تعليقاتك. يرجى المحاولة مرة أخرى", "feedback_failed_msg": "لم يتم إرسال تعليقاتك. يرجى المحاولة مرة أخرى.",
"guide_title": "نموذج الملاحظات", "guide_title": "نموذج الملاحظات",
"register_title": "التسجيل", "register_title": "التسجيل",
"register_details": "من فضلك ادخل بياناتك", "register_details": "من فضلك ادخل بياناتك",
"register_name": "اسم المستخدم", "register_name": "اسم المستخدم",
"email_id": "الاسم الكامل", "email_id": "معرف البريد الإلكتروني",
"enter_name": "أدخل الاسم", "enter_name": "أدخل الاسم",
"register_email": "أدخل بريدك الإلكتروني", "enter_your_email": "أدخل بريدك الإلكتروني",
"register_password": "دخل كلمة المرور", "enter_your_password": "أدخل كلمة المرور",
"register_Confirm_password": "أكيد كلمة المرو", "register_Confirm_password": "تأكيد كلمة المرور",
"agree": " وافق على", "agree": "أوافق على الشروط والأحكام وسياسة الخصوصية للمركز الإتحادي للتنافسية والإحصاء",
"t_and": "و ", "t_and": "",
"conditions": " الخاصة بالمركز الاتحادي للتنافسية والإحصاء", "conditions": "",
"terms_conditions": "الشروط والأحكام ", "terms_conditions": "",
"privacy_policy":" وسياسة الخصوصية", "privacy_policy":"",
"account_confirmation": "ل لديك حساب؟ سجل الدخول ", "account_confirmation": "هل لديك حساب؟ سجل الدخول",
"login_title": "سجيل الدخول", "login_title": "تسجيل الدخول",
"profile_title": "نموذج الملاحظات", "profile_title": "نموذج الملاحظات",
"my_profile": "ملفي الشخصي", "my_profile": "ملفي الشخصي",
@ -30,8 +30,8 @@
"confirm": "تأكيد", "confirm": "تأكيد",
"change_password": "تغيير كلمة المرور", "change_password": "تغيير كلمة المرور",
"sure_save_page": " هل أنت متأكد أنك ترغب في حفظ هذه الصفحة؟", "sure_save_page": " هل أنت متأكد أنك ترغب في حفظ هذه الصفحة؟",
"not_able_to_change": " بمجرد الحفظ، لن تتمكن من تعديل اسمك أو تاريخ ", "not_able_to_change": "بمجرد الحفظ، لن تتمكن من تعديل اسمك أو تاريخ ميلادك.",
"save": "يحفظ", "save": "حفظ",
"name": "اسم", "name": "اسم",
@ -55,25 +55,25 @@
"password_match": "كلمات المرور غير متطابقة", "password_match": "كلمات المرور غير متطابقة",
"only8charac": "يجب أن تتكون كلمة المرور من 8 أحرف على الأقل", "only8charac": "يجب أن تتكون كلمة المرور من 8 أحرف على الأقل",
"manage_user": "دارة المستخدمين", "manage_user": "إدارة المستخدمين",
"user_name": "اسم المستخدم", "user_name": "اسم المستخدم",
"reg_date": "تاريخ التسجيل", "reg_date": "تاريخ التسجيل",
"status": "تمت الموافقة", "status": "الحالة",
"denied": "مرفوض", "denied": "مرفوض",
"pending": "يد الانتظار", "pending": " قيد الانتظار",
"approve_msg": "هل أنت متأكد أنك ترغب في تغيير الحالة إلى \"{newStatus}\"؟", "approve_msg": "هل أنت متأكد أنك ترغب في تغيير الحالة إلى \"{newStatus}\"؟",
"yes": "نعم", "yes": "نعم",
"no": "لا", "no": "لا",
"no_result_found": "لم يتم العثور على نتائج", "no_result_found": "لم يتم العثور على نتائج",
"search": "يبحث", "search": "يبحث",
"approved": "موافقة", "approved": "تمت الموافقة",
"create_new_password": "إنشاء كلمة مرور جديدة", "create_new_password": "إنشاء كلمة مرور جديدة",
"different_password":"يجب أن تكون كلمة المرور الجديدة مختلفة عن كلمة المرور المستخدمة سابقًا.", "different_password":"يجب أن تكون كلمة المرور الجديدة مختلفة عن كلمة المرور المستخدمة سابقًا.",
"old_password": "كلمة المرور القديمة", "old_password": "كلمة المرور القديمة",
"enter_new_password": "أدخل كلمة المرور الجديدة", "enter_new_password": "أدخل كلمة المرور الجديدة",
"confirm_new_password": "تأكيد كلمة المرور الجديدة", "confirm_new_password": "تأكيد كلمة المرور الجديدة",
"password_changed_successfully": "م تغيير كلمة المرور بنجاح", "password_changed_successfully": "تم تغيير كلمة المرور بنجاح",
"enter_old_password": "أدخل كلمة المرور القديمة", "enter_old_password": "أدخل كلمة المرور القديمة",
"your_old_password_incorrect": "كلمة المرور القديمة الخاصة بك غير صحيحة.", "your_old_password_incorrect": "كلمة المرور القديمة الخاصة بك غير صحيحة.",
"failed_to_update_password": "", "failed_to_update_password": "",

View File

@ -9,8 +9,8 @@
"register_name": "Username", "register_name": "Username",
"email_id": "Email ID", "email_id": "Email ID",
"enter_name": "Enter your User Name", "enter_name": "Enter your User Name",
"register_email": "Enter your email", "enter_your_email": "Enter your email",
"register_password": "Enter your password", "enter_your_password": "Enter your password",
"register_Confirm_password": "Confirm password", "register_Confirm_password": "Confirm password",
"agree": "I agree to ", "agree": "I agree to ",
"t_and": "and", "t_and": "and",

View File

@ -475,7 +475,7 @@ class _RegisterScreenState extends State<RegisterScreen> {
decoration: InputDecoration( decoration: InputDecoration(
// hintText: 'Enter your email', // hintText: 'Enter your email',
hintText: _showHints[1] hintText: _showHints[1]
? AppLocalizations.of(context)!.register_email ? AppLocalizations.of(context)!.enter_your_email
: null, : null,
// _showHints[1] ? 'Enter your email' : null, // _showHints[1] ? 'Enter your email' : null,
prefixIcon: Icon( prefixIcon: Icon(
@ -500,8 +500,7 @@ class _RegisterScreenState extends State<RegisterScreen> {
obscureText: _obscurePassword, obscureText: _obscurePassword,
decoration: InputDecoration( decoration: InputDecoration(
hintText: _showHints[2] hintText: _showHints[2]
? AppLocalizations.of(context)! ? AppLocalizations.of(context)!.enter_your_password
.register_password
: null, : null,
// _showHints[2] ? 'Enter your password' : null, // _showHints[2] ? 'Enter your password' : null,
prefixIcon: Icon( prefixIcon: Icon(

View File

@ -0,0 +1,57 @@
import 'package:flutter/material.dart';
import 'package:uae_stat/presentation/components/constant/constant.dart';
class InternetCheck extends StatelessWidget {
const InternetCheck({super.key});
@override
Widget build(BuildContext context) {
double myheight = MediaQuery.of(context).size.height;
double mywidth = MediaQuery.of(context).size.width;
return Scaffold(
body: Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image(image: AssetImage('assets/logos/no-internet.png')),
SizedBox(height: myheight/40,),
Text("No Internet Connection",style: TextStyle(fontSize: 25,fontWeight: FontWeight.bold)),
Text("Please check with your Wi-Fi or Mobile",style: TextStyle(fontSize: 15,fontWeight: FontWeight.w500)),
Text("Data connection and try again",style: TextStyle(fontSize: 15,fontWeight: FontWeight.w500)),
SizedBox(height: myheight/40,),
ElevatedButton(
onPressed: (){
Navigator.pop(context);
},
style: ElevatedButton.styleFrom(
backgroundColor: Color(
0xFFA7887A), // Brownish color for Register
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(10)),
),
),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
"Retry",
style: TextStyle(
fontSize: 16, color: Colors.white),
),
SizedBox(width: 8),
Icon(Icons.arrow_forward_ios_outlined,size: 12,
color: Colors.white),
],
),
),
],
),
),
),
),
);
}
}

View File

@ -1,6 +1,7 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
@ -168,6 +169,7 @@ class _EditProfileState extends State<EditProfile> {
}, },
); );
print('userDetails: $userDetailsResponse'); print('userDetails: $userDetailsResponse');
setState(() { setState(() {
_usernameController.text = userDetailsResponse.data['uname'] ?? ''; _usernameController.text = userDetailsResponse.data['uname'] ?? '';
@ -263,13 +265,9 @@ class _EditProfileState extends State<EditProfile> {
final DateTime today = DateTime.now(); final DateTime today = DateTime.now();
final DateTime initialDate = _selectedDate ?? final DateTime initialDate = _selectedDate ??
today.subtract( today.subtract(
const Duration(days: 365 * 18), const Duration(days: 365 * 18),); // Default to 18 years ago
); // Default to 18 years ago final DateTime firstDate = today.subtract(const Duration(
final DateTime firstDate = today.subtract( days: 365 * 100,),); // Allow picking dates back to 100 years ago
const Duration(
days: 365 * 100,
),
); // Allow picking dates back to 100 years ago
final DateTime lastDate = today; // Allow picking dates up to today final DateTime lastDate = today; // Allow picking dates up to today
// Updated Date format to DD/MM/YYYY // Updated Date format to DD/MM/YYYY
@ -342,17 +340,15 @@ class _EditProfileState extends State<EditProfile> {
final request = http.MultipartRequest('PATCH', uri); final request = http.MultipartRequest('PATCH', uri);
// Add fields to the request // Add fields to the request
request.fields['country_region'] = request.fields['country_region'] = countryRegion; // Only update country here
countryRegion; // Only update country here
// If profile image exists, add it // If profile image exists, add it
if (_profileImage != null) { if (_profileImage != null) {
request.files.add( request.files.add(await http.MultipartFile.fromPath(
await http.MultipartFile.fromPath(
'avatar', 'avatar',
_profileImage!.path, _profileImage!.path,
), ),);
);
} }
// Add headers (e.g., authorization) // Add headers (e.g., authorization)
@ -364,6 +360,7 @@ class _EditProfileState extends State<EditProfile> {
print('ShowConfirmationuser response - $response '); print('ShowConfirmationuser response - $response ');
// Handle response // Handle response
if (response.statusCode == 200) { if (response.statusCode == 200) {
_resetFormFields(); _resetFormFields();
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Profile updated successfully!')), SnackBar(content: Text('Profile updated successfully!')),
@ -373,8 +370,8 @@ class _EditProfileState extends State<EditProfile> {
} else { } else {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar( SnackBar(
content: Text('Failed to update profile: ${response.statusCode}'), content:
), Text('Failed to update profile: ${response.statusCode}'),),
); );
} }
} catch (error) { } catch (error) {
@ -470,6 +467,8 @@ class _EditProfileState extends State<EditProfile> {
// ), // ),
// ), // ),
// Stack( // Stack(
// alignment: Alignment.center, // alignment: Alignment.center,
// children: [ // children: [
@ -522,23 +521,17 @@ class _EditProfileState extends State<EditProfile> {
CircleAvatar( CircleAvatar(
radius: 50, radius: 50,
backgroundImage: _profileImage != null backgroundImage: _profileImage != null
? FileImage( ? FileImage(_profileImage!) // If a local file is selected
_profileImage!) // If a local file is selected
: _avatarUrl.isNotEmpty : _avatarUrl.isNotEmpty
? NetworkImage( ? NetworkImage(_avatarUrl) // Load from URL
_avatarUrl) // Load from URL : AssetImage('assets/edit_profile/profile.png') as ImageProvider,
: AssetImage(
'assets/edit_profile/profile.png')
as ImageProvider,
child: _avatarUrl.isNotEmpty child: _avatarUrl.isNotEmpty
? FutureBuilder( ? FutureBuilder(
future: _loadImage(_avatarUrl), future: _loadImage(_avatarUrl),
builder: (context, snapshot) { builder: (context, snapshot) {
if (snapshot.connectionState == if (snapshot.connectionState == ConnectionState.waiting) {
ConnectionState.waiting) {
return Center( return Center(
child: child: CircularProgressIndicator(),
CircularProgressIndicator(),
); );
} else if (snapshot.hasError) { } else if (snapshot.hasError) {
return Center( return Center(
@ -546,15 +539,12 @@ class _EditProfileState extends State<EditProfile> {
); );
} else { } else {
return Align( return Align(
alignment: alignment: Alignment.bottomRight,
Alignment.bottomRight,
child: GestureDetector( child: GestureDetector(
onTap: onTap: _pickImage, // Call `_pickImage` on tap
_pickImage, // Call `_pickImage` on tap
child: CircleAvatar( child: CircleAvatar(
radius: 15, radius: 15,
backgroundColor: backgroundColor: Colors.white,
Colors.white,
child: Icon( child: Icon(
Icons.camera_alt, Icons.camera_alt,
size: 15, size: 15,
@ -569,8 +559,7 @@ class _EditProfileState extends State<EditProfile> {
: Align( : Align(
alignment: Alignment.bottomRight, alignment: Alignment.bottomRight,
child: GestureDetector( child: GestureDetector(
onTap: onTap: _pickImage, // Call `_pickImage` on tap
_pickImage, // Call `_pickImage` on tap
child: CircleAvatar( child: CircleAvatar(
radius: 15, radius: 15,
backgroundColor: Colors.white, backgroundColor: Colors.white,
@ -587,10 +576,8 @@ class _EditProfileState extends State<EditProfile> {
Positioned( Positioned(
child: CircularProgressIndicator( child: CircularProgressIndicator(
strokeWidth: 2, strokeWidth: 2,
valueColor: valueColor: AlwaysStoppedAnimation<Color>(
AlwaysStoppedAnimation<Color>( Colors.grey,),
Colors.grey,
),
), ),
), ),
], ],
@ -605,8 +592,7 @@ class _EditProfileState extends State<EditProfile> {
style: TextStyle( style: TextStyle(
fontSize: 16, fontSize: 16,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
color: Colors.grey, color: Colors.grey,),
),
), ),
], ],
), ),
@ -632,8 +618,7 @@ class _EditProfileState extends State<EditProfile> {
style: TextStyle( style: TextStyle(
fontSize: 16, fontSize: 16,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
color: Colors.grey, color: Colors.grey,),
),
), ),
], ],
), ),
@ -658,8 +643,7 @@ class _EditProfileState extends State<EditProfile> {
style: TextStyle( style: TextStyle(
fontSize: 16, fontSize: 16,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
color: Colors.grey, color: Colors.grey,),
),
), ),
], ],
), ),
@ -673,8 +657,7 @@ class _EditProfileState extends State<EditProfile> {
//RegExp(r"^[a-zA-Z\s]+$"); //RegExp(r"^[a-zA-Z\s]+$");
final nameRegex = RegExp( final nameRegex = RegExp(
r"^[a-zA-Z0-9'\-\u0627\u0639~\u00C0-\u00FF\s]+$", r"^[a-zA-Z0-9'\-\u0627\u0639~\u00C0-\u00FF\s]+$",);
);
if (!nameRegex.hasMatch(value)) { if (!nameRegex.hasMatch(value)) {
return 'Invalid Characters'; return 'Invalid Characters';
} }
@ -693,8 +676,7 @@ class _EditProfileState extends State<EditProfile> {
), ),
maxLength: maxLength:
40, // Set the maximum length to 20 characters 40, // Set the maximum length to 20 characters
maxLengthEnforcement: maxLengthEnforcement: MaxLengthEnforcement.enforced,
MaxLengthEnforcement.enforced,
), ),
SizedBox(height: 10), SizedBox(height: 10),
Row( Row(
@ -705,8 +687,7 @@ class _EditProfileState extends State<EditProfile> {
style: TextStyle( style: TextStyle(
fontSize: 16, fontSize: 16,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
color: Colors.grey, color: Colors.grey,),
),
), ),
], ],
), ),
@ -720,8 +701,7 @@ class _EditProfileState extends State<EditProfile> {
), ),
// hintText: _showHints[3] ? 'Select your Date of Birth' : null, // hintText: _showHints[3] ? 'Select your Date of Birth' : null,
hintStyle: TextStyle(color: Colors.grey), hintStyle: TextStyle(color: Colors.grey),
suffixIcon: suffixIcon: const Icon(Icons.arrow_drop_down_sharp),
const Icon(Icons.arrow_drop_down_sharp),
enabled: !_isProfileCompleted, enabled: !_isProfileCompleted,
), ),
readOnly: true, readOnly: true,
@ -735,9 +715,7 @@ class _EditProfileState extends State<EditProfile> {
Text( Text(
AppLocalizations.of(context)!.region, AppLocalizations.of(context)!.region,
style: TextStyle( style: TextStyle(
fontSize: 16, fontSize: 16, fontWeight: FontWeight.w500,),
fontWeight: FontWeight.w500,
),
), ),
], ],
), ),
@ -751,12 +729,10 @@ class _EditProfileState extends State<EditProfile> {
labelText: 'Select', labelText: 'Select',
), ),
items: _countries items: _countries
.map( .map((item) => DropdownMenuItem<String>(
(item) => DropdownMenuItem<String>(
value: item, value: item,
child: Text(item), child: Text(item),
), ),)
)
.toList(), .toList(),
onChanged: (String? newValue) { onChanged: (String? newValue) {
setState(() { setState(() {
@ -781,9 +757,8 @@ class _EditProfileState extends State<EditProfile> {
}); });
}, },
side: BorderSide( side: BorderSide(
color: showError color:
? Colors.red showError ? Colors.red : Colors.grey,
: Colors.grey,
width: 1.5, width: 1.5,
), ),
), ),
@ -797,22 +772,19 @@ class _EditProfileState extends State<EditProfile> {
SizedBox(height: 10), SizedBox(height: 10),
Text.rich( Text.rich(
TextSpan( TextSpan(
text: AppLocalizations.of( text: AppLocalizations.of(context)!
context)!
.agree, .agree,
style: TextStyle( style:
color: Colors.black), TextStyle(color: Colors.black),
children: [ children: [
TextSpan( TextSpan(
text: AppLocalizations.of( text: AppLocalizations.of(
context, context,)!
)!
.terms_conditions, .terms_conditions,
style: TextStyle( style: TextStyle(
color: Colors.blue, color: Colors.blue,
decoration: decoration:
TextDecoration TextDecoration.underline,
.underline,
), ),
recognizer: recognizer:
TapGestureRecognizer() TapGestureRecognizer()
@ -822,23 +794,19 @@ class _EditProfileState extends State<EditProfile> {
), ),
TextSpan( TextSpan(
text: AppLocalizations.of( text: AppLocalizations.of(
context, context,)!
)!
.t_and, .t_and,
style: TextStyle( style: TextStyle(
color: Colors.black, color: Colors.black,),
),
), ),
TextSpan( TextSpan(
text: AppLocalizations.of( text: AppLocalizations.of(
context, context,)!
)!
.privacy_policy, .privacy_policy,
style: TextStyle( style: TextStyle(
color: Colors.blue, color: Colors.blue,
decoration: decoration:
TextDecoration TextDecoration.underline,
.underline,
), ),
recognizer: recognizer:
TapGestureRecognizer() TapGestureRecognizer()
@ -848,12 +816,10 @@ class _EditProfileState extends State<EditProfile> {
), ),
TextSpan( TextSpan(
text: AppLocalizations.of( text: AppLocalizations.of(
context, context,)!
)!
.conditions, .conditions,
style: TextStyle( style: TextStyle(
color: Colors.black, color: Colors.black,),
),
), ),
], ],
), ),
@ -869,12 +835,11 @@ class _EditProfileState extends State<EditProfile> {
), ),
if (showError) if (showError)
Row( Row(
mainAxisAlignment: mainAxisAlignment: MainAxisAlignment.start,
MainAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.only( padding:
left: 10.0), const EdgeInsets.only(left: 10.0),
child: Text( child: Text(
'Please agree to terms and conditions', 'Please agree to terms and conditions',
style: TextStyle( style: TextStyle(
@ -895,12 +860,10 @@ class _EditProfileState extends State<EditProfile> {
context.go('/createNewPw/$userId/$email'); context.go('/createNewPw/$userId/$email');
}, },
child: Text( child: Text(
AppLocalizations.of(context)! AppLocalizations.of(context)!.change_password,
.change_password,
style: TextStyle( style: TextStyle(
color: Colors.blue, color: Colors.blue,
decoration: TextDecoration.underline, decoration: TextDecoration.underline,),
),
), ),
), ),
), ),
@ -939,6 +902,8 @@ class _EditProfileState extends State<EditProfile> {
} }
} }
class ConfirmationDialog extends StatelessWidget { class ConfirmationDialog extends StatelessWidget {
const ConfirmationDialog({super.key}); const ConfirmationDialog({super.key});
@override @override
@ -979,8 +944,7 @@ class ConfirmationDialog extends StatelessWidget {
TextSpan( TextSpan(
text: 'Profile Image', text: 'Profile Image',
style: TextStyle( style: TextStyle(
fontWeight: FontWeight.w700, fontWeight: FontWeight.w700,), // Bold for "date of birth"
), // Bold for "date of birth"
), ),
TextSpan( TextSpan(
text: '.', text: '.',

View File

@ -48,7 +48,7 @@ class _FeedbackFormState extends State<FeedbackForm>
List<Map<String, dynamic>> get _emojiOptions => [ List<Map<String, dynamic>> get _emojiOptions => [
{ {
"icon": Icons.sentiment_very_dissatisfied, "icon": Icons.sentiment_very_dissatisfied,
"label": context.translate("Terrible", "رهيب"), // Translate here "label": context.translate("Terrible", "سئ جدا"), // Translate here
"value": 1, "value": 1,
}, },
{ {
@ -58,7 +58,7 @@ class _FeedbackFormState extends State<FeedbackForm>
}, },
{ {
"icon": Icons.sentiment_neutral, "icon": Icons.sentiment_neutral,
"label": context.translate("Okay", "تمام"), // Translate here "label": context.translate("Okay", "مقبول"), // Translate here
"value": 3, "value": 3,
}, },
{ {
@ -68,7 +68,7 @@ class _FeedbackFormState extends State<FeedbackForm>
}, },
{ {
"icon": Icons.sentiment_very_satisfied, "icon": Icons.sentiment_very_satisfied,
"label": context.translate("Amazing", "مدهش"), // Translate here "label": context.translate("Amazing", "مذهل"), // Translate here
"value": 5, "value": 5,
}, },
]; ];
@ -249,7 +249,7 @@ class _FeedbackFormState extends State<FeedbackForm>
Text( Text(
context.translate( context.translate(
'Do you have a suggestion or had any problem? Let us know.', 'Do you have a suggestion or had any problem? Let us know.',
'هل لديك اقتراح أو واجهت أي مشكلة؟ اسمحوا لنا أن نعرف.', 'هل لديك اقتراح أو واجهت أي مشكلة؟ أخبرنا',
), ),
style: const TextStyle( style: const TextStyle(
fontSize: 18, fontSize: 18,
@ -309,7 +309,7 @@ class _FeedbackFormState extends State<FeedbackForm>
const SizedBox(height: 30), const SizedBox(height: 30),
Text( Text(
context.translate('How good did we do in these aspects?', context.translate('How good did we do in these aspects?',
'ما مدى جودة ما قمنا به في هذه الجوانب؟'), 'ما مدى جودة أدائنا في هذه الجوانب؟'),
style: const TextStyle( style: const TextStyle(
fontSize: 18, fontSize: 18,
fontFamily: 'Roboto', fontFamily: 'Roboto',
@ -328,7 +328,7 @@ class _FeedbackFormState extends State<FeedbackForm>
}, },
), ),
_buildRatingRow( _buildRatingRow(
context.translate('Quality', 'جودة'), context.translate('Quality', 'الجودة'),
_qualityRating, _qualityRating,
(rating) { (rating) {
setState(() { setState(() {
@ -337,7 +337,7 @@ class _FeedbackFormState extends State<FeedbackForm>
}, },
), ),
_buildRatingRow( _buildRatingRow(
context.translate('Design', 'تصميم'), context.translate('Design', 'التصميم'),
_designRating, _designRating,
(rating) { (rating) {
setState(() { setState(() {
@ -346,7 +346,7 @@ class _FeedbackFormState extends State<FeedbackForm>
}, },
), ),
_buildRatingRow( _buildRatingRow(
context.translate('Redundant', 'متكرر'), context.translate('Redundant', 'مكرر'),
_redundancyRating, _redundancyRating,
(rating) { (rating) {
setState(() { setState(() {
@ -362,7 +362,7 @@ class _FeedbackFormState extends State<FeedbackForm>
maxLength: _characterLimit, maxLength: _characterLimit,
decoration: InputDecoration( decoration: InputDecoration(
hintText: context.translate( hintText: context.translate(
'Tell us how we can improve', 'أخبرنا كيف يمكننا تحسين'), 'Tell us how we can improve', 'أخبرنا كيف يمكننا التحسين'),
border: OutlineInputBorder( border: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: _hasError ? Colors.red : Color(0xFF7296BE), color: _hasError ? Colors.red : Color(0xFF7296BE),
@ -412,7 +412,7 @@ class _FeedbackFormState extends State<FeedbackForm>
Text( Text(
context.translate( context.translate(
'Submit', 'Submit',
'يُقدِّم', 'إرسال',
), ),
), ),
6.horizontalSpace, 6.horizontalSpace,

View File

@ -249,7 +249,8 @@ class _BaseScaffoldState extends ConsumerState<BaseScaffold> {
), ),
ListTile( ListTile(
leading: Icon(Icons.feedback), leading: Icon(Icons.feedback),
title: const Text('Feedback'), // title: const Text('Feedback'),
title: Text(AppLocalizations.of(context)!.feedback_title),
onTap: () => context.go('/feedback'), onTap: () => context.go('/feedback'),
), ),
if (role == 'admin') if (role == 'admin')

View File

@ -5,6 +5,7 @@
import FlutterMacOS import FlutterMacOS
import Foundation import Foundation
import connectivity_plus
import file_selector_macos import file_selector_macos
import flutter_secure_storage_macos import flutter_secure_storage_macos
import path_provider_foundation import path_provider_foundation
@ -16,6 +17,7 @@ import video_player_avfoundation
import webview_flutter_wkwebview import webview_flutter_wkwebview
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin"))
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin")) FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))

View File

@ -5,10 +5,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: _fe_analyzer_shared name: _fe_analyzer_shared
sha256: "16e298750b6d0af7ce8a3ba7c18c69c3785d11b15ec83f6dcd0ad2a0009b3cab" sha256: "88399e291da5f7e889359681a8f64b18c5123e03576b01f32a6a276611e511c3"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "76.0.0" version: "78.0.0"
_macros: _macros:
dependency: transitive dependency: transitive
description: dart description: dart
@ -18,18 +18,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: analyzer name: analyzer
sha256: "1f14db053a8c23e260789e9b0980fa27f2680dd640932cae5e1137cce0e46e1e" sha256: "62899ef43d0b962b056ed2ebac6b47ec76ffd003d5f7c4e4dc870afe63188e33"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.11.0" version: "7.1.0"
analyzer_plugin: analyzer_plugin:
dependency: transitive dependency: transitive
description: description:
name: analyzer_plugin name: analyzer_plugin
sha256: "9661b30b13a685efaee9f02e5d01ed9f2b423bd889d28a304d02d704aee69161" sha256: "1d460d14e3c2ae36dc2b32cef847c4479198cf87704f63c3c3c8150ee50c3916"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.11.3" version: "0.12.0"
ansicolor: ansicolor:
dependency: transitive dependency: transitive
description: description:
@ -74,50 +74,50 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: build name: build
sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" sha256: cef23f1eda9b57566c81e2133d196f8e3df48f244b317368d65c5943d91148f0
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.1" version: "2.4.2"
build_config: build_config:
dependency: transitive dependency: transitive
description: description:
name: build_config name: build_config
sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 sha256: "4ae2de3e1e67ea270081eaee972e1bd8f027d459f249e0f1186730784c2e7e33"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.1" version: "1.1.2"
build_daemon: build_daemon:
dependency: transitive dependency: transitive
description: description:
name: build_daemon name: build_daemon
sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9" sha256: "294a2edaf4814a378725bfe6358210196f5ea37af89ecd81bfa32960113d4948"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.0.2" version: "4.0.3"
build_resolvers: build_resolvers:
dependency: transitive dependency: transitive
description: description:
name: build_resolvers name: build_resolvers
sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" sha256: "99d3980049739a985cf9b21f30881f46db3ebc62c5b8d5e60e27440876b1ba1e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.2" version: "2.4.3"
build_runner: build_runner:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: build_runner name: build_runner
sha256: "028819cfb90051c6b5440c7e574d1896f8037e3c96cf17aaeb054c9311cfbf4d" sha256: "74691599a5bc750dc96a6b4bfd48f7d9d66453eab04c7f4063134800d6a5c573"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.13" version: "2.4.14"
build_runner_core: build_runner_core:
dependency: transitive dependency: transitive
description: description:
name: build_runner_core name: build_runner_core
sha256: f8126682b87a7282a339b871298cc12009cb67109cfa1614d6436fb0289193e0 sha256: "22e3aa1c80e0ada3722fe5b63fd43d9c8990759d0a2cf489c8c5d7b2bdebc021"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "7.3.2" version: "8.0.0"
built_collection: built_collection:
dependency: transitive dependency: transitive
description: description:
@ -214,6 +214,22 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.19.0" version: "1.19.0"
connectivity_plus:
dependency: "direct main"
description:
name: connectivity_plus
sha256: "8a68739d3ee113e51ad35583fdf9ab82c55d09d693d3c39da1aebab87c938412"
url: "https://pub.dev"
source: hosted
version: "6.1.2"
connectivity_plus_platform_interface:
dependency: transitive
description:
name: connectivity_plus_platform_interface
sha256: "42657c1715d48b167930d5f34d00222ac100475f73d10162ddf43e714932f204"
url: "https://pub.dev"
source: hosted
version: "2.0.1"
convert: convert:
dependency: transitive dependency: transitive
description: description:
@ -266,42 +282,50 @@ packages:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: custom_lint name: custom_lint
sha256: "3486c470bb93313a9417f926c7dd694a2e349220992d7b9d14534dc49c15bba9" sha256: "6d509673c4dd0baa90e60dc8366bc2acc6690f16a7d44bfae31294d82c5d2a62"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.0" version: "0.7.1"
custom_lint_builder: custom_lint_builder:
dependency: transitive dependency: transitive
description: description:
name: custom_lint_builder name: custom_lint_builder
sha256: "42cdc41994eeeddab0d7a722c7093ec52bd0761921eeb2cbdbf33d192a234759" sha256: "8cc525c7b160eb47bb1ded8b2633c0f8b907930eb986ac577aded87cdd2835fe"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.0" version: "0.7.1"
custom_lint_core: custom_lint_core:
dependency: transitive dependency: transitive
description: description:
name: custom_lint_core name: custom_lint_core
sha256: "02450c3e45e2a6e8b26c4d16687596ab3c4644dd5792e3313aa9ceba5a49b7f5" sha256: "6dcee8a017181941c51a110da7e267c1d104dc74bec8862eeb8c85b5c8759a9e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.0" version: "0.7.1"
custom_lint_visitor: custom_lint_visitor:
dependency: transitive dependency: transitive
description: description:
name: custom_lint_visitor name: custom_lint_visitor
sha256: bfe9b7a09c4775a587b58d10ebb871d4fe618237639b1e84d5ec62d7dfef25f9 sha256: "14df0760dfa81b7b0c398c876045f4e4a343eb2c9d200c66163671dd3e337c1b"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.0+6.11.0" version: "1.0.0+7.1.0"
dart_style: dart_style:
dependency: transitive dependency: transitive
description: description:
name: dart_style name: dart_style
sha256: "7856d364b589d1f08986e140938578ed36ed948581fbc3bc9aef1805039ac5ab" sha256: "27eb0ae77836989a3bc541ce55595e8ceee0992807f14511552a898ddd0d88ac"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.7" version: "3.0.1"
dbus:
dependency: transitive
description:
name: dbus
sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac"
url: "https://pub.dev"
source: hosted
version: "0.7.10"
equatable: equatable:
dependency: transitive dependency: transitive
description: description:
@ -472,7 +496,7 @@ packages:
source: hosted source: hosted
version: "2.4.4" version: "2.4.4"
flutter_plugin_android_lifecycle: flutter_plugin_android_lifecycle:
dependency: "direct main" dependency: transitive
description: description:
name: flutter_plugin_android_lifecycle name: flutter_plugin_android_lifecycle
sha256: "615a505aef59b151b46bbeef55b36ce2b6ed299d160c51d84281946f0aa0ce0e" sha256: "615a505aef59b151b46bbeef55b36ce2b6ed299d160c51d84281946f0aa0ce0e"
@ -573,10 +597,10 @@ packages:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: freezed name: freezed
sha256: "44c19278dd9d89292cf46e97dc0c1e52ce03275f40a97c5a348e802a924bf40e" sha256: "59a584c24b3acdc5250bb856d0d3e9c0b798ed14a4af1ddb7dc1c7b41df91c9c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.5.7" version: "2.5.8"
freezed_annotation: freezed_annotation:
dependency: "direct main" dependency: "direct main"
description: description:
@ -669,10 +693,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: http_parser name: http_parser
sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.0.2" version: "4.1.2"
image: image:
dependency: transitive dependency: transitive
description: description:
@ -757,10 +781,10 @@ packages:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: injectable_generator name: injectable_generator
sha256: af403d76c7b18b4217335e0075e950cd0579fd7f8d7bd47ee7c85ada31680ba1 sha256: b04673a4c88b3a848c0c77bf58b8309f9b9e064d9fe1df5450c8ee1675eaea1a
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.6.2" version: "2.7.0"
intl: intl:
dependency: "direct main" dependency: "direct main"
description: description:
@ -797,10 +821,10 @@ packages:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: json_serializable name: json_serializable
sha256: c2fcb3920cf2b6ae6845954186420fca40bc0a8abcc84903b7801f17d7050d7c sha256: b0a98230538fe5d0b60a22fb6bf1b6cb03471b53e3324ff6069c591679dd59c9
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.9.0" version: "6.9.3"
jwt_decoder: jwt_decoder:
dependency: "direct main" dependency: "direct main"
description: description:
@ -837,10 +861,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: lints name: lints
sha256: "3315600f3fb3b135be672bf4a178c55f274bebe368325ae18462c89ac1e3b413" sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.0.0" version: "5.1.1"
logging: logging:
dependency: transitive dependency: transitive
description: description:
@ -861,10 +885,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: mailer name: mailer
sha256: e907087cd00719898c493f720dd326af73b00b406ab4af8e79f15d7c5fc24035 sha256: c6ae65c1d40cfe9c06fa50ff9be6c1cfb18cca60a7bb935e318163bd7f1f0d17
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.3.0" version: "6.4.1"
marquee: marquee:
dependency: "direct main" dependency: "direct main"
description: description:
@ -921,14 +945,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.0" version: "1.0.0"
octo_image: nm:
dependency: transitive dependency: transitive
description: description:
name: octo_image name: nm
sha256: "34faa6639a78c7e3cbe79be6f9f96535867e879748ade7d17c9b1ae7536293bd" sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.0" version: "0.5.0"
package_config: package_config:
dependency: transitive dependency: transitive
description: description:
@ -1053,10 +1077,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: pubspec_parse name: pubspec_parse
sha256: "81876843eb50dc2e1e5b151792c9a985c5ed2536914115ed04e9c8528f6647b0" sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.4.0" version: "1.5.0"
recase: recase:
dependency: transitive dependency: transitive
description: description:
@ -1085,10 +1109,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: riverpod_analyzer_utils name: riverpod_analyzer_utils
sha256: c6b8222b2b483cb87ae77ad147d6408f400c64f060df7a225b127f4afef4f8c8 sha256: "837a6dc33f490706c7f4632c516bcd10804ee4d9ccc8046124ca56388715fdf3"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.5.8" version: "0.5.9"
riverpod_annotation: riverpod_annotation:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1101,18 +1125,18 @@ packages:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: riverpod_generator name: riverpod_generator
sha256: "63546d70952015f0981361636bf8f356d9cfd9d7f6f0815e3c07789a41233188" sha256: "120d3310f687f43e7011bb213b90a436f1bbc300f0e4b251a72c39bccb017a4f"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.6.3" version: "2.6.4"
riverpod_lint: riverpod_lint:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: riverpod_lint name: riverpod_lint
sha256: "83e4caa337a9840469b7b9bd8c2351ce85abad80f570d84146911b32086fbd99" sha256: b05408412b0f75dec954e032c855bc28349eeed2d2187f94519e1ddfdf8b3693
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.6.3" version: "2.6.4"
rxdart: rxdart:
dependency: transitive dependency: transitive
description: description:
@ -1132,10 +1156,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: share_plus name: share_plus
sha256: "6327c3f233729374d0abaafd61f6846115b2a481b4feddd8534211dc10659400" sha256: fce43200aa03ea87b91ce4c3ac79f0cecd52e2a7a56c7a4185023c271fbfa6da
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "10.1.3" version: "10.1.4"
share_plus_platform_interface: share_plus_platform_interface:
dependency: transitive dependency: transitive
description: description:
@ -1204,10 +1228,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: shelf name: shelf
sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.4.1" version: "1.4.2"
shelf_web_socket: shelf_web_socket:
dependency: transitive dependency: transitive
description: description:
@ -1232,10 +1256,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: source_gen name: source_gen
sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" sha256: "35c8150ece9e8c8d263337a265153c3329667640850b9304861faea59fc98f6b"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.5.0" version: "2.0.0"
source_helper: source_helper:
dependency: transitive dependency: transitive
description: description:
@ -1340,14 +1364,22 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.0" version: "1.3.0"
synchronized: syncfusion_flutter_charts:
dependency: transitive dependency: "direct main"
description: description:
name: synchronized name: syncfusion_flutter_charts
sha256: "69fe30f3a8b04a0be0c15ae6490fc859a78ef4c43ae2dd5e8a623d45bfcf9225" sha256: "117823c9e2ffcb7fb9868c73263df88751e3bb1f3d81f617cbaf63112f530e9c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.3.0+3" version: "28.1.39"
syncfusion_flutter_core:
dependency: transitive
description:
name: syncfusion_flutter_core
sha256: "794870919ca73e29c6cb25392a097cdfe58da4d6f3f3d3eccc529ecf52f78752"
url: "https://pub.dev"
source: hosted
version: "28.1.39"
term_glyph: term_glyph:
dependency: transitive dependency: transitive
description: description:
@ -1488,18 +1520,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: video_player_android name: video_player_android
sha256: "391e092ba4abe2f93b3e625bd6b6a6ec7d7414279462c1c0ee42b5ab8d0a0898" sha256: "7018dbcb395e2bca0b9a898e73989e67c0c4a5db269528e1b036ca38bcca0d0b"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.7.16" version: "2.7.17"
video_player_avfoundation: video_player_avfoundation:
dependency: transitive dependency: transitive
description: description:
name: video_player_avfoundation name: video_player_avfoundation
sha256: "33224c19775fd244be2d6e3dbd8e1826ab162877bd61123bf71890772119a2b7" sha256: "8a4e73a3faf2b13512978a43cf1cdda66feeeb900a0527f1fbfd7b19cf3458d3"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.6.5" version: "2.6.7"
video_player_platform_interface: video_player_platform_interface:
dependency: transitive dependency: transitive
description: description:
@ -1568,10 +1600,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: webview_flutter_android name: webview_flutter_android
sha256: "3d535126f7244871542b2f0b0fcf94629c9a14883250461f9abe1a6644c1c379" sha256: d1ee28f44894cbabb1d94cc42f9980297f689ff844d067ec50ff88d86e27d63f
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.2.0" version: "4.3.0"
webview_flutter_platform_interface: webview_flutter_platform_interface:
dependency: transitive dependency: transitive
description: description:

View File

@ -61,6 +61,8 @@ dependencies:
flutter_staggered_grid_view: ^0.7.0 flutter_staggered_grid_view: ^0.7.0
flutter_plugin_android_lifecycle: ^2.0.24 flutter_plugin_android_lifecycle: ^2.0.24
cached_network_image: ^3.4.1 cached_network_image: ^3.4.1
syncfusion_flutter_charts: ^28.1.39
connectivity_plus: ^6.1.2
dependency_overrides: dependency_overrides:
fading_edge_scrollview: ^4.1.1 fading_edge_scrollview: ^4.1.1