Minor Changes of const and bank logos

This commit is contained in:
2025-08-12 13:19:24 +05:30
parent 82951b7919
commit 7f5258b5b7
34 changed files with 166 additions and 840 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@@ -1,45 +0,0 @@
class BeneficiaryRecieve {
final String accountNo;
final String accountType;
final String name;
final String ifscCode;
final String bankName;
final String branchName;
BeneficiaryRecieve({
required this.accountNo,
required this.accountType,
required this.name,
required this.ifscCode,
required this.bankName,
required this.branchName,
});
factory BeneficiaryRecieve.fromJson(Map<String, dynamic> json) {
return BeneficiaryRecieve(
accountNo: json['account_no'] ?? '',
accountType: json['account_type'] ?? '',
name: json['name'] ?? '',
ifscCode: json['ifsc_code'] ?? '',
bankName: json['bank_name'] ?? '',
branchName: json['branch_name'] ?? '',
);
}
Map<String, dynamic> toJson() {
return {
'account_no': accountNo,
'account_type': accountType,
'name': name,
'ifsc_code' : ifscCode,
'bank_name' : bankName,
'branch_name' : branchName
};
}
@override
String toString() {
return 'ListBeneficiary(accountNo: $accountNo, accountType: $accountType, ifscCode: $ifscCode, name: $name, bankName: $bankName, branchName: $branchName)';
}
}

View File

@@ -60,7 +60,7 @@ Dio _createDioClient() {
BaseOptions(
baseUrl:
'http://lb-test-mobile-banking-app-192209417.ap-south-1.elb.amazonaws.com:8080',
// 'http://localhost:8081',
//'http://localhost:8081',
connectTimeout: const Duration(seconds: 5),
receiveTimeout: const Duration(seconds: 10),
headers: {

View File

@@ -87,13 +87,7 @@ class _AccountInfoScreen extends State<AccountInfoScreen> {
);
}).toList(),
),
/*InfoRow(
title: AppLocalizations.of(context).accountNumber,
value: users[selectedIndex].accountNo ?? 'N/A'),
// InfoRow(title: 'Nominee Customer No', value: user.nomineeCustomerNo),
// InfoRow(title: 'SMS Service', value: user.smsService),
// InfoRow(title: 'Missed Call Service', value: user.missedCallService),*/
InfoRow(
title: AppLocalizations.of(context).customerNumber,
value: selectedUser.cifNumber ?? 'N/A',

View File

@@ -64,6 +64,7 @@ class LoginScreenState extends State<LoginScreen>
final storage = getIt<SecureStorage>();
final mpin = await storage.read('mpin');
if (mpin == null) {
// ignore: use_build_context_synchronously
Navigator.of(context).pushReplacement(
MaterialPageRoute(
builder: (_) => MPinScreen(
@@ -82,6 +83,7 @@ class LoginScreenState extends State<LoginScreen>
),
);
} else {
// ignore: use_build_context_synchronously
Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (_) => const NavigationScaffold()),
);
@@ -133,14 +135,14 @@ class LoginScreenState extends State<LoginScreen>
decoration: InputDecoration(
labelText: AppLocalizations.of(context).customerNumber,
// prefixIcon: Icon(Icons.person),
border: OutlineInputBorder(),
border: const OutlineInputBorder(),
isDense: true,
filled: true,
fillColor: Theme.of(context).scaffoldBackgroundColor,
enabledBorder: OutlineInputBorder(
enabledBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black),
),
focusedBorder: OutlineInputBorder(
focusedBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black, width: 2),
),
),
@@ -211,22 +213,22 @@ class LoginScreenState extends State<LoginScreen>
? const CircularProgressIndicator()
: Text(
AppLocalizations.of(context).login,
style: TextStyle(fontSize: 16),
style: const TextStyle(fontSize: 16),
),
),
),
const SizedBox(height: 15),
Padding(
padding: EdgeInsets.symmetric(vertical: 16),
padding: const EdgeInsets.symmetric(vertical: 16),
child: Row(
children: [
Expanded(child: Divider()),
const Expanded(child: Divider()),
Padding(
padding: EdgeInsets.symmetric(horizontal: 8),
padding: const EdgeInsets.symmetric(horizontal: 8),
child: Text(AppLocalizations.of(context).or),
),
Expanded(child: Divider()),
const Expanded(child: Divider()),
],
),
),
@@ -257,227 +259,3 @@ class LoginScreenState extends State<LoginScreen>
);
}
}
/*import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:kmobile/di/injection.dart';
import 'package:kmobile/features/auth/screens/mpin_screen.dart';
import 'package:kmobile/security/secure_storage.dart';
import '../../../app.dart';
import '../controllers/auth_cubit.dart';
import '../controllers/auth_state.dart';
class LoginScreen extends StatefulWidget {
const LoginScreen({super.key});
@override
LoginScreenState createState() => LoginScreenState();
}
class LoginScreenState extends State<LoginScreen> {
final _formKey = GlobalKey<FormState>();
final _customerNumberController = TextEditingController();
final _passwordController = TextEditingController();
bool _obscurePassword = true;
@override
void dispose() {
_customerNumberController.dispose();
_passwordController.dispose();
super.dispose();
}
void _submitForm() {
if (_formKey.currentState!.validate()) {
context.read<AuthCubit>().login(
_customerNumberController.text.trim(),
_passwordController.text,
);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
// appBar: AppBar(title: const Text('Login')),
body: BlocConsumer<AuthCubit, AuthState>(
listener: (context, state) async {
if (state is Authenticated) {
final storage = getIt<SecureStorage>();
final mpin = await storage.read('mpin');
if (mpin == null) {
Navigator.of(context).pushReplacement(
MaterialPageRoute(
builder: (_) => MPinScreen(
mode: MPinMode.set,
onCompleted: (_) {
Navigator.of(context, rootNavigator: true)
.pushReplacement(
MaterialPageRoute(
builder: (_) => const NavigationScaffold()),
);
},
),
),
);
} else {
Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (_) => const NavigationScaffold()),
);
}
} else if (state is AuthError) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(state.message)),
);
}
},
builder: (context, state) {
return Padding(
padding: const EdgeInsets.all(24.0),
child: Form(
key: _formKey,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset('assets/images/logo.png', width: 150, height: 150,
errorBuilder: (context, error, stackTrace) {
return const Icon(Icons.account_balance,
size: 100, color: Colors.blue);
}),
const SizedBox(height: 16),
// Title
const Text(
'KCCB',
style: TextStyle(
fontSize: 32,
fontWeight: FontWeight.bold,
color: Colors.blue),
),
const SizedBox(height: 48),
TextFormField(
controller: _customerNumberController,
decoration: const InputDecoration(
labelText: 'Customer Number',
// prefixIcon: Icon(Icons.person),
border: OutlineInputBorder(),
isDense: true,
filled: true,
fillColor: Colors.white,
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(color: Colors.black),
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: Colors.black, width: 2),
),
),
keyboardType: TextInputType.number,
textInputAction: TextInputAction.next,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter your username';
}
return null;
},
),
const SizedBox(height: 24),
TextFormField(
controller: _passwordController,
decoration: InputDecoration(
labelText: 'Password',
// prefixIcon: const Icon(Icons.lock),
border: const OutlineInputBorder(),
isDense: true,
filled: true,
fillColor: Colors.white,
enabledBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black),
),
focusedBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black, width: 2),
),
suffixIcon: IconButton(
icon: Icon(
_obscurePassword
? Icons.visibility
: Icons.visibility_off,
),
onPressed: () {
setState(() {
_obscurePassword = !_obscurePassword;
});
},
),
),
textInputAction: TextInputAction.done,
obscureText: _obscurePassword,
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter your password';
}
return null;
},
),
const SizedBox(height: 24),
SizedBox(
width: 250,
child: ElevatedButton(
onPressed: state is AuthLoading ? null : _submitForm,
style: ElevatedButton.styleFrom(
shape: const StadiumBorder(),
padding: const EdgeInsets.symmetric(vertical: 16),
backgroundColor: Colors.white,
foregroundColor: Colors.blueAccent,
side: const BorderSide(color: Colors.black, width: 1),
elevation: 0),
child: state is AuthLoading
? const CircularProgressIndicator()
: const Text(
'Login',
style: TextStyle(fontSize: 16),
),
),
),
const SizedBox(height: 15),
const Padding(
padding: EdgeInsets.symmetric(vertical: 16),
child: Row(
children: [
Expanded(child: Divider()),
Padding(
padding: EdgeInsets.symmetric(horizontal: 8),
child: Text('OR'),
),
Expanded(child: Divider()),
],
),
),
const SizedBox(height: 25),
// Register Button
SizedBox(
width: 250,
child: ElevatedButton(
//disable until registration is implemented
onPressed: null,
style: OutlinedButton.styleFrom(
shape: const StadiumBorder(),
padding: const EdgeInsets.symmetric(vertical: 16),
backgroundColor: Colors.lightBlue[100],
foregroundColor: Colors.black),
child: const Text('Register'),
),
),
],
),
),
);
},
),
);
}
}
*/

View File

@@ -46,6 +46,7 @@ class _MPinScreenState extends State<MPinScreen> {
final auth = LocalAuthentication();
if (await auth.canCheckBiometrics) {
final didAuth = await auth.authenticate(
// ignore: use_build_context_synchronously
localizedReason: AppLocalizations.of(context).authenticateToAccess,
options: const AuthenticationOptions(biometricOnly: true),
);

View File

@@ -81,61 +81,3 @@ class _WelcomeScreenState extends State<WelcomeScreen> {
);
}
}
/*import 'package:flutter/material.dart';
class WelcomeScreen extends StatelessWidget {
final VoidCallback onContinue;
const WelcomeScreen({super.key, required this.onContinue});
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: Center(
child: Padding(
padding: const EdgeInsets.all(32.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Spacer(),
const Text(
'Welcome to',
style: TextStyle(fontSize: 28, color: Colors.black87),
),
const SizedBox(height: 10),
const Text(
'KCCB',
style: TextStyle(
fontSize: 42,
fontWeight: FontWeight.bold,
color: Colors.indigo,
),
),
const SizedBox(height: 40),
Image.asset(
'assets/images/logo.png',
width: 150,
height: 150,
),
const Spacer(),
ElevatedButton(
onPressed: onContinue,
style: ElevatedButton.styleFrom(
backgroundColor: Colors.indigo,
foregroundColor: Colors.white,
padding:
const EdgeInsets.symmetric(horizontal: 28, vertical: 20),
),
child: const Text('Proceed to Login'),
),
const SizedBox(height: 24),
],
),
),
),
);
}
}
*/

View File

@@ -148,6 +148,7 @@ class _AddBeneficiaryScreen extends State<AddBeneficiaryScreen> {
context: pinScreenContext,
barrierDismissible: false,
builder: (BuildContext ctx) {
// ignore: deprecated_member_use
return WillPopScope(
onWillPop: () async => false,
child: const Center(

View File

@@ -35,8 +35,8 @@ class _BeneficiaryResultPageState extends State<BeneficiaryResultPage> {
@override
Widget build(BuildContext context) {
final successAnimation = 'assets/animations/done.json';
final errorAnimation = 'assets/animations/error.json';
const successAnimation = 'assets/animations/done.json';
const errorAnimation = 'assets/animations/error.json';
return Scaffold(
backgroundColor: widget.isSuccess ? Colors.green[50] : Colors.red[50],

View File

@@ -61,7 +61,7 @@ class _ManageBeneficiariesScreen extends State<ManageBeneficiariesScreen> {
}
Widget _getBankLogo(String? bankName) {
if (bankName != null && bankName.toLowerCase().contains('state bank')) {
if (bankName != null && bankName.toLowerCase().contains('state bank of')) {
return Image.asset(
'assets/images/sbi_logo.png',
width: 40,
@@ -95,7 +95,35 @@ class _ManageBeneficiariesScreen extends State<ManageBeneficiariesScreen> {
width: 40,
height: 40,
);
}
}
if (bankName != null && bankName.toLowerCase().contains('axis')) {
return Image.asset(
'assets/images/axisBank_logo.png',
width: 40,
height: 40,
);
}
if (bankName != null && bankName.toLowerCase().contains('baroda')) {
return Image.asset(
'assets/images/bankofBaroda_logo.png',
width: 40,
height: 40,
);
}
if (bankName != null && bankName.toLowerCase().contains('canara bank')) {
return Image.asset(
'assets/images/canaraBank_logo.png',
width: 40,
height: 40,
);
}
if (bankName != null && bankName.toLowerCase().contains('kotak')) {
return Image.asset(
'assets/images/kotak_logo.png',
width: 40,
height: 40,
);
}
else {
return const Icon(
Icons.account_balance,

View File

@@ -20,7 +20,7 @@ class _CardManagementScreen extends State<CardManagementScreen> {
automaticallyImplyLeading: false,
title: Text(
AppLocalizations.of(context).cardManagement,
style: TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
style: const TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
),
centerTitle: false,
actions: [

View File

@@ -54,7 +54,7 @@ class _CardPinChangeDetailsScreen extends State<CardPinChangeDetailsScreen> {
),
title: Text(
AppLocalizations.of(context).cardDetails,
style: TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
style: const TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
),
centerTitle: false,
actions: [
@@ -84,14 +84,14 @@ class _CardPinChangeDetailsScreen extends State<CardPinChangeDetailsScreen> {
controller: _cardController,
decoration: InputDecoration(
labelText: AppLocalizations.of(context).cardNumber,
border: OutlineInputBorder(),
border: const OutlineInputBorder(),
isDense: true,
filled: true,
fillColor: Theme.of(context).scaffoldBackgroundColor,
enabledBorder: OutlineInputBorder(
enabledBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black),
),
focusedBorder: OutlineInputBorder(
focusedBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black, width: 2),
),
),
@@ -109,14 +109,14 @@ class _CardPinChangeDetailsScreen extends State<CardPinChangeDetailsScreen> {
controller: _cvvController,
decoration: InputDecoration(
labelText: AppLocalizations.of(context).cvv,
border: OutlineInputBorder(),
border: const OutlineInputBorder(),
isDense: true,
filled: true,
fillColor: Theme.of(context).scaffoldBackgroundColor,
enabledBorder: OutlineInputBorder(
enabledBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black),
),
focusedBorder: OutlineInputBorder(
focusedBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black, width: 2),
),
),
@@ -136,15 +136,15 @@ class _CardPinChangeDetailsScreen extends State<CardPinChangeDetailsScreen> {
onTap: _pickExpiryDate,
decoration: InputDecoration(
labelText: AppLocalizations.of(context).expiryDate,
suffixIcon: Icon(Icons.calendar_today),
border: OutlineInputBorder(),
suffixIcon: const Icon(Icons.calendar_today),
border: const OutlineInputBorder(),
isDense: true,
filled: true,
fillColor: Theme.of(context).scaffoldBackgroundColor,
enabledBorder: OutlineInputBorder(
enabledBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black),
),
focusedBorder: OutlineInputBorder(
focusedBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black, width: 2),
),
),
@@ -160,15 +160,15 @@ class _CardPinChangeDetailsScreen extends State<CardPinChangeDetailsScreen> {
controller: _phoneController,
decoration: InputDecoration(
labelText: AppLocalizations.of(context).phone,
prefixIcon: Icon(Icons.phone),
border: OutlineInputBorder(),
prefixIcon: const Icon(Icons.phone),
border: const OutlineInputBorder(),
isDense: true,
filled: true,
fillColor: Theme.of(context).scaffoldBackgroundColor,
enabledBorder: OutlineInputBorder(
enabledBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black),
),
focusedBorder: OutlineInputBorder(
focusedBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black, width: 2),
),
),

View File

@@ -54,7 +54,7 @@ class _CardPinSetScreen extends State<CardPinSetScreen> {
),
title: Text(
AppLocalizations.of(context).cardPin,
style: TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
style: const TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
),
centerTitle: false,
actions: [
@@ -84,14 +84,14 @@ class _CardPinSetScreen extends State<CardPinSetScreen> {
obscureText: true,
decoration: InputDecoration(
labelText: AppLocalizations.of(context).enterNewPin,
border: OutlineInputBorder(),
border: const OutlineInputBorder(),
isDense: true,
filled: true,
fillColor: Theme.of(context).scaffoldBackgroundColor,
enabledBorder: OutlineInputBorder(
enabledBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black),
),
focusedBorder: OutlineInputBorder(
focusedBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black, width: 2),
),
),
@@ -113,14 +113,14 @@ class _CardPinSetScreen extends State<CardPinSetScreen> {
obscureText: true,
decoration: InputDecoration(
labelText: AppLocalizations.of(context).enterAgain,
border: OutlineInputBorder(),
border: const OutlineInputBorder(),
isDense: true,
filled: true,
fillColor: Theme.of(context).scaffoldBackgroundColor,
enabledBorder: OutlineInputBorder(
enabledBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black),
),
focusedBorder: OutlineInputBorder(
focusedBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black, width: 2),
),
),

View File

@@ -24,7 +24,7 @@ class _ChequeManagementScreen extends State<ChequeManagementScreen> {
),
title: Text(
AppLocalizations.of(context).chequeManagement,
style: TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
style: const TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
),
centerTitle: false,
actions: [

View File

@@ -26,7 +26,7 @@ class _CustomerInfoScreenState extends State<CustomerInfoScreen> {
),
title: Text(
AppLocalizations.of(context).kMobile,
style: TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
style: const TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
),
actions: [
Padding(
@@ -78,7 +78,7 @@ class _CustomerInfoScreenState extends State<CustomerInfoScreen> {
'${AppLocalizations.of(context).cif}: ${user.cifNumber ?? 'N/A'}',
style: const TextStyle(fontSize: 16, color: Colors.grey),
),
SizedBox(height: 30),
const SizedBox(height: 30),
InfoField(
label: AppLocalizations.of(context).activeAccounts,
value: user.activeAccounts?.toString() ?? '6',

View File

@@ -1,3 +1,5 @@
// ignore_for_file: use_build_context_synchronously
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

View File

@@ -1,3 +1,5 @@
// ignore_for_file: use_build_context_synchronously
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:material_symbols_icons/material_symbols_icons.dart';
@@ -61,7 +63,7 @@ class _EnquiryScreen extends State<EnquiryScreen> {
),
title: Text(
AppLocalizations.of(context).enquiry,
style: TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
style: const TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
),
centerTitle: false,
actions: [
@@ -89,7 +91,7 @@ class _EnquiryScreen extends State<EnquiryScreen> {
const SizedBox(height: 20),
Text(
AppLocalizations.of(context).writeToUs,
style: TextStyle(color: Colors.grey),
style: const TextStyle(color: Colors.grey),
),
const SizedBox(height: 4),
Text(
@@ -97,7 +99,7 @@ class _EnquiryScreen extends State<EnquiryScreen> {
style: TextStyle(color: Theme.of(context).primaryColor),
),
SizedBox(height: 20),
const SizedBox(height: 20),
Text(
AppLocalizations.of(context).keyContacts,
style: TextStyle(

View File

@@ -1,3 +1,5 @@
// ignore_for_file: avoid_print
import 'dart:async';
import 'dart:convert';

View File

@@ -1,93 +1,3 @@
/*import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
// import 'package:kmobile/features/beneficiaries/screens/add_beneficiary_screen.dart';
import 'package:kmobile/features/fund_transfer/screens/fund_transfer_screen.dart';
import 'package:material_symbols_icons/material_symbols_icons.dart';
import '../../../l10n/app_localizations.dart';
class FundTransferBeneficiaryScreen extends StatefulWidget {
const FundTransferBeneficiaryScreen({super.key});
@override
State<FundTransferBeneficiaryScreen> createState() =>
_FundTransferBeneficiaryScreen();
}
class _FundTransferBeneficiaryScreen
extends State<FundTransferBeneficiaryScreen> {
final List<Map<String, String>> beneficiaries = [
{'bank': 'State Bank Of India', 'name': 'Trina Bakshi'},
{'bank': 'State Bank Of India', 'name': 'Sheetal Rao'},
{'bank': 'Punjab National Bank', 'name': 'Manoj Kumar'},
{'bank': 'State Bank Of India', 'name': 'Rohit Mehra'},
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
leading: IconButton(
icon: const Icon(Symbols.arrow_back_ios_new),
onPressed: () {
Navigator.pop(context);
},
),
title: Text(
AppLocalizations.of(context).fundTransferBeneficiary,
style: TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
),
centerTitle: false,
actions: [
Padding(
padding: const EdgeInsets.only(right: 10.0),
child: CircleAvatar(
backgroundColor: Colors.grey[200],
radius: 20,
child: SvgPicture.asset(
'assets/images/avatar_male.svg',
width: 40,
height: 40,
fit: BoxFit.cover,
),
),
),
],
),
body: Padding(
padding: const EdgeInsets.all(8.0),
child: ListView.builder(
itemCount: beneficiaries.length,
itemBuilder: (context, index) {
final beneficiary = beneficiaries[index];
return ListTile(
leading: CircleAvatar(
backgroundColor: Theme.of(context).primaryColor,
child: Text('A'),
),
title: Text(beneficiary['name']!),
subtitle: Text(beneficiary['bank']!),
trailing: IconButton(
icon: const Icon(Symbols.arrow_right, size: 20),
onPressed: () {
// Delete action
},
),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const FundTransferScreen(),
),
);
},
);
},
),
),
);
}
}*/
import 'package:flutter/material.dart';
import 'package:kmobile/data/models/beneficiary.dart';
import 'package:kmobile/features/fund_transfer/screens/fund_transfer_amount_screen.dart';

View File

@@ -87,7 +87,7 @@ class _FundTransferScreen extends State<FundTransferScreen> {
),
title: Text(
AppLocalizations.of(context).fundTransfer,
style: TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
style: const TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
),
centerTitle: false,
actions: const [
@@ -108,7 +108,7 @@ class _FundTransferScreen extends State<FundTransferScreen> {
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(AppLocalizations.of(context).debitFrom),
Text(
const Text(
'0300015678903456',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.w500),
),
@@ -117,7 +117,7 @@ class _FundTransferScreen extends State<FundTransferScreen> {
const SizedBox(height: 20),
Text(
AppLocalizations.of(context).enterAmount,
style: TextStyle(fontSize: 20),
style: const TextStyle(fontSize: 20),
),
const SizedBox(height: 20),
Container(

View File

@@ -1,3 +1,4 @@
// ignore_for_file: use_build_context_synchronously
import 'dart:io';
import 'dart:typed_data';
import 'dart:ui' as ui;
@@ -10,222 +11,6 @@ import 'package:path_provider/path_provider.dart';
import '../../../l10n/app_localizations.dart';
import 'package:confetti/confetti.dart';
/*class PaymentAnimationScreen extends StatefulWidget {
final Future<PaymentResponse> paymentResponse;
const PaymentAnimationScreen({super.key, required this.paymentResponse});
@override
State<PaymentAnimationScreen> createState() => _PaymentAnimationScreenState();
}
class _PaymentAnimationScreenState extends State<PaymentAnimationScreen> {
final GlobalKey _shareKey = GlobalKey();
Future<void> _shareScreenshot() async {
try {
RenderRepaintBoundary boundary =
_shareKey.currentContext!.findRenderObject() as RenderRepaintBoundary;
ui.Image image = await boundary.toImage(pixelRatio: 3.0);
ByteData? byteData = await image.toByteData(
format: ui.ImageByteFormat.png,
);
Uint8List pngBytes = byteData!.buffer.asUint8List();
final tempDir = await getTemporaryDirectory();
final file = await File('${tempDir.path}/payment_result.png').create();
await file.writeAsBytes(pngBytes);
await Share.shareXFiles([
XFile(file.path),
], text: '${AppLocalizations.of(context).paymentResult}');
} catch (e) {
if (!mounted) return;
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
'${AppLocalizations.of(context).failedToShareScreenshot}: $e',
),
),
);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: FutureBuilder<PaymentResponse>(
future: widget.paymentResponse,
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Center(
child: Lottie.asset(
'assets/animations/rupee.json',
width: 200,
height: 200,
repeat: true,
),
);
}
final response = snapshot.data!;
final isSuccess = response.isSuccess;
return Stack(
children: [
Center(
child: RepaintBoundary(
key: _shareKey,
child: Container(
color: Theme.of(context).scaffoldBackgroundColor,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const SizedBox(height: 80),
Lottie.asset(
isSuccess
? 'assets/animations/done.json'
: 'assets/animations/error.json',
width: 200,
height: 200,
repeat: false,
),
const SizedBox(height: 10),
isSuccess
? Column(
children: [
Text(
AppLocalizations.of(
context,
).paymentSuccessful,
style: const TextStyle(
fontSize: 22,
fontWeight: FontWeight.bold,
color: Colors.green,
),
),
const SizedBox(height: 16),
if (response.amount != null)
Text(
'${AppLocalizations.of(context).amount}: ${response.amount} ${response.currency ?? ''}',
style: const TextStyle(
fontSize: 18,
fontWeight: FontWeight.w700,
fontFamily: 'Rubik',
),
),
if (response.creditedAccount != null)
Text(
'${AppLocalizations.of(context).creditedAccount}: ${response.creditedAccount}',
style: const TextStyle(
fontSize: 18,
fontWeight: FontWeight.w500,
fontFamily: 'Rubik',
),
),
if (response.date != null)
Text(
'Date: ${response.date!.toLocal().toIso8601String()}',
style: const TextStyle(fontSize: 16),
),
],
)
: Column(
children: [
Text(
AppLocalizations.of(context).paymentFailed,
style: const TextStyle(
fontSize: 22,
fontWeight: FontWeight.bold,
color: Colors.red,
),
),
const SizedBox(height: 16),
if (response.errorMessage != null)
Text(
response.errorMessage!,
style: const TextStyle(fontSize: 16),
),
],
),
const SizedBox(height: 40),
],
),
),
),
),
// Buttons at the bottom
Positioned(
left: 0,
right: 0,
bottom: 80,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
ElevatedButton.icon(
onPressed: _shareScreenshot,
icon: Icon(
Icons.share_rounded,
color: Theme.of(context).primaryColor,
),
label: Text(
AppLocalizations.of(context).share,
style: TextStyle(color: Theme.of(context).primaryColor),
),
style: ElevatedButton.styleFrom(
backgroundColor: Theme.of(
context,
).scaffoldBackgroundColor,
padding: const EdgeInsets.symmetric(
horizontal: 32,
vertical: 12,
),
shape: RoundedRectangleBorder(
side: BorderSide(
color: Theme.of(context).primaryColor,
width: 1,
),
borderRadius: BorderRadius.circular(30),
),
textStyle: const TextStyle(
fontSize: 18,
fontWeight: FontWeight.w600,
color: Colors.black,
),
),
),
ElevatedButton.icon(
onPressed: () {
Navigator.of(
context,
).popUntil((route) => route.isFirst);
},
label: Text(AppLocalizations.of(context).done),
style: ElevatedButton.styleFrom(
padding: const EdgeInsets.symmetric(
horizontal: 45,
vertical: 12,
),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30),
),
textStyle: const TextStyle(
fontSize: 18,
fontWeight: FontWeight.w600,
),
),
),
],
),
),
],
);
},
),
);
}
}*/
class PaymentAnimationScreen extends StatefulWidget {
final Future<PaymentResponse> paymentResponse;
@@ -398,7 +183,7 @@ class _PaymentAnimationScreenState extends State<PaymentAnimationScreen> {
const SizedBox(height: 16),
if (response.errorMessage != null)
Text(response.errorMessage ?? '',
style: TextStyle(fontSize: 16),
style: const TextStyle(fontSize: 16),
),
],
),

View File

@@ -1,5 +1,4 @@
import '../../../l10n/app_localizations.dart';
import 'package:flutter/material.dart';
import 'package:kmobile/features/fund_transfer/screens/tpin_set_screen.dart';
@@ -132,7 +131,7 @@ class _TpinOtpScreenState extends State<TpinOtpScreen> {
icon: const Icon(Icons.verified_user_rounded),
label: Text(
AppLocalizations.of(context).verifyOtp,
style: TextStyle(fontSize: 18, fontWeight: FontWeight.w600),
style: const TextStyle(fontSize: 18, fontWeight: FontWeight.w600),
),
style: ElevatedButton.styleFrom(
backgroundColor: theme.colorScheme.primary,

View File

@@ -1,5 +1,4 @@
import '../../../l10n/app_localizations.dart';
import 'package:flutter/material.dart';
import 'package:kmobile/features/fund_transfer/screens/tpin_otp_screen.dart';
@@ -42,7 +41,7 @@ class TpinSetupPromptScreen extends StatelessWidget {
icon: const Icon(Icons.arrow_forward_rounded),
label: Text(
AppLocalizations.of(context).setTpin,
style: TextStyle(fontSize: 18, fontWeight: FontWeight.w600),
style: const TextStyle(fontSize: 18, fontWeight: FontWeight.w600),
),
style: ElevatedButton.styleFrom(
backgroundColor: theme.colorScheme.primary,

View File

@@ -55,6 +55,7 @@ class _TpinSetScreenState extends State<TpinSetScreen> {
await authService.setTpin(pin);
} catch (e) {
setState(() {
// ignore: unnecessary_string_interpolations
_errorText = "${AppLocalizations.of(context).tpinFailed}";
_tpin.clear();
});
@@ -71,11 +72,11 @@ class _TpinSetScreenState extends State<TpinSetScreen> {
),
title: Column(
children: [
Icon(Icons.check_circle, color: Colors.green, size: 60),
SizedBox(height: 12),
const Icon(Icons.check_circle, color: Colors.green, size: 60),
const SizedBox(height: 12),
Text(
AppLocalizations.of(context).success,
style: TextStyle(fontWeight: FontWeight.bold),
style: const TextStyle(fontWeight: FontWeight.bold),
),
],
),
@@ -90,7 +91,7 @@ class _TpinSetScreenState extends State<TpinSetScreen> {
},
child: Text(
AppLocalizations.of(context).ok,
style: TextStyle(fontSize: 16),
style: const TextStyle(fontSize: 16),
),
),
],

View File

@@ -58,7 +58,7 @@ class _TransactionSuccessScreen extends State<TransactionSuccessScreen> {
const SizedBox(height: 24),
Text(
AppLocalizations.of(context).transactionSuccess,
style: TextStyle(fontSize: 18, fontWeight: FontWeight.w600),
style: const TextStyle(fontSize: 18, fontWeight: FontWeight.w600),
textAlign: TextAlign.center,
),
const SizedBox(height: 6),

View File

@@ -1,9 +1,12 @@
// ignore_for_file: use_build_context_synchronously
import 'package:flutter/material.dart';
import '../../../l10n/app_localizations.dart';
import 'package:kmobile/app.dart';
import 'package:shared_preferences/shared_preferences.dart';
class LanguageDialog extends StatelessWidget {
// ignore: use_super_parameters
const LanguageDialog({Key? key}) : super(key: key);
Future<void> _setLocale(BuildContext context, String langCode) async {

View File

@@ -84,6 +84,7 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
final String accountNo = accountNumberController.text.trim();
final String ifsc = ifscController.text.trim();
// TODO: Replace with actual remitter name
// ignore: prefer_const_declarations
final String remitter = "Unknown";
final service = getIt<BeneficiaryService>();
@@ -273,7 +274,7 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
),
title: Text(
AppLocalizations.of(context).quickPayOutsideBank,
style: TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
style: const TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
),
centerTitle: false,
actions: [
@@ -320,14 +321,14 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
TextFormField(
decoration: InputDecoration(
labelText: AppLocalizations.of(context).accountNumber,
border: OutlineInputBorder(),
border: const OutlineInputBorder(),
isDense: true,
filled: true,
fillColor: Theme.of(context).scaffoldBackgroundColor,
enabledBorder: OutlineInputBorder(
enabledBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black),
),
focusedBorder: OutlineInputBorder(
focusedBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black, width: 2),
),
),
@@ -356,14 +357,14 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
decoration: InputDecoration(
labelText: AppLocalizations.of(context).confirmAccountNumber,
// prefixIcon: Icon(Icons.person),
border: OutlineInputBorder(),
border: const OutlineInputBorder(),
isDense: true,
filled: true,
fillColor: Theme.of(context).scaffoldBackgroundColor,
enabledBorder: OutlineInputBorder(
enabledBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black),
),
focusedBorder: OutlineInputBorder(
focusedBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black, width: 2),
),
),
@@ -386,14 +387,14 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
child: TextFormField(
decoration: InputDecoration(
labelText: AppLocalizations.of(context).ifscCode,
border: OutlineInputBorder(),
border: const OutlineInputBorder(),
isDense: true,
filled: true,
fillColor: Theme.of(context).scaffoldBackgroundColor,
enabledBorder: OutlineInputBorder(
enabledBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black),
),
focusedBorder: OutlineInputBorder(
focusedBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black, width: 2),
),
),
@@ -431,14 +432,14 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
value: accountType,
decoration: InputDecoration(
labelText: AppLocalizations.of(context).accountType,
border: OutlineInputBorder(),
border: const OutlineInputBorder(),
isDense: true,
filled: true,
fillColor: Theme.of(context).scaffoldBackgroundColor,
enabledBorder: OutlineInputBorder(
enabledBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black),
),
focusedBorder: OutlineInputBorder(
focusedBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black, width: 2),
),
),
@@ -539,7 +540,7 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
padding: const EdgeInsets.only(bottom: 24.0),
child: Text(
_validationError!,
style: TextStyle(color: Colors.red),
style: const TextStyle(color: Colors.red),
),
),
TextFormField(
@@ -575,15 +576,15 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
keyboardType: TextInputType.phone,
decoration: InputDecoration(
labelText: AppLocalizations.of(context).phone,
prefixIcon: Icon(Icons.phone),
border: OutlineInputBorder(),
prefixIcon: const Icon(Icons.phone),
border: const OutlineInputBorder(),
isDense: true,
filled: true,
fillColor: Theme.of(context).scaffoldBackgroundColor,
enabledBorder: OutlineInputBorder(
enabledBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black),
),
focusedBorder: OutlineInputBorder(
focusedBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black, width: 2),
),
),
@@ -598,14 +599,14 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
child: TextFormField(
decoration: InputDecoration(
labelText: AppLocalizations.of(context).amount,
border: OutlineInputBorder(),
border: const OutlineInputBorder(),
isDense: true,
filled: true,
fillColor: Theme.of(context).scaffoldBackgroundColor,
enabledBorder: OutlineInputBorder(
enabledBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black),
),
focusedBorder: OutlineInputBorder(
focusedBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black, width: 2),
),
),
@@ -631,7 +632,7 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
children: [
Text(
AppLocalizations.of(context).transactionMode,
style: TextStyle(fontWeight: FontWeight.w500),
style: const TextStyle(fontWeight: FontWeight.w500),
),
const SizedBox(width: 12),
Expanded(child: buildTransactionModeSelector()),
@@ -649,7 +650,7 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
onSwipe: _onProceedToPay,
child: Text(
AppLocalizations.of(context).swipeToPay,
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
),
),
),

View File

@@ -167,15 +167,6 @@ class _QuickPayWithinBankScreen extends State<QuickPayWithinBankScreen> {
return null;
},
),
// const Align(
// alignment: Alignment.topLeft,
// child: Padding(
// padding: EdgeInsets.only(left: 15.0, top: 5),
// child: Text(
// 'Beneficiary Account Number',
// style: TextStyle(color: Colors.black54),
// ),
// )),
const SizedBox(height: 25),
TextFormField(
controller: confirmAccountNumberController,
@@ -298,15 +289,6 @@ class _QuickPayWithinBankScreen extends State<QuickPayWithinBankScreen> {
return null;
},
),
// const Align(
// alignment: Alignment.topLeft,
// child: Padding(
// padding: EdgeInsets.only(left: 15.0, top: 5),
// child: Text(
// 'Beneficiary Account Type',
// style: TextStyle(color: Colors.black54),
// ),
// )),
const SizedBox(height: 25),
TextFormField(
decoration: InputDecoration(
@@ -392,69 +374,6 @@ class _QuickPayWithinBankScreen extends State<QuickPayWithinBankScreen> {
},
),
),
/*Align(
alignment: Alignment.center,
child: NeumorphicButton(
onPressed: () {
if (_formKey.currentState!.validate()) {
if (!_isBeneficiaryValidated) {
setState(() {
_validationError =
'Please validate beneficiary before proceeding.';
});
return;
}
// Perform payment logic
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => TransactionPinScreen(
transactionData: Transfer(
fromAccount: widget.debitAccount,
toAccount: accountNumberController.text,
toAccountType: _selectedAccountType!,
amount: amountController.text,
),
),
),
);
}
},
style: NeumorphicStyle(
color: Theme.of(context).primaryColor,
depth: 4,
intensity: 0.8,
boxShape: NeumorphicBoxShape.roundRect(BorderRadius.circular(30)),
),
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 16),
child: Center(
child: Text(
AppLocalizations.of(context).swipeToPay,
style: const TextStyle(
fontSize: 16,
color: Colors.white,
fontWeight: FontWeight.bold,
),
),
),
),
),*/
// SliderButton(
// action: () async {
// ///Do something here OnSlide
// return true;
// },
// label: const Text(
// "Slide to pay",
// style: TextStyle(
// color: Color(0xff4a4a4a),
// fontWeight: FontWeight.w500,
// fontSize: 17),
// ),
// icon: Icon(Symbols.arrow_forward,
// color: Theme.of(context).primaryColor, weight: 200),
// )
],
),
),

View File

@@ -18,7 +18,7 @@ class _ServiceScreen extends State<ServiceScreen> {
automaticallyImplyLeading: false,
title: Text(
AppLocalizations.of(context).services,
style: TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
style: const TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
),
centerTitle: false,
actions: [

View File

@@ -21,10 +21,10 @@ packages:
dependency: transitive
description:
name: async
sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
url: "https://pub.dev"
source: hosted
version: "2.13.0"
version: "2.11.0"
bloc:
dependency: "direct main"
description:
@@ -37,10 +37,10 @@ packages:
dependency: transitive
description:
name: boolean_selector
sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
version: "2.1.1"
chalkdart:
dependency: transitive
description:
@@ -53,10 +53,10 @@ packages:
dependency: transitive
description:
name: characters
sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
url: "https://pub.dev"
source: hosted
version: "1.4.0"
version: "1.3.0"
checked_yaml:
dependency: transitive
description:
@@ -77,18 +77,18 @@ packages:
dependency: transitive
description:
name: clock
sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
url: "https://pub.dev"
source: hosted
version: "1.1.2"
version: "1.1.1"
collection:
dependency: transitive
description:
name: collection
sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
url: "https://pub.dev"
source: hosted
version: "1.19.1"
version: "1.18.0"
confetti:
dependency: "direct main"
description:
@@ -149,10 +149,10 @@ packages:
dependency: transitive
description:
name: fake_async
sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
url: "https://pub.dev"
source: hosted
version: "1.3.3"
version: "1.3.1"
ffi:
dependency: transitive
description:
@@ -353,10 +353,10 @@ packages:
dependency: "direct main"
description:
name: intl
sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5"
sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
url: "https://pub.dev"
source: hosted
version: "0.20.2"
version: "0.19.0"
js:
dependency: transitive
description:
@@ -377,18 +377,18 @@ packages:
dependency: transitive
description:
name: leak_tracker
sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
url: "https://pub.dev"
source: hosted
version: "10.0.9"
version: "10.0.5"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
url: "https://pub.dev"
source: hosted
version: "3.0.9"
version: "3.0.5"
leak_tracker_testing:
dependency: transitive
description:
@@ -457,10 +457,10 @@ packages:
dependency: transitive
description:
name: matcher
sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
url: "https://pub.dev"
source: hosted
version: "0.12.17"
version: "0.12.16+1"
material_color_utilities:
dependency: transitive
description:
@@ -481,10 +481,10 @@ packages:
dependency: transitive
description:
name: meta
sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
url: "https://pub.dev"
source: hosted
version: "1.16.0"
version: "1.15.0"
mime:
dependency: transitive
description:
@@ -505,10 +505,10 @@ packages:
dependency: transitive
description:
name: path
sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
url: "https://pub.dev"
source: hosted
version: "1.9.1"
version: "1.9.0"
path_parsing:
dependency: transitive
description:
@@ -689,15 +689,15 @@ packages:
dependency: transitive
description: flutter
source: sdk
version: "0.0.0"
version: "0.0.99"
source_span:
dependency: transitive
description:
name: source_span
sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
url: "https://pub.dev"
source: hosted
version: "1.10.1"
version: "1.10.0"
sprintf:
dependency: transitive
description:
@@ -710,42 +710,42 @@ packages:
dependency: transitive
description:
name: stack_trace
sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
url: "https://pub.dev"
source: hosted
version: "1.12.1"
version: "1.11.1"
stream_channel:
dependency: transitive
description:
name: stream_channel
sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
url: "https://pub.dev"
source: hosted
version: "2.1.4"
version: "2.1.2"
string_scanner:
dependency: transitive
description:
name: string_scanner
sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
url: "https://pub.dev"
source: hosted
version: "1.4.1"
version: "1.2.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
url: "https://pub.dev"
source: hosted
version: "1.2.2"
version: "1.2.1"
test_api:
dependency: transitive
description:
name: test_api
sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
url: "https://pub.dev"
source: hosted
version: "0.7.4"
version: "0.7.2"
typed_data:
dependency: transitive
description:
@@ -862,10 +862,10 @@ packages:
dependency: transitive
description:
name: vm_service
sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
url: "https://pub.dev"
source: hosted
version: "15.0.0"
version: "14.2.5"
web:
dependency: transitive
description:
@@ -907,5 +907,5 @@ packages:
source: hosted
version: "3.1.3"
sdks:
dart: ">=3.7.0-0 <4.0.0"
dart: ">=3.5.0 <4.0.0"
flutter: ">=3.24.0"

View File

@@ -92,6 +92,10 @@ flutter:
- assets/images/avatar.jpg
- assets/images/logo.png
- assets/images/sbi_logo.png
- assets/images/axisbank_logo.png
- assets/images/BankofBaroda_logo.png
- assets/images/canaraBank_logo.png
- assets/images/kotak_logo.png
- assets/images/kmobile_splash.jpg
- assets/images/kmobile_splash2.png
- assets/images/icon.svg