toast added

This commit is contained in:
Surendiran 2025-09-02 12:01:16 +05:30
parent dbddbed8ce
commit 1f7f806e0a
6 changed files with 793 additions and 2 deletions

View File

@ -1,5 +1,5 @@
class Env {
static const String envName = String.fromEnvironment('ENV', defaultValue: 'dev');
static const String apiUrl = String.fromEnvironment('API_URL');
static const String apiUrl = String.fromEnvironment('https://venbait.in/nhance/partner/dev/');
static const String baseUrl = String.fromEnvironment('BASE_URL');
}

View File

@ -8,7 +8,13 @@ import 'dart:convert';
class ApiService {
final BuildContext context;
Future<void> _clearLocalStorageAndRedirect() async {
final prefs = await SharedPreferences.getInstance();
await prefs.clear();
// Assuming you have access to the context
ToastHelper.showErrorToast(context, 'Session Out');
Navigator.pushNamed(context, 'login');
}
Future<Map<String, dynamic>> _makeGetRequest(
Uri url, Map<String, String> headers) async {

View File

@ -0,0 +1,223 @@
import 'package:flutter/material.dart';
// import 'package:fluttertoast/fluttertoast.dart';
import 'package:toastification/toastification.dart';
class ToastHelper {
static void showSuccessToast(BuildContext context, String message) {
toastification.show(
context: context,
type: ToastificationType.success,
style: ToastificationStyle.flatColored,
autoCloseDuration: const Duration(seconds: 2),
title: Text(message),
// you can also use RichText widget for title and description parameters
// description: RichText(
// text: const TextSpan(text: 'This is a sample toast message. ')),
alignment: Alignment.topRight,
direction: TextDirection.ltr,
animationDuration: const Duration(milliseconds: 100),
animationBuilder: (context, animation, alignment, child) {
return FadeTransition(
opacity: animation,
child: child,
);
},
icon: const Icon(Icons.check),
primaryColor: Colors.green,
backgroundColor: Colors.white,
foregroundColor: Colors.black,
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 16),
margin: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
borderRadius: BorderRadius.circular(12),
boxShadow: const [
BoxShadow(
color: Color(0x07000000),
blurRadius: 16,
offset: Offset(0, 16),
spreadRadius: 0,
)
],
showProgressBar: true,
closeButtonShowType: CloseButtonShowType.onHover,
closeOnClick: false,
pauseOnHover: true,
dragToClose: true,
applyBlurEffect: true,
callbacks: ToastificationCallbacks(
onTap: (toastItem) => print('Toast ${toastItem.id} tapped'),
onCloseButtonTap: (toastItem) =>
print('Toast ${toastItem.id} close button tapped'),
onAutoCompleteCompleted: (toastItem) =>
print('Toast ${toastItem.id} auto complete completed'),
onDismissed: (toastItem) => print('Toast ${toastItem.id} dismissed'),
),
);
}
static void showWarningToast(BuildContext context, String message) {
toastification.show(
context: context,
type: ToastificationType.warning,
style: ToastificationStyle.flatColored,
autoCloseDuration: const Duration(seconds: 2),
title: Text(message),
// you can also use RichText widget for title and description parameters
// description: RichText(
// text: const TextSpan(text: 'This is a sample toast message. ')),
alignment: Alignment.topRight,
direction: TextDirection.ltr,
animationDuration: const Duration(milliseconds: 100),
animationBuilder: (context, animation, alignment, child) {
return FadeTransition(
opacity: animation,
child: child,
);
},
icon: const Icon(Icons.warning),
primaryColor: Colors.amberAccent,
backgroundColor: Colors.white,
foregroundColor: Colors.black,
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 16),
margin: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
borderRadius: BorderRadius.circular(12),
boxShadow: const [
BoxShadow(
color: Color(0x07000000),
blurRadius: 16,
offset: Offset(0, 16),
spreadRadius: 0,
)
],
showProgressBar: true,
closeButtonShowType: CloseButtonShowType.onHover,
closeOnClick: false,
pauseOnHover: true,
dragToClose: true,
applyBlurEffect: true,
callbacks: ToastificationCallbacks(
onTap: (toastItem) => print('Toast ${toastItem.id} tapped'),
onCloseButtonTap: (toastItem) =>
print('Toast ${toastItem.id} close button tapped'),
onAutoCompleteCompleted: (toastItem) =>
print('Toast ${toastItem.id} auto complete completed'),
onDismissed: (toastItem) => print('Toast ${toastItem.id} dismissed'),
),
);
}
static void showErrorToast(BuildContext context, String message) {
toastification.show(
context: context,
type: ToastificationType.error,
style: ToastificationStyle.flatColored,
autoCloseDuration: const Duration(seconds: 2),
title: Text(message),
// you can also use RichText widget for title and description parameters
// description: RichText(
// text: const TextSpan(text: 'This is a sample toast message. ')),
alignment: Alignment.topRight,
direction: TextDirection.ltr,
animationDuration: const Duration(milliseconds: 100),
animationBuilder: (context, animation, alignment, child) {
return FadeTransition(
opacity: animation,
child: child,
);
},
icon: const Icon(Icons.error),
primaryColor: Colors.redAccent,
backgroundColor: Colors.white,
foregroundColor: Colors.black,
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 16),
margin: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
borderRadius: BorderRadius.circular(12),
boxShadow: const [
BoxShadow(
color: Color(0x07000000),
blurRadius: 16,
offset: Offset(0, 16),
spreadRadius: 0,
)
],
showProgressBar: true,
closeButtonShowType: CloseButtonShowType.onHover,
closeOnClick: false,
pauseOnHover: true,
dragToClose: true,
applyBlurEffect: true,
callbacks: ToastificationCallbacks(
onTap: (toastItem) => print('Toast ${toastItem.id} tapped'),
onCloseButtonTap: (toastItem) =>
print('Toast ${toastItem.id} close button tapped'),
onAutoCompleteCompleted: (toastItem) =>
print('Toast ${toastItem.id} auto complete completed'),
onDismissed: (toastItem) => print('Toast ${toastItem.id} dismissed'),
),
);
// _showToast(context, message, Colors.red);
}
static void showInfoToast(BuildContext context, String message) {
toastification.show(
context: context,
type: ToastificationType.info,
style: ToastificationStyle.flatColored,
autoCloseDuration: const Duration(seconds: 2),
title: Text(message),
// you can also use RichText widget for title and description parameters
// description: RichText(
// text: const TextSpan(text: 'This is a sample toast message. ')),
alignment: Alignment.topRight,
direction: TextDirection.ltr,
animationDuration: const Duration(milliseconds: 100),
animationBuilder: (context, animation, alignment, child) {
return FadeTransition(
opacity: animation,
child: child,
);
},
icon: const Icon(Icons.info),
primaryColor: Colors.lightBlue,
backgroundColor: Colors.white,
foregroundColor: Colors.black,
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 16),
margin: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
borderRadius: BorderRadius.circular(12),
boxShadow: const [
BoxShadow(
color: Color(0x07000000),
blurRadius: 16,
offset: Offset(0, 16),
spreadRadius: 0,
)
],
showProgressBar: true,
closeButtonShowType: CloseButtonShowType.onHover,
closeOnClick: false,
pauseOnHover: true,
dragToClose: true,
applyBlurEffect: true,
callbacks: ToastificationCallbacks(
onTap: (toastItem) => print('Toast ${toastItem.id} tapped'),
onCloseButtonTap: (toastItem) =>
print('Toast ${toastItem.id} close button tapped'),
onAutoCompleteCompleted: (toastItem) =>
print('Toast ${toastItem.id} auto complete completed'),
onDismissed: (toastItem) => print('Toast ${toastItem.id} dismissed'),
),
);
// _showToast(context, message, Colors.red);
}
static void _showToast(BuildContext context, String message, Color color) {
// Fluttertoast.showToast(
// msg: message,
// toastLength: Toast.LENGTH_SHORT,
// gravity: ToastGravity.TOP,
// timeInSecForIosWeb: 5,
// backgroundColor: color,
// textColor: Colors.white,
// fontSize: 16.0,
// );
}
}

View File

@ -80,6 +80,212 @@ class _LoginScreenState extends State<LoginScreen> {
),
);
@override
void initState() {
super.initState();
}
Future<void> verifyMobileAndEmailNumber() async {
try {
if (_formKey.currentState!.validate()) {
// setState(() {
// _isLoading = true;
// });
// Determine the API and the payload based on the visible field
String apiEndpoint = isEmailFieldVisible
? Env.apiUrl + 'verifyEmployeeEmailId'
: Env.apiUrl + 'verifyEmployeeNumber';
Map<String, dynamic> payload = isEmailFieldVisible
? {'email': emailController.text}
: {'mobile_number': mobileController.text};
final response = await http.post(
Uri.parse(apiEndpoint),
body: json.encode(payload),
headers: {
HttpHeaders.contentTypeHeader: 'application/json',
},
);
if (response.statusCode == 200) {
Map<String, dynamic> data = json.decode(response.body);
bool userVerification = data['data']['user_verification'];
String message = data['data']['message'];
if (userVerification) {
final SharedPreferences prefs =
await SharedPreferences.getInstance();
// var enteredMobileNumber = mobileController.text;
// prefs.setString('empMobileNo', enteredMobileNumber);
if (isEmailFieldVisible) {
print('isEmailFieldVisible $isEmailFieldVisible');
// prefs.setString('empEmail', emailController.text);
print('${emailController.text}');
ToastHelper.showSuccessToast(
context, 'Verification code sent to ${emailController.text}');
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => MyEmailVerify(
email: emailController.text, // Pass the phone number
),
),
);
} else {
_verifyPhoneNumber();
}
// ToastHelper.showSuccessToast(context, message);
} else {
setState(() {
_isLoading = false;
});
ToastHelper.showErrorToast(context, message);
print('Invalid mobile number');
}
} else {
setState(() {
_isLoading = false;
});
ToastHelper.showErrorToast(context, 'Something went wrong');
throw Exception('Failed to verify mobile number');
}
}
} catch (e) {
setState(() {
_isLoading = false;
});
ToastHelper.showErrorToast(context, 'Something went wrong');
print('Error: $e');
}
}
// Future<void> _verifyPhoneNumber() async {
// var enteredMobileNumber = mobileController.text;
// var countryCode = countryController.text;
// print('${countryCode + enteredMobileNumber}');
// await _auth.verifyPhoneNumber(
// phoneNumber: '${countryCode + enteredMobileNumber}',
// timeout: const Duration(seconds: 60),
// verificationCompleted: (PhoneAuthCredential credential) async {
// await _auth.signInWithCredential(credential);
// // ToastHelper.showSuccessToast(context, 'Verified Successfully!');
// // setState(() {
// // _isLoading = false;
// // });
// },
// verificationFailed: (FirebaseAuthException e) {
// print('Verification Failed: ${e.code} - ${e.message}');
// String errorMessage;
// if (e.code == 'invalid-app-credential') {
// errorMessage = 'Invalid Credential. Please try again.';
// } else if (e.code == 'invalid-phone-number') {
// errorMessage = 'The provided phone number is not valid.';
// } else if (e.code == 'too-many-requests') {
// errorMessage = 'Too many requests. Try again later.';
// } else {
// errorMessage = 'Verification Failed: ${e.message}';
// }
// ScaffoldMessenger.of(context).showSnackBar(
// SnackBar(
// content: Text(errorMessage),
// duration: Duration(seconds: 2),
// ),
// );
//
// ToastHelper.showSuccessToast(context, errorMessage);
// setState(() {
// _isLoading = false;
// });
// },
// codeSent: (String verificationId, int? resendToken) async {
// setState(() {
// _verificationId = verificationId;
// _resendToken = resendToken;
// });
//
// // When getting the verificationId
// SharedPreferences prefs = await SharedPreferences.getInstance();
// prefs.setString('verificationId', _verificationId);
//
//
// ToastHelper.showSuccessToast(
// context, 'Verification code sent to ${enteredMobileNumber}');
//
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) => MyVerify(
// verificationId: _verificationId,
// mobileNumber: enteredMobileNumber,
// resendToken: _resendToken,
// onResendCode: _resendCode, // Pass the phone number
// ),
// ),
// );
// setState(() {
// _isLoading = false;
// });
// },
// codeAutoRetrievalTimeout: (String verificationId) async{
// setState(() {
// _verificationId = verificationId;
// });
// final prefs = await SharedPreferences.getInstance();
// await prefs.setString('verificationId', verificationId);
// ToastHelper.showSuccessToast(context, 'Code auto-retrieval timed out.');
// setState(() {
// _isLoading = false;
// });
// },
// );
// }
//
// void _resendCode(String mobileNumber, int? resendToken) async {
// await _auth.verifyPhoneNumber(
// phoneNumber: '${countryController.text + mobileNumber}',
// timeout: const Duration(seconds: 60),
// forceResendingToken: resendToken,
// verificationCompleted: (PhoneAuthCredential credential) async {
// await _auth.signInWithCredential(credential);
// },
// verificationFailed: (FirebaseAuthException e) {
// if (e.code == 'invalid-phone-number') {
// print('The provided phone number is not valid.');
// }
// },
// codeSent: (String verificationId, int? resendToken) async{
// final prefs = await SharedPreferences.getInstance();
// await prefs.setString('verificationId', verificationId);
// setState(() {
// _verificationId = verificationId;
// _resendToken = resendToken;
// });
// ToastHelper.showSuccessToast(
// context, 'Verification code resent to ${mobileNumber}');
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) => MyVerify(
// verificationId: _verificationId,
// mobileNumber: mobileNumber,
// resendToken: _resendToken,
// onResendCode: _resendCode,
// ),
// ),
// );
// },
// codeAutoRetrievalTimeout: (String verificationId) async{
// final prefs = await SharedPreferences.getInstance();
// await prefs.setString('verificationId', verificationId);
// setState(() {
// _verificationId = verificationId;
// });
// },
// );
// }
Future<void> sendMobileOrEmailVerify() async {
if (!_formKey.currentState!.validate()) return;
setState(() {

View File

@ -9,6 +9,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "85.0.0"
_flutterfire_internals:
dependency: transitive
description:
name: _flutterfire_internals
sha256: "948f7d74f41dd6f2d563ea9f4c21d7ea764f8e047d2b24138974c19c24d37eb6"
url: "https://pub.dev"
source: hosted
version: "1.3.61"
analyzer:
dependency: transitive
description:
@ -17,6 +25,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "7.7.1"
animated_bottom_navigation_bar:
dependency: "direct main"
description:
name: animated_bottom_navigation_bar
sha256: "94971fdfd53acd443acd0d17ce1cb5219ad833f20c75b50c55b205e54a5d6117"
url: "https://pub.dev"
source: hosted
version: "1.4.0"
args:
dependency: transitive
description:
@ -233,6 +249,102 @@ packages:
url: "https://pub.dev"
source: hosted
version: "7.0.1"
firebase_app_check:
dependency: "direct main"
description:
name: firebase_app_check
sha256: "3bf5d9c9043723ae12c09b2a012ca5f32653a1bc30a0a9818983766ea06d72a8"
url: "https://pub.dev"
source: hosted
version: "0.4.0+1"
firebase_app_check_platform_interface:
dependency: transitive
description:
name: firebase_app_check_platform_interface
sha256: bdda519aa487be605a53093ececa564d48afadd1a1d018520ce45d00415ac03d
url: "https://pub.dev"
source: hosted
version: "0.2.0+1"
firebase_app_check_web:
dependency: transitive
description:
name: firebase_app_check_web
sha256: ab7b57c95faf266e2d5cd9fc57cda54d1fdfbc2c429c09b095830d4186f25920
url: "https://pub.dev"
source: hosted
version: "0.2.0+16"
firebase_auth:
dependency: "direct main"
description:
name: firebase_auth
sha256: b843f8b6897654899bfc437e385f710f79fdf1fe872ce629cbdf6017772d5803
url: "https://pub.dev"
source: hosted
version: "6.0.2"
firebase_auth_platform_interface:
dependency: transitive
description:
name: firebase_auth_platform_interface
sha256: c7acba5e95dc8095149c4534e968d61099896f1a09421d46d7c3fc3069082a37
url: "https://pub.dev"
source: hosted
version: "8.1.1"
firebase_auth_web:
dependency: transitive
description:
name: firebase_auth_web
sha256: "083c57b761b33f766824d7835c2b47abacbc4d82c7193e91442d77b983675b28"
url: "https://pub.dev"
source: hosted
version: "6.0.2"
firebase_core:
dependency: "direct main"
description:
name: firebase_core
sha256: "967dae9a65f69377beb9f4ab292ea63ce5befa1ce24682cab1b69ca4b7a46927"
url: "https://pub.dev"
source: hosted
version: "4.1.0"
firebase_core_platform_interface:
dependency: transitive
description:
name: firebase_core_platform_interface
sha256: "5dbc900677dcbe5873d22ad7fbd64b047750124f1f9b7ebe2a33b9ddccc838eb"
url: "https://pub.dev"
source: hosted
version: "6.0.0"
firebase_core_web:
dependency: transitive
description:
name: firebase_core_web
sha256: f7ee08febc1c4451588ce58ffcf28edaee857e9a196fee88b85deb889990094a
url: "https://pub.dev"
source: hosted
version: "3.1.0"
firebase_messaging:
dependency: "direct main"
description:
name: firebase_messaging
sha256: aad5dcdea5698499b70d74d5a53b1f6a9972f85f97225e4b7ac006dd8d4f9bac
url: "https://pub.dev"
source: hosted
version: "16.0.1"
firebase_messaging_platform_interface:
dependency: transitive
description:
name: firebase_messaging_platform_interface
sha256: "825bc11767bf50a43dccf49b3026f847ec31d0f176139bfc48d662cc128b5014"
url: "https://pub.dev"
source: hosted
version: "4.7.1"
firebase_messaging_web:
dependency: transitive
description:
name: firebase_messaging_web
sha256: db8dbdd79921245c4de02407e33cae2d1868683be18a5ba948d2af5311e3ef5d
url: "https://pub.dev"
source: hosted
version: "4.0.1"
fixnum:
dependency: transitive
description:
@ -246,6 +358,14 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
flutter_dotenv:
dependency: "direct main"
description:
name: flutter_dotenv
sha256: d4130c4a43e0b13fefc593bc3961f2cb46e30cb79e253d4a526b1b5d24ae1ce4
url: "https://pub.dev"
source: hosted
version: "6.0.0"
flutter_hooks:
dependency: "direct main"
description:
@ -262,6 +382,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "5.0.0"
flutter_plugin_android_lifecycle:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
sha256: b0694b7fb1689b0e6cc193b3f1fcac6423c4f93c74fb20b806c6b6f196db0c31
url: "https://pub.dev"
source: hosted
version: "2.0.30"
flutter_riverpod:
dependency: "direct main"
description:
@ -368,6 +496,54 @@ packages:
url: "https://pub.dev"
source: hosted
version: "6.3.1"
google_identity_services_web:
dependency: transitive
description:
name: google_identity_services_web
sha256: "5d187c46dc59e02646e10fe82665fc3884a9b71bc1c90c2b8b749316d33ee454"
url: "https://pub.dev"
source: hosted
version: "0.3.3+1"
google_sign_in:
dependency: "direct main"
description:
name: google_sign_in
sha256: "939a8b58f84c4053811b8c1bc9adbcb59449a15b37958264bbf60020698cca0e"
url: "https://pub.dev"
source: hosted
version: "7.1.1"
google_sign_in_android:
dependency: transitive
description:
name: google_sign_in_android
sha256: "666c3a133f5ec4256f08884359dc34788778d96a378d804203bc57a73ffbd9c0"
url: "https://pub.dev"
source: hosted
version: "7.0.5"
google_sign_in_ios:
dependency: transitive
description:
name: google_sign_in_ios
sha256: c7ee744ebbcd98353966dbdee735d4fca085226f6bf725c6bea8a5c8fe0055bc
url: "https://pub.dev"
source: hosted
version: "6.1.0"
google_sign_in_platform_interface:
dependency: transitive
description:
name: google_sign_in_platform_interface
sha256: "8736443134d2cccadd4f228d600177cb3947e36683466a6ab96877ce6932885a"
url: "https://pub.dev"
source: hosted
version: "3.0.0"
google_sign_in_web:
dependency: transitive
description:
name: google_sign_in_web
sha256: "09ac306b2787b48f19c857b9f93375b654f774643c75bd6a1a078c85f4f7b468"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
graphs:
dependency: transitive
description:
@ -400,6 +576,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "4.1.2"
iconsax_flutter:
dependency: transitive
description:
name: iconsax_flutter
sha256: d14b4cec8586025ac15276bdd40f6eea308cb85748135965bb6255f14beb2564
url: "https://pub.dev"
source: hosted
version: "1.0.1"
intl:
dependency: "direct main"
description:
@ -440,6 +624,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "6.10.0"
jwt_decode:
dependency: "direct main"
description:
name: jwt_decode
sha256: d2e9f68c052b2225130977429d30f187aa1981d789c76ad104a32243cfdebfbb
url: "https://pub.dev"
source: hosted
version: "0.3.1"
leak_tracker:
dependency: transitive
description:
@ -472,6 +664,46 @@ packages:
url: "https://pub.dev"
source: hosted
version: "5.1.1"
local_auth:
dependency: "direct main"
description:
name: local_auth
sha256: "434d854cf478f17f12ab29a76a02b3067f86a63a6d6c4eb8fbfdcfe4879c1b7b"
url: "https://pub.dev"
source: hosted
version: "2.3.0"
local_auth_android:
dependency: transitive
description:
name: local_auth_android
sha256: "48924f4a8b3cc45994ad5993e2e232d3b00788a305c1bf1c7db32cef281ce9a3"
url: "https://pub.dev"
source: hosted
version: "1.0.52"
local_auth_darwin:
dependency: transitive
description:
name: local_auth_darwin
sha256: "0e9706a8543a4a2eee60346294d6a633dd7c3ee60fae6b752570457c4ff32055"
url: "https://pub.dev"
source: hosted
version: "1.6.0"
local_auth_platform_interface:
dependency: transitive
description:
name: local_auth_platform_interface
sha256: "1b842ff177a7068442eae093b64abe3592f816afd2a533c0ebcdbe40f9d2075a"
url: "https://pub.dev"
source: hosted
version: "1.0.10"
local_auth_windows:
dependency: transitive
description:
name: local_auth_windows
sha256: bc4e66a29b0fdf751aafbec923b5bed7ad6ed3614875d8151afe2578520b2ab5
url: "https://pub.dev"
source: hosted
version: "1.0.11"
logging:
dependency: transitive
description:
@ -528,6 +760,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.2.0"
package_info_plus:
dependency: "direct main"
description:
name: package_info_plus
sha256: "16eee997588c60225bda0488b6dcfac69280a6b7a3cf02c741895dd370a02968"
url: "https://pub.dev"
source: hosted
version: "8.3.1"
package_info_plus_platform_interface:
dependency: transitive
description:
name: package_info_plus_platform_interface
sha256: "202a487f08836a592a6bd4f901ac69b3a8f146af552bbd14407b6b41e1c3f086"
url: "https://pub.dev"
source: hosted
version: "3.2.1"
path:
dependency: transitive
description:
@ -584,6 +832,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.3.0"
pausable_timer:
dependency: transitive
description:
name: pausable_timer
sha256: "6ef1a95441ec3439de6fb63f39a011b67e693198e7dae14e20675c3c00e86074"
url: "https://pub.dev"
source: hosted
version: "3.1.0+3"
petitparser:
dependency: transitive
description:
@ -757,6 +1013,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.10.1"
sprintf:
dependency: transitive
description:
name: sprintf
sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23"
url: "https://pub.dev"
source: hosted
version: "7.0.0"
stack_trace:
dependency: transitive
description:
@ -821,6 +1085,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.2"
toastification:
dependency: "direct main"
description:
name: toastification
sha256: "69db2bff425b484007409650d8bcd5ed1ce2e9666293ece74dcd917dacf23112"
url: "https://pub.dev"
source: hosted
version: "3.0.3"
typed_data:
dependency: transitive
description:
@ -837,6 +1109,78 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.1.0"
url_launcher:
dependency: "direct main"
description:
name: url_launcher
sha256: f6a7e5c4835bb4e3026a04793a4199ca2d14c739ec378fdfe23fc8075d0439f8
url: "https://pub.dev"
source: hosted
version: "6.3.2"
url_launcher_android:
dependency: transitive
description:
name: url_launcher_android
sha256: "69ee86740f2847b9a4ba6cffa74ed12ce500bbe2b07f3dc1e643439da60637b7"
url: "https://pub.dev"
source: hosted
version: "6.3.18"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
sha256: d80b3f567a617cb923546034cc94bfe44eb15f989fe670b37f26abdb9d939cb7
url: "https://pub.dev"
source: hosted
version: "6.3.4"
url_launcher_linux:
dependency: transitive
description:
name: url_launcher_linux
sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935"
url: "https://pub.dev"
source: hosted
version: "3.2.1"
url_launcher_macos:
dependency: transitive
description:
name: url_launcher_macos
sha256: c043a77d6600ac9c38300567f33ef12b0ef4f4783a2c1f00231d2b1941fea13f
url: "https://pub.dev"
source: hosted
version: "3.2.3"
url_launcher_platform_interface:
dependency: transitive
description:
name: url_launcher_platform_interface
sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029"
url: "https://pub.dev"
source: hosted
version: "2.3.2"
url_launcher_web:
dependency: transitive
description:
name: url_launcher_web
sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2"
url: "https://pub.dev"
source: hosted
version: "2.4.1"
url_launcher_windows:
dependency: transitive
description:
name: url_launcher_windows
sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77"
url: "https://pub.dev"
source: hosted
version: "3.1.4"
uuid:
dependency: transitive
description:
name: uuid
sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff
url: "https://pub.dev"
source: hosted
version: "4.5.1"
vector_math:
dependency: transitive
description:

View File

@ -48,6 +48,18 @@ dependencies:
intl: ^0.20.2
flutter_hooks: ^0.21.3+1
pinput: ^5.0.1
animated_bottom_navigation_bar: ^1.4.0
flutter_dotenv: ^6.0.0
jwt_decode: ^0.3.1
toastification: ^3.0.3
url_launcher: ^6.3.2
firebase_messaging: ^16.0.1
local_auth: ^2.3.0
google_sign_in: ^7.1.1
firebase_core: ^4.1.0
firebase_auth: ^6.0.2
firebase_app_check: ^0.4.0+1
package_info_plus: ^8.3.1
dev_dependencies:
flutter_test: