Watermark added, Card commented out and account opening commented out

This commit is contained in:
2025-11-12 15:59:41 +05:30
parent ef481ec879
commit 39165d631e
41 changed files with 3441 additions and 2661 deletions

View File

@@ -316,7 +316,7 @@ class _NavigationScaffoldState extends State<NavigationScaffold> {
int _selectedIndex = 0; int _selectedIndex = 0;
final List<Widget> _pages = [ final List<Widget> _pages = [
const DashboardScreen(), const DashboardScreen(),
const CardManagementScreen(), // const CardManagementScreen(),
const ServiceScreen(), const ServiceScreen(),
]; ];
@@ -374,10 +374,10 @@ class _NavigationScaffoldState extends State<NavigationScaffold> {
icon: const Icon(Icons.home_filled), icon: const Icon(Icons.home_filled),
label: AppLocalizations.of(context).home, label: AppLocalizations.of(context).home,
), ),
BottomNavigationBarItem( // BottomNavigationBarItem(
icon: const Icon(Icons.credit_card), // icon: const Icon(Icons.credit_card),
label: AppLocalizations.of(context).card, // label: AppLocalizations.of(context).card,
), // ),
BottomNavigationBarItem( BottomNavigationBarItem(
icon: const Icon(Icons.miscellaneous_services), icon: const Icon(Icons.miscellaneous_services),
label: AppLocalizations.of(context).services, label: AppLocalizations.of(context).services,

View File

@@ -1,4 +1,3 @@
class Beneficiary { class Beneficiary {
final String accountNo; final String accountNo;
final String accountType; final String accountType;

View File

@@ -69,9 +69,9 @@ Dio _createDioClient() {
final dio = Dio( final dio = Dio(
BaseOptions( BaseOptions(
baseUrl: baseUrl:
//'http://lb-test-mobile-banking-app-192209417.ap-south-1.elb.amazonaws.com:8080', //test 'http://lb-test-mobile-banking-app-192209417.ap-south-1.elb.amazonaws.com:8080', //test
//'http://lb-kccb-mobile-banking-app-848675342.ap-south-1.elb.amazonaws.com', //prod //'http://lb-kccb-mobile-banking-app-848675342.ap-south-1.elb.amazonaws.com', //prod
'https://kccbmbnk.net', //prod small //'https://kccbmbnk.net', //prod small
connectTimeout: const Duration(seconds: 60), connectTimeout: const Duration(seconds: 60),
receiveTimeout: const Duration(seconds: 60), receiveTimeout: const Duration(seconds: 60),
headers: { headers: {

View File

@@ -34,12 +34,15 @@ class _AccountInfoScreen extends State<AccountInfoScreen> {
.accountInfo .accountInfo
.replaceFirst(RegExp('\n'), '')), .replaceFirst(RegExp('\n'), '')),
), ),
body: ListView( body: Stack(
children: [
ListView(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
children: [ children: [
Text( Text(
AppLocalizations.of(context).accountNumber, AppLocalizations.of(context).accountNumber,
style: const TextStyle(fontWeight: FontWeight.w500, fontSize: 14), style:
const TextStyle(fontWeight: FontWeight.w500, fontSize: 14),
), ),
DropdownButton<User>( DropdownButton<User>(
@@ -89,6 +92,20 @@ class _AccountInfoScreen extends State<AccountInfoScreen> {
: const SizedBox.shrink(), : const SizedBox.shrink(),
], ],
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }
} }

View File

@@ -133,7 +133,9 @@ class _AccountStatementScreen extends State<AccountStatementScreen> {
), ),
centerTitle: false, centerTitle: false,
), ),
body: Padding( body: Stack(
children: [
Padding(
padding: const EdgeInsets.all(12.0), padding: const EdgeInsets.all(12.0),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@@ -147,7 +149,8 @@ class _AccountStatementScreen extends State<AccountStatementScreen> {
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
), ),
Text(widget.accountNo, style: const TextStyle(fontSize: 17)), Text(widget.accountNo,
style: const TextStyle(fontSize: 17)),
], ],
), ),
const SizedBox(height: 15), const SizedBox(height: 15),
@@ -247,7 +250,8 @@ class _AccountStatementScreen extends State<AccountStatementScreen> {
child: Container( child: Container(
height: 10, height: 10,
width: 100, width: 100,
color: Theme.of(context).scaffoldBackgroundColor, color:
Theme.of(context).scaffoldBackgroundColor,
), ),
), ),
subtitle: Shimmer.fromColors( subtitle: Shimmer.fromColors(
@@ -256,7 +260,8 @@ class _AccountStatementScreen extends State<AccountStatementScreen> {
child: Container( child: Container(
height: 8, height: 8,
width: 60, width: 60,
color: Theme.of(context).scaffoldBackgroundColor, color:
Theme.of(context).scaffoldBackgroundColor,
), ),
), ),
), ),
@@ -267,7 +272,8 @@ class _AccountStatementScreen extends State<AccountStatementScreen> {
AppLocalizations.of(context).noTransactions, AppLocalizations.of(context).noTransactions,
style: TextStyle( style: TextStyle(
fontSize: 16, fontSize: 16,
color: Theme.of(context).colorScheme.onSurface, color:
Theme.of(context).colorScheme.onSurface,
)), )),
) )
: ListView.separated( : ListView.separated(
@@ -306,7 +312,8 @@ class _AccountStatementScreen extends State<AccountStatementScreen> {
Text( Text(
"Bal: ₹${tx.balance}", "Bal: ₹${tx.balance}",
style: const TextStyle( style: const TextStyle(
fontSize: 12), // Style matches tx.name fontSize:
12), // Style matches tx.name
), ),
], ],
), ),
@@ -314,7 +321,8 @@ class _AccountStatementScreen extends State<AccountStatementScreen> {
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: (_) => TransactionDetailsScreen( builder: (_) =>
TransactionDetailsScreen(
transaction: tx), transaction: tx),
), ),
); );
@@ -329,6 +337,20 @@ class _AccountStatementScreen extends State<AccountStatementScreen> {
], ],
), ),
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
floatingActionButton: FloatingActionButton( floatingActionButton: FloatingActionButton(
onPressed: () { onPressed: () {
_exportToPdf(); _exportToPdf();

View File

@@ -14,7 +14,9 @@ class TransactionDetailsScreen extends StatelessWidget {
return Scaffold( return Scaffold(
appBar: appBar:
AppBar(title: Text(AppLocalizations.of(context).transactionDetails)), AppBar(title: Text(AppLocalizations.of(context).transactionDetails)),
body: Padding( body: Stack(
children: [
Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
child: Column( child: Column(
children: [ children: [
@@ -37,7 +39,9 @@ class TransactionDetailsScreen extends StatelessWidget {
), ),
const SizedBox(width: 8), const SizedBox(width: 8),
Icon( Icon(
isCredit ? Symbols.call_received : Symbols.call_made, isCredit
? Symbols.call_received
: Symbols.call_made,
color: isCredit ? Colors.green : Colors.red, color: isCredit ? Colors.green : Colors.red,
size: 28, size: 28,
), ),
@@ -62,7 +66,8 @@ class TransactionDetailsScreen extends StatelessWidget {
flex: 5, flex: 5,
child: ListView( child: ListView(
children: [ children: [
_buildDetailRow(AppLocalizations.of(context).transactionType, _buildDetailRow(
AppLocalizations.of(context).transactionType,
transaction.type ?? ""), transaction.type ?? ""),
_buildDetailRow(AppLocalizations.of(context).transferType, _buildDetailRow(AppLocalizations.of(context).transferType,
transaction.name.split("/").first ?? ""), transaction.name.split("/").first ?? ""),
@@ -73,14 +78,28 @@ class TransactionDetailsScreen extends StatelessWidget {
// AppLocalizations.of(context).beneficiaryAccountNo, // AppLocalizations.of(context).beneficiaryAccountNo,
// transaction.name.split("A/C ").last ?? "") // transaction.name.split("A/C ").last ?? "")
// ] // ]
_buildDetailRow( _buildDetailRow(AppLocalizations.of(context).details,
AppLocalizations.of(context).details, transaction.name), transaction.name),
], ],
), ),
), ),
], ],
), ),
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }

View File

@@ -12,7 +12,9 @@ class TncRequiredScreen extends StatelessWidget {
appBar: AppBar( appBar: AppBar(
title: const Text('Terms and Conditions'), title: const Text('Terms and Conditions'),
), ),
body: Center( body: Stack(
children: [
Center(
child: Padding( child: Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
child: Column( child: Column(
@@ -35,6 +37,20 @@ class TncRequiredScreen extends StatelessWidget {
), ),
), ),
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }
} }

View File

@@ -264,7 +264,9 @@ class _AddBeneficiaryScreen extends State<AddBeneficiaryScreen> {
centerTitle: false, centerTitle: false,
), ),
body: SafeArea( body: SafeArea(
child: Form( child: Stack(
children: [
Form(
key: _formKey, key: _formKey,
child: Column( child: Column(
children: [ children: [
@@ -343,7 +345,8 @@ class _AddBeneficiaryScreen extends State<AddBeneficiaryScreen> {
LengthLimitingTextInputFormatter(11), LengthLimitingTextInputFormatter(11),
], ],
decoration: InputDecoration( decoration: InputDecoration(
labelText: AppLocalizations.of(context).ifscCode, labelText:
AppLocalizations.of(context).ifscCode,
border: const OutlineInputBorder(), border: const OutlineInputBorder(),
isDense: true, isDense: true,
), ),
@@ -360,7 +363,8 @@ class _AddBeneficiaryScreen extends State<AddBeneficiaryScreen> {
}); });
}, },
validator: (value) { validator: (value) {
final pattern = RegExp(r'^[A-Z]{4}0[A-Z0-9]{6}$'); final pattern =
RegExp(r'^[A-Z]{4}0[A-Z0-9]{6}$');
if (value == null || value.trim().isEmpty) { if (value == null || value.trim().isEmpty) {
return AppLocalizations.of(context).enterIfsc; return AppLocalizations.of(context).enterIfsc;
} else if (!pattern.hasMatch( } else if (!pattern.hasMatch(
@@ -377,9 +381,11 @@ class _AddBeneficiaryScreen extends State<AddBeneficiaryScreen> {
// Bank Name (Disabled) // Bank Name (Disabled)
TextFormField( TextFormField(
controller: bankNameController, controller: bankNameController,
enabled: false, // changed from readOnly to disabled enabled:
false, // changed from readOnly to disabled
decoration: InputDecoration( decoration: InputDecoration(
labelText: AppLocalizations.of(context).bankName, labelText:
AppLocalizations.of(context).bankName,
border: const OutlineInputBorder(), border: const OutlineInputBorder(),
isDense: true, isDense: true,
), ),
@@ -388,9 +394,11 @@ class _AddBeneficiaryScreen extends State<AddBeneficiaryScreen> {
// 🔹 Branch Name (Disabled) // 🔹 Branch Name (Disabled)
TextFormField( TextFormField(
controller: branchNameController, controller: branchNameController,
enabled: false, // changed from readOnly to disabled enabled:
false, // changed from readOnly to disabled
decoration: InputDecoration( decoration: InputDecoration(
labelText: AppLocalizations.of(context).branchName, labelText:
AppLocalizations.of(context).branchName,
border: const OutlineInputBorder(), border: const OutlineInputBorder(),
isDense: true, isDense: true,
), ),
@@ -418,9 +426,10 @@ class _AddBeneficiaryScreen extends State<AddBeneficiaryScreen> {
isDense: true, isDense: true,
), ),
textInputAction: TextInputAction.next, textInputAction: TextInputAction.next,
validator: (value) => value == null || validator: (value) =>
value.isEmpty value == null || value.isEmpty
? AppLocalizations.of(context).nameRequired ? AppLocalizations.of(context)
.nameRequired
: null, : null,
), ),
], ],
@@ -437,7 +446,8 @@ class _AddBeneficiaryScreen extends State<AddBeneficiaryScreen> {
? null ? null
: () { : () {
final isAccountValid = final isAccountValid =
_accountNumberFieldKey.currentState! _accountNumberFieldKey
.currentState!
.validate(); .validate();
final isConfirmAccountValid = final isConfirmAccountValid =
_confirmAccountNumberFieldKey _confirmAccountNumberFieldKey
@@ -470,7 +480,8 @@ class _AddBeneficiaryScreen extends State<AddBeneficiaryScreen> {
DropdownButtonFormField<String>( DropdownButtonFormField<String>(
value: accountType, value: accountType,
decoration: InputDecoration( decoration: InputDecoration(
labelText: AppLocalizations.of(context).accountType, labelText:
AppLocalizations.of(context).accountType,
border: const OutlineInputBorder(), border: const OutlineInputBorder(),
isDense: true, isDense: true,
), ),
@@ -503,8 +514,8 @@ class _AddBeneficiaryScreen extends State<AddBeneficiaryScreen> {
isDense: true, isDense: true,
), ),
textInputAction: TextInputAction.done, textInputAction: TextInputAction.done,
validator: (value) => validator: (value) => value == null ||
value == null || value.length != 10 value.length != 10
? AppLocalizations.of(context).enterValidPhone ? AppLocalizations.of(context).enterValidPhone
: null, : null,
), ),
@@ -525,8 +536,9 @@ class _AddBeneficiaryScreen extends State<AddBeneficiaryScreen> {
padding: const EdgeInsets.symmetric(vertical: 16), padding: const EdgeInsets.symmetric(vertical: 16),
backgroundColor: backgroundColor:
Theme.of(context).colorScheme.primaryContainer, Theme.of(context).colorScheme.primaryContainer,
foregroundColor: foregroundColor: Theme.of(context)
Theme.of(context).colorScheme.onPrimaryContainer), .colorScheme
.onPrimaryContainer),
child: Text( child: Text(
AppLocalizations.of(context).validateAndAdd, AppLocalizations.of(context).validateAndAdd,
style: const TextStyle(fontSize: 16), style: const TextStyle(fontSize: 16),
@@ -537,6 +549,20 @@ class _AddBeneficiaryScreen extends State<AddBeneficiaryScreen> {
], ],
), ),
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
), ),
); );
} }

View File

@@ -81,7 +81,9 @@ class BeneficiaryDetailsScreen extends StatelessWidget {
title: Text(AppLocalizations.of(context).beneficiarydetails), title: Text(AppLocalizations.of(context).beneficiarydetails),
), ),
body: SafeArea( body: SafeArea(
child: Padding( child: Stack(
children: [
Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@@ -104,9 +106,11 @@ class BeneficiaryDetailsScreen extends StatelessWidget {
const SizedBox(height: 24), const SizedBox(height: 24),
_buildDetailRow('${AppLocalizations.of(context).bankName} ', _buildDetailRow('${AppLocalizations.of(context).bankName} ',
beneficiary.bankName ?? 'N/A'), beneficiary.bankName ?? 'N/A'),
_buildDetailRow('${AppLocalizations.of(context).accountNumber} ', _buildDetailRow(
'${AppLocalizations.of(context).accountNumber} ',
beneficiary.accountNo), beneficiary.accountNo),
_buildDetailRow('${AppLocalizations.of(context).accountType} ', _buildDetailRow(
'${AppLocalizations.of(context).accountType} ',
beneficiary.accountType), beneficiary.accountType),
_buildDetailRow('${AppLocalizations.of(context).ifscCode} ', _buildDetailRow('${AppLocalizations.of(context).ifscCode} ',
beneficiary.ifscCode), beneficiary.ifscCode),
@@ -136,6 +140,20 @@ class BeneficiaryDetailsScreen extends StatelessWidget {
], ],
), ),
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
), ),
); );
} }

View File

@@ -109,7 +109,23 @@ class _ManageBeneficiariesScreen extends State<ManageBeneficiariesScreen> {
appBar: AppBar( appBar: AppBar(
title: Text(AppLocalizations.of(context).beneficiaries), title: Text(AppLocalizations.of(context).beneficiaries),
), ),
body: _isLoading ? _buildShimmerList() : _buildBeneficiaryList(), body: Stack(
children: [
_isLoading ? _buildShimmerList() : _buildBeneficiaryList(),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
floatingActionButton: Padding( floatingActionButton: Padding(
padding: const EdgeInsets.only(bottom: 8.0), padding: const EdgeInsets.only(bottom: 8.0),
child: FloatingActionButton( child: FloatingActionButton(

View File

@@ -61,7 +61,9 @@ class _BlockCardScreen extends State<BlockCardScreen> {
), ),
centerTitle: false, centerTitle: false,
), ),
body: Padding( body: Stack(
children: [
Padding(
padding: const EdgeInsets.all(10.0), padding: const EdgeInsets.all(10.0),
child: Form( child: Form(
key: _formKey, key: _formKey,
@@ -100,18 +102,21 @@ class _BlockCardScreen extends State<BlockCardScreen> {
border: const OutlineInputBorder(), border: const OutlineInputBorder(),
isDense: true, isDense: true,
filled: true, filled: true,
fillColor: Theme.of(context).scaffoldBackgroundColor, fillColor:
Theme.of(context).scaffoldBackgroundColor,
enabledBorder: const OutlineInputBorder( enabledBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black), borderSide: BorderSide(color: Colors.black),
), ),
focusedBorder: const OutlineInputBorder( focusedBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black, width: 2), borderSide:
BorderSide(color: Colors.black, width: 2),
), ),
), ),
keyboardType: TextInputType.number, keyboardType: TextInputType.number,
textInputAction: TextInputAction.next, textInputAction: TextInputAction.next,
obscureText: true, obscureText: true,
validator: (value) => value != null && value.length == 3 validator: (value) =>
value != null && value.length == 3
? null ? null
: AppLocalizations.of(context).cvv3Digits, : AppLocalizations.of(context).cvv3Digits,
), ),
@@ -128,15 +133,18 @@ class _BlockCardScreen extends State<BlockCardScreen> {
border: const OutlineInputBorder(), border: const OutlineInputBorder(),
isDense: true, isDense: true,
filled: true, filled: true,
fillColor: Theme.of(context).scaffoldBackgroundColor, fillColor:
Theme.of(context).scaffoldBackgroundColor,
enabledBorder: const OutlineInputBorder( enabledBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black), borderSide: BorderSide(color: Colors.black),
), ),
focusedBorder: const OutlineInputBorder( focusedBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black, width: 2), borderSide:
BorderSide(color: Colors.black, width: 2),
), ),
), ),
validator: (value) => value != null && value.isNotEmpty validator: (value) => value != null &&
value.isNotEmpty
? null ? null
: AppLocalizations.of(context).selectExpiryDate, : AppLocalizations.of(context).selectExpiryDate,
), ),
@@ -188,6 +196,20 @@ class _BlockCardScreen extends State<BlockCardScreen> {
), ),
), ),
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }
} }

View File

@@ -9,7 +9,9 @@ class CardDetailsScreen extends StatelessWidget {
appBar: AppBar( appBar: AppBar(
title: const Text("My Cards"), title: const Text("My Cards"),
), ),
body: Padding( body: Stack(
children: [
Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
child: ListView( child: ListView(
children: const [ children: const [
@@ -31,6 +33,20 @@ class CardDetailsScreen extends StatelessWidget {
], ],
), ),
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }
} }

View File

@@ -25,7 +25,9 @@ class _CardManagementScreen extends State<CardManagementScreen> {
), ),
centerTitle: false, centerTitle: false,
), ),
body: ListView( body: Stack(
children: [
ListView(
children: [ children: [
CardManagementTile( CardManagementTile(
icon: Symbols.add, icon: Symbols.add,
@@ -78,6 +80,20 @@ class _CardManagementScreen extends State<CardManagementScreen> {
const Divider(height: 1), const Divider(height: 1),
], ],
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }
} }

View File

@@ -51,7 +51,9 @@ class _CardPinChangeDetailsScreen extends State<CardPinChangeDetailsScreen> {
), ),
centerTitle: false, centerTitle: false,
), ),
body: Padding( body: Stack(
children: [
Padding(
padding: const EdgeInsets.all(10.0), padding: const EdgeInsets.all(10.0),
child: Form( child: Form(
key: _formKey, key: _formKey,
@@ -90,18 +92,21 @@ class _CardPinChangeDetailsScreen extends State<CardPinChangeDetailsScreen> {
border: const OutlineInputBorder(), border: const OutlineInputBorder(),
isDense: true, isDense: true,
filled: true, filled: true,
fillColor: Theme.of(context).scaffoldBackgroundColor, fillColor:
Theme.of(context).scaffoldBackgroundColor,
enabledBorder: const OutlineInputBorder( enabledBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black), borderSide: BorderSide(color: Colors.black),
), ),
focusedBorder: const OutlineInputBorder( focusedBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black, width: 2), borderSide:
BorderSide(color: Colors.black, width: 2),
), ),
), ),
keyboardType: TextInputType.number, keyboardType: TextInputType.number,
textInputAction: TextInputAction.next, textInputAction: TextInputAction.next,
obscureText: true, obscureText: true,
validator: (value) => value != null && value.length == 3 validator: (value) =>
value != null && value.length == 3
? null ? null
: AppLocalizations.of(context).cvv3Digits, : AppLocalizations.of(context).cvv3Digits,
), ),
@@ -118,15 +123,18 @@ class _CardPinChangeDetailsScreen extends State<CardPinChangeDetailsScreen> {
border: const OutlineInputBorder(), border: const OutlineInputBorder(),
isDense: true, isDense: true,
filled: true, filled: true,
fillColor: Theme.of(context).scaffoldBackgroundColor, fillColor:
Theme.of(context).scaffoldBackgroundColor,
enabledBorder: const OutlineInputBorder( enabledBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black), borderSide: BorderSide(color: Colors.black),
), ),
focusedBorder: const OutlineInputBorder( focusedBorder: const OutlineInputBorder(
borderSide: BorderSide(color: Colors.black, width: 2), borderSide:
BorderSide(color: Colors.black, width: 2),
), ),
), ),
validator: (value) => value != null && value.isNotEmpty validator: (value) => value != null &&
value.isNotEmpty
? null ? null
: AppLocalizations.of(context).selectExpiryDate, : AppLocalizations.of(context).selectExpiryDate,
), ),
@@ -178,6 +186,20 @@ class _CardPinChangeDetailsScreen extends State<CardPinChangeDetailsScreen> {
), ),
), ),
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }
} }

View File

@@ -51,7 +51,9 @@ class _CardPinSetScreen extends State<CardPinSetScreen> {
), ),
centerTitle: false, centerTitle: false,
), ),
body: Padding( body: Stack(
children: [
Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
child: Form( child: Form(
key: _formKey, key: _formKey,
@@ -133,6 +135,20 @@ class _CardPinSetScreen extends State<CardPinSetScreen> {
), ),
), ),
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }
} }

View File

@@ -22,7 +22,9 @@ class _ChequeManagementScreen extends State<ChequeManagementScreen> {
), ),
centerTitle: false, centerTitle: false,
), ),
body: ListView( body: Stack(
children: [
ListView(
children: [ children: [
const SizedBox(height: 15), const SizedBox(height: 15),
ChequeManagementTile( ChequeManagementTile(
@@ -37,7 +39,8 @@ class _ChequeManagementScreen extends State<ChequeManagementScreen> {
onTap: () { onTap: () {
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute(builder: (context) => const EnquiryScreen()), MaterialPageRoute(
builder: (context) => const EnquiryScreen()),
); );
}, },
), ),
@@ -68,6 +71,20 @@ class _ChequeManagementScreen extends State<ChequeManagementScreen> {
const Divider(height: 1), const Divider(height: 1),
], ],
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }
} }

View File

@@ -33,7 +33,9 @@ class _CustomerInfoScreenState extends State<CustomerInfoScreen> {
.replaceFirst(RegExp('\n'), ''), .replaceFirst(RegExp('\n'), ''),
), ),
), ),
body: SingleChildScrollView( body: Stack(
children: [
SingleChildScrollView(
physics: const AlwaysScrollableScrollPhysics(), physics: const AlwaysScrollableScrollPhysics(),
child: Padding( child: Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
@@ -102,6 +104,20 @@ class _CustomerInfoScreenState extends State<CustomerInfoScreen> {
), ),
), ),
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }
} }

View File

@@ -15,6 +15,7 @@ import 'package:kmobile/features/enquiry/screens/enquiry_screen.dart';
import 'package:kmobile/features/fund_transfer/screens/fund_transfer_screen.dart'; import 'package:kmobile/features/fund_transfer/screens/fund_transfer_screen.dart';
import 'package:kmobile/features/profile/profile_screen.dart'; import 'package:kmobile/features/profile/profile_screen.dart';
import 'package:kmobile/features/quick_pay/screens/quick_pay_screen.dart'; import 'package:kmobile/features/quick_pay/screens/quick_pay_screen.dart';
import 'package:kmobile/features/service/screens/branch_locator_screen.dart';
import 'package:kmobile/security/secure_storage.dart'; import 'package:kmobile/security/secure_storage.dart';
import 'package:local_auth/local_auth.dart'; import 'package:local_auth/local_auth.dart';
import 'package:material_symbols_icons/material_symbols_icons.dart'; import 'package:material_symbols_icons/material_symbols_icons.dart';
@@ -547,9 +548,14 @@ class _DashboardScreenState extends State<DashboardScreen>
.accountType!, .accountType!,
))); )));
}), }),
_buildQuickLink(Symbols.checkbook, _buildQuickLink(Icons.location_pin, "Branch Locator",
AppLocalizations.of(context).handleCheque, () {}, () {
disable: true), Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
const BranchLocatorScreen()));
}, disable: false),
_buildQuickLink(Icons.group, _buildQuickLink(Icons.group,
AppLocalizations.of(context).manageBeneficiary, AppLocalizations.of(context).manageBeneficiary,
() { () {

View File

@@ -70,7 +70,9 @@ class _EnquiryScreen extends State<EnquiryScreen> {
title: Text(AppLocalizations.of(context).enquiry), title: Text(AppLocalizations.of(context).enquiry),
centerTitle: false, centerTitle: false,
), ),
body: Padding( body: Stack(
children: [
Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@@ -84,7 +86,8 @@ class _EnquiryScreen extends State<EnquiryScreen> {
style: TextStyle( style: TextStyle(
fontSize: 17, fontSize: 17,
color: Theme.of(context).colorScheme.primary, color: Theme.of(context).colorScheme.primary,
decorationColor: Theme.of(context).colorScheme.primary, decorationColor:
Theme.of(context).colorScheme.primary,
), ),
), ),
const SizedBox(width: 4), const SizedBox(width: 4),
@@ -131,6 +134,20 @@ class _EnquiryScreen extends State<EnquiryScreen> {
], ],
), ),
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }
} }

View File

@@ -362,7 +362,9 @@ class _FundTransferAmountScreenState extends State<FundTransferAmountScreen> {
title: Text(loc.fundTransfer.replaceFirst(RegExp('\n'), '')), title: Text(loc.fundTransfer.replaceFirst(RegExp('\n'), '')),
), ),
body: SafeArea( body: SafeArea(
child: Padding( child: Stack(
children: [
Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
child: Form( child: Form(
key: _formKey, key: _formKey,
@@ -398,8 +400,8 @@ class _FundTransferAmountScreenState extends State<FundTransferAmountScreen> {
elevation: 0, elevation: 0,
margin: const EdgeInsets.symmetric(vertical: 8.0), margin: const EdgeInsets.symmetric(vertical: 8.0),
child: ListTile( child: ListTile(
leading: leading: getBankLogo(
getBankLogo(widget.creditBeneficiary.bankName, context), widget.creditBeneficiary.bankName, context),
title: Text(widget.creditBeneficiary.name), title: Text(widget.creditBeneficiary.name),
subtitle: Text(widget.creditBeneficiary.accountNo), subtitle: Text(widget.creditBeneficiary.accountNo),
), ),
@@ -431,7 +433,8 @@ class _FundTransferAmountScreenState extends State<FundTransferAmountScreen> {
}); });
}, },
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
selectedColor: Theme.of(context).colorScheme.onPrimary, selectedColor:
Theme.of(context).colorScheme.onPrimary,
fillColor: Theme.of(context).colorScheme.primary, fillColor: Theme.of(context).colorScheme.primary,
color: Theme.of(context).colorScheme.onSurface, color: Theme.of(context).colorScheme.onSurface,
borderColor: Colors.transparent, borderColor: Colors.transparent,
@@ -513,6 +516,20 @@ class _FundTransferAmountScreenState extends State<FundTransferAmountScreen> {
), ),
), ),
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
), ),
); );
} }

View File

@@ -160,7 +160,23 @@ class _FundTransferBeneficiaryScreenState
appBar: AppBar( appBar: AppBar(
title: Text(AppLocalizations.of(context).beneficiaries), title: Text(AppLocalizations.of(context).beneficiaries),
), ),
body: _isLoading ? _buildShimmerList() : _buildBeneficiaryList(), body: Stack(
children: [
_isLoading ? _buildShimmerList() : _buildBeneficiaryList(),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }
} }

View File

@@ -32,7 +32,9 @@ class FundTransferScreen extends StatelessWidget {
// Wrap with BlocBuilder to check the authentication state // Wrap with BlocBuilder to check the authentication state
body: BlocBuilder<AuthCubit, AuthState>( body: BlocBuilder<AuthCubit, AuthState>(
builder: (context, state) { builder: (context, state) {
return ListView( return Stack(
children: [
ListView(
children: [ children: [
FundTransferManagementTile( FundTransferManagementTile(
icon: Symbols.person, icon: Symbols.person,
@@ -92,6 +94,20 @@ class FundTransferScreen extends StatelessWidget {
), ),
const Divider(height: 1), const Divider(height: 1),
], ],
),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
); );
}, },
), ),

View File

@@ -45,7 +45,9 @@ class FundTransferSelfAccountsScreen extends StatelessWidget {
appBar: AppBar( appBar: AppBar(
title: const Text("Select Account"), title: const Text("Select Account"),
), ),
body: filteredAccounts.isEmpty body: Stack(
children: [
filteredAccounts.isEmpty
? const Center( ? const Center(
child: Text("No other accounts found"), child: Text("No other accounts found"),
) )
@@ -67,7 +69,8 @@ class FundTransferSelfAccountsScreen extends StatelessWidget {
Text(account.accountNo ?? 'N/A'), Text(account.accountNo ?? 'N/A'),
Text( Text(
_getFullAccountType(account.accountType), _getFullAccountType(account.accountType),
style: TextStyle(fontSize: 12, color: Colors.grey[600]), style: TextStyle(
fontSize: 12, color: Colors.grey[600]),
), ),
], ],
), ),
@@ -88,6 +91,20 @@ class FundTransferSelfAccountsScreen extends StatelessWidget {
); );
}, },
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }
} }

View File

@@ -137,7 +137,9 @@ class _FundTransferSelfAmountScreenState
title: const Text("Fund Transfer"), title: const Text("Fund Transfer"),
), ),
body: SafeArea( body: SafeArea(
child: Padding( child: Stack(
children: [
Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
child: Form( child: Form(
key: _formKey, key: _formKey,
@@ -238,6 +240,20 @@ class _FundTransferSelfAmountScreenState
), ),
), ),
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
), ),
); );
} }

View File

@@ -136,7 +136,8 @@ class _TpinOtpScreenState extends State<TpinOtpScreen> {
counterText: '', counterText: '',
filled: true, filled: true,
fillColor: Colors.grey[200], fillColor: Colors.grey[200],
contentPadding: const EdgeInsets.symmetric(vertical: 16), contentPadding:
const EdgeInsets.symmetric(vertical: 16),
border: OutlineInputBorder( border: OutlineInputBorder(
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(12),
borderSide: BorderSide( borderSide: BorderSide(

View File

@@ -143,6 +143,18 @@ class _TransactionSuccessScreen extends State<TransactionSuccessScreen> {
), ),
), ),
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
], ],
), ),
), ),

View File

@@ -70,7 +70,9 @@ class _ChangePasswordOTPScreenState extends State<ChangePasswordOTPScreen> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: AppBar(title: Text(AppLocalizations.of(context).otpVerification)), appBar: AppBar(title: Text(AppLocalizations.of(context).otpVerification)),
body: Padding( body: Stack(
children: [
Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
child: _isLoading child: _isLoading
? const Center(child: CircularProgressIndicator()) ? const Center(child: CircularProgressIndicator())
@@ -105,6 +107,20 @@ class _ChangePasswordOTPScreenState extends State<ChangePasswordOTPScreen> {
], ],
), ),
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }
} }

View File

@@ -90,7 +90,9 @@ class _ChangePasswordScreenState extends State<ChangePasswordScreen> {
return Scaffold( return Scaffold(
appBar: appBar:
AppBar(title: Text(AppLocalizations.of(context).changeLoginPassword)), AppBar(title: Text(AppLocalizations.of(context).changeLoginPassword)),
body: Padding( body: Stack(
children: [
Padding(
padding: const EdgeInsets.all(16), padding: const EdgeInsets.all(16),
child: Form( child: Form(
key: _formKey, key: _formKey,
@@ -121,8 +123,8 @@ class _ChangePasswordScreenState extends State<ChangePasswordScreen> {
icon: Icon(_showNewPassword icon: Icon(_showNewPassword
? Icons.visibility ? Icons.visibility
: Icons.visibility_off), : Icons.visibility_off),
onPressed: () => onPressed: () => setState(
setState(() => _showNewPassword = !_showNewPassword), () => _showNewPassword = !_showNewPassword),
), ),
), ),
validator: validateNewPassword, validator: validateNewPassword,
@@ -152,6 +154,20 @@ class _ChangePasswordScreenState extends State<ChangePasswordScreen> {
), ),
), ),
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }
} }

View File

@@ -20,7 +20,9 @@ class PreferenceScreen extends StatelessWidget {
), ),
body: BlocBuilder<ThemeCubit, ThemeState>( body: BlocBuilder<ThemeCubit, ThemeState>(
builder: (context, state) { builder: (context, state) {
return ListView( return Stack(
children: [
ListView(
children: [ children: [
//Set Prefered Username //Set Prefered Username
// ListTile( // ListTile(
@@ -58,6 +60,20 @@ class PreferenceScreen extends StatelessWidget {
); );
}), }),
], ],
),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
); );
}, },
), ),

View File

@@ -60,7 +60,8 @@ class _ProfileScreenState extends State<ProfileScreen> {
if (mounted) { if (mounted) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar( SnackBar(
content: Text(AppLocalizations.of(context).biometricsNotAvailable)), content:
Text(AppLocalizations.of(context).biometricsNotAvailable)),
); );
} }
return; return;
@@ -164,11 +165,14 @@ class _ProfileScreenState extends State<ProfileScreen> {
appBar: AppBar( appBar: AppBar(
title: Text(loc.profile), // Localized "Profile" title: Text(loc.profile), // Localized "Profile"
), ),
body: ListView( body: Stack(
children: [
ListView(
children: [ children: [
ListTile( ListTile(
leading: const Icon(Icons.settings), leading: const Icon(Icons.settings),
title: Text(loc.preferences), title: Text(loc.preferences),
trailing: const Icon(Icons.chevron_right),
onTap: () { onTap: () {
Navigator.push( Navigator.push(
context, context,
@@ -177,26 +181,6 @@ class _ProfileScreenState extends State<ProfileScreen> {
); );
}, },
), ),
ListTile(
leading: const Icon(Icons.currency_rupee),
title: Text(AppLocalizations.of(context).dailylimit),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const DailyLimitScreen()),
);
},
),
SwitchListTile(
title: Text(AppLocalizations.of(context).enableFingerprintLogin),
value: _isBiometricEnabled,
onChanged: (bool value) {
// The state is now managed within _handleBiometricToggle
_handleBiometricToggle(value);
},
secondary: const Icon(Icons.fingerprint),
),
ListTile( ListTile(
leading: const Icon(Icons.security), leading: const Icon(Icons.security),
title: Text(loc.securitySettings), title: Text(loc.securitySettings),
@@ -212,12 +196,34 @@ class _ProfileScreenState extends State<ProfileScreen> {
); );
}, },
), ),
ListTile(
leading: const Icon(Icons.currency_rupee),
title: Text(AppLocalizations.of(context).dailylimit),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const DailyLimitScreen()),
);
},
),
SwitchListTile(
title:
Text(AppLocalizations.of(context).enableFingerprintLogin),
value: _isBiometricEnabled,
onChanged: (bool value) {
// The state is now managed within _handleBiometricToggle
_handleBiometricToggle(value);
},
secondary: const Icon(Icons.fingerprint),
),
ListTile( ListTile(
leading: const Icon(Icons.smartphone), leading: const Icon(Icons.smartphone),
title: const Text("App Version"), title: const Text("App Version"),
trailing: FutureBuilder<String>( trailing: FutureBuilder<String>(
future: _getAppVersion(), future: _getAppVersion(),
builder: (BuildContext context, AsyncSnapshot<String> snapshot) { builder:
(BuildContext context, AsyncSnapshot<String> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) { if (snapshot.connectionState == ConnectionState.waiting) {
// Show a loading indicator while waiting for the future to complete // Show a loading indicator while waiting for the future to complete
return const CircularProgressIndicator(); return const CircularProgressIndicator();
@@ -279,6 +285,20 @@ class _ProfileScreenState extends State<ProfileScreen> {
), ),
], ],
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }
} }

View File

@@ -21,7 +21,9 @@ class SecuritySettingsScreen extends StatelessWidget {
title: Text(loc.securitySettings), title: Text(loc.securitySettings),
centerTitle: true, centerTitle: true,
), ),
body: ListView( body: Stack(
children: [
ListView(
children: [ children: [
ListTile( ListTile(
leading: const Icon(Icons.lock_outline), leading: const Icon(Icons.lock_outline),
@@ -92,7 +94,8 @@ class SecuritySettingsScreen extends StatelessWidget {
Navigator.of(context).pop(); Navigator.of(context).pop();
Navigator.of(context).push( Navigator.of(context).push(
MaterialPageRoute( MaterialPageRoute(
builder: (context) => const TpinSetScreen(), builder: (context) =>
const TpinSetScreen(),
), ),
); );
}, },
@@ -116,6 +119,20 @@ class SecuritySettingsScreen extends StatelessWidget {
), ),
], ],
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }
} }

View File

@@ -458,7 +458,9 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
), ),
centerTitle: false, centerTitle: false,
), ),
body: Padding( body: Stack(
children: [
Padding(
padding: const EdgeInsets.all(12), padding: const EdgeInsets.all(12),
child: Form( child: Form(
key: _formKey, key: _formKey,
@@ -496,7 +498,8 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
), ),
focusedBorder: OutlineInputBorder( focusedBorder: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: Theme.of(context).colorScheme.primary, width: 2), color: Theme.of(context).colorScheme.primary,
width: 2),
), ),
), ),
controller: accountNumberController, controller: accountNumberController,
@@ -511,7 +514,8 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
}, },
validator: (value) { validator: (value) {
if (value == null || value.isEmpty) { if (value == null || value.isEmpty) {
return AppLocalizations.of(context).accountNumberRequired; return AppLocalizations.of(context)
.accountNumberRequired;
} else if (value.length < 7 || value.length > 20) { } else if (value.length < 7 || value.length > 20) {
return AppLocalizations.of(context).accno7to20; return AppLocalizations.of(context).accno7to20;
} }
@@ -522,7 +526,8 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
TextFormField( TextFormField(
controller: confirmAccountNumberController, controller: confirmAccountNumberController,
decoration: InputDecoration( decoration: InputDecoration(
labelText: AppLocalizations.of(context).confirmAccountNumber, labelText:
AppLocalizations.of(context).confirmAccountNumber,
// prefixIcon: Icon(Icons.person), // prefixIcon: Icon(Icons.person),
border: const OutlineInputBorder(), border: const OutlineInputBorder(),
isDense: true, isDense: true,
@@ -534,14 +539,16 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
), ),
focusedBorder: OutlineInputBorder( focusedBorder: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: Theme.of(context).colorScheme.primary, width: 2), color: Theme.of(context).colorScheme.primary,
width: 2),
), ),
), ),
keyboardType: TextInputType.number, keyboardType: TextInputType.number,
textInputAction: TextInputAction.next, textInputAction: TextInputAction.next,
validator: (value) { validator: (value) {
if (value == null || value.isEmpty) { if (value == null || value.isEmpty) {
return AppLocalizations.of(context).reenterAccountNumber; return AppLocalizations.of(context)
.reenterAccountNumber;
} }
if (value != accountNumberController.text) { if (value != accountNumberController.text) {
return AppLocalizations.of(context).accountMismatch; return AppLocalizations.of(context).accountMismatch;
@@ -565,7 +572,8 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
border: const OutlineInputBorder(), border: const OutlineInputBorder(),
isDense: true, isDense: true,
filled: true, filled: true,
fillColor: Theme.of(context).scaffoldBackgroundColor, fillColor:
Theme.of(context).scaffoldBackgroundColor,
enabledBorder: OutlineInputBorder( enabledBorder: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: Theme.of(context).colorScheme.outline), color: Theme.of(context).colorScheme.outline),
@@ -614,7 +622,8 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
border: const OutlineInputBorder(), border: const OutlineInputBorder(),
isDense: true, isDense: true,
filled: true, filled: true,
fillColor: Theme.of(context).scaffoldBackgroundColor, fillColor:
Theme.of(context).scaffoldBackgroundColor,
enabledBorder: OutlineInputBorder( enabledBorder: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: Theme.of(context).colorScheme.outline), color: Theme.of(context).colorScheme.outline),
@@ -630,7 +639,8 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
'Current', 'Current',
] ]
.map( .map(
(e) => DropdownMenuItem(value: e, child: Text(e)), (e) =>
DropdownMenuItem(value: e, child: Text(e)),
) )
.toList(), .toList(),
onChanged: (value) => setState(() { onChanged: (value) => setState(() {
@@ -656,7 +666,8 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
), ),
focusedBorder: OutlineInputBorder( focusedBorder: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: Theme.of(context).colorScheme.primary, width: 2), color: Theme.of(context).colorScheme.primary,
width: 2),
), ),
), ),
), ),
@@ -708,10 +719,11 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
? const SizedBox( ? const SizedBox(
width: 20, width: 20,
height: 20, height: 20,
child: CircularProgressIndicator(strokeWidth: 2), child:
CircularProgressIndicator(strokeWidth: 2),
) )
: Text( : Text(AppLocalizations.of(context)
AppLocalizations.of(context).validateBeneficiary), .validateBeneficiary),
), ),
), ),
), ),
@@ -720,8 +732,8 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
padding: const EdgeInsets.only(bottom: 24.0), padding: const EdgeInsets.only(bottom: 24.0),
child: Text( child: Text(
_validationError!, _validationError!,
style: style: TextStyle(
TextStyle(color: Theme.of(context).colorScheme.error), color: Theme.of(context).colorScheme.error),
), ),
), ),
TextFormField( TextFormField(
@@ -739,7 +751,8 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
), ),
focusedBorder: OutlineInputBorder( focusedBorder: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: Theme.of(context).colorScheme.primary, width: 2), color: Theme.of(context).colorScheme.primary,
width: 2),
), ),
), ),
validator: (value) { validator: (value) {
@@ -764,7 +777,8 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
), ),
focusedBorder: OutlineInputBorder( focusedBorder: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: Theme.of(context).colorScheme.primary, width: 2), color: Theme.of(context).colorScheme.primary,
width: 2),
), ),
), ),
), ),
@@ -788,16 +802,20 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
Theme.of(context).scaffoldBackgroundColor, Theme.of(context).scaffoldBackgroundColor,
enabledBorder: OutlineInputBorder( enabledBorder: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: Theme.of(context).colorScheme.outline), color: Theme.of(context)
.colorScheme
.outline),
), ),
focusedBorder: OutlineInputBorder( focusedBorder: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: Theme.of(context).colorScheme.primary, color:
Theme.of(context).colorScheme.primary,
width: 2), width: 2),
), ),
), ),
textInputAction: TextInputAction.next, textInputAction: TextInputAction.next,
validator: (value) => value == null || value.isEmpty validator: (value) => value == null ||
value.isEmpty
? AppLocalizations.of(context).phoneRequired ? AppLocalizations.of(context).phoneRequired
: null, : null,
), ),
@@ -814,11 +832,14 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
Theme.of(context).scaffoldBackgroundColor, Theme.of(context).scaffoldBackgroundColor,
enabledBorder: OutlineInputBorder( enabledBorder: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: Theme.of(context).colorScheme.outline), color: Theme.of(context)
.colorScheme
.outline),
), ),
focusedBorder: OutlineInputBorder( focusedBorder: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: Theme.of(context).colorScheme.primary, color:
Theme.of(context).colorScheme.primary,
width: 2), width: 2),
), ),
), ),
@@ -832,7 +853,8 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
} }
final amount = double.tryParse(value); final amount = double.tryParse(value);
if (amount == null || amount <= 0) { if (amount == null || amount <= 0) {
return AppLocalizations.of(context).validAmount; return AppLocalizations.of(context)
.validAmount;
} }
return null; return null;
}, },
@@ -880,7 +902,10 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
: Theme.of(context).colorScheme.primary, : Theme.of(context).colorScheme.primary,
activeTrackColor: _isAmountOverLimit activeTrackColor: _isAmountOverLimit
? Colors.grey.shade300 ? Colors.grey.shade300
: Theme.of(context).colorScheme.secondary.withAlpha(100), : Theme.of(context)
.colorScheme
.secondary
.withAlpha(100),
borderRadius: BorderRadius.circular(30), borderRadius: BorderRadius.circular(30),
height: 56, height: 56,
onSwipe: () { onSwipe: () {
@@ -900,6 +925,20 @@ class _QuickPayOutsideBankScreen extends State<QuickPayOutsideBankScreen> {
), ),
), ),
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }

View File

@@ -21,7 +21,9 @@ class _QuickPayScreen extends State<QuickPayScreen> {
AppLocalizations.of(context).quickPay.replaceAll('\n', ''), AppLocalizations.of(context).quickPay.replaceAll('\n', ''),
), ),
), ),
body: ListView( body: Stack(
children: [
ListView(
children: [ children: [
QuickPayManagementTile( QuickPayManagementTile(
icon: Symbols.input_circle, icon: Symbols.input_circle,
@@ -55,6 +57,20 @@ class _QuickPayScreen extends State<QuickPayScreen> {
const Divider(height: 1), const Divider(height: 1),
], ],
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }
} }

View File

@@ -149,7 +149,9 @@ class _QuickPayWithinBankScreen extends State<QuickPayWithinBankScreen> {
), ),
centerTitle: false, centerTitle: false,
), ),
body: Padding( body: Stack(
children: [
Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
child: Form( child: Form(
key: _formKey, key: _formKey,
@@ -159,14 +161,16 @@ class _QuickPayWithinBankScreen extends State<QuickPayWithinBankScreen> {
const SizedBox(height: 10), const SizedBox(height: 10),
TextFormField( TextFormField(
decoration: InputDecoration( decoration: InputDecoration(
labelText: AppLocalizations.of(context).debitAccountNumber, labelText:
AppLocalizations.of(context).debitAccountNumber,
border: const OutlineInputBorder(), border: const OutlineInputBorder(),
isDense: true, isDense: true,
filled: true, filled: true,
fillColor: Theme.of(context).scaffoldBackgroundColor, fillColor: Theme.of(context).scaffoldBackgroundColor,
), ),
readOnly: true, readOnly: true,
controller: TextEditingController(text: widget.debitAccount), controller:
TextEditingController(text: widget.debitAccount),
keyboardType: TextInputType.number, keyboardType: TextInputType.number,
textInputAction: TextInputAction.next, textInputAction: TextInputAction.next,
enabled: false, enabled: false,
@@ -195,9 +199,11 @@ class _QuickPayWithinBankScreen extends State<QuickPayWithinBankScreen> {
textInputAction: TextInputAction.next, textInputAction: TextInputAction.next,
validator: (value) { validator: (value) {
if (value == null || value.isEmpty) { if (value == null || value.isEmpty) {
return AppLocalizations.of(context).accountNumberRequired; return AppLocalizations.of(context)
.accountNumberRequired;
} else if (value.length != 11) { } else if (value.length != 11) {
return AppLocalizations.of(context).validAccountNumber; return AppLocalizations.of(context)
.validAccountNumber;
} }
return null; return null;
}, },
@@ -227,7 +233,8 @@ class _QuickPayWithinBankScreen extends State<QuickPayWithinBankScreen> {
textInputAction: TextInputAction.next, textInputAction: TextInputAction.next,
validator: (value) { validator: (value) {
if (value == null || value.isEmpty) { if (value == null || value.isEmpty) {
return AppLocalizations.of(context).reenterAccountNumber; return AppLocalizations.of(context)
.reenterAccountNumber;
} }
if (value != accountNumberController.text) { if (value != accountNumberController.text) {
return AppLocalizations.of(context).accountMismatch; return AppLocalizations.of(context).accountMismatch;
@@ -244,7 +251,8 @@ class _QuickPayWithinBankScreen extends State<QuickPayWithinBankScreen> {
onPressed: _isValidating onPressed: _isValidating
? null ? null
: () { : () {
if (accountNumberController.text.length == 11 && if (accountNumberController.text.length ==
11 &&
confirmAccountNumberController.text == confirmAccountNumberController.text ==
accountNumberController.text) { accountNumberController.text) {
_validateBeneficiary(); _validateBeneficiary();
@@ -260,8 +268,8 @@ class _QuickPayWithinBankScreen extends State<QuickPayWithinBankScreen> {
? const SizedBox( ? const SizedBox(
width: 20, width: 20,
height: 20, height: 20,
child: child: CircularProgressIndicator(
CircularProgressIndicator(strokeWidth: 2), strokeWidth: 2),
) )
: Text(AppLocalizations.of(context) : Text(AppLocalizations.of(context)
.validateBeneficiary), .validateBeneficiary),
@@ -278,7 +286,8 @@ class _QuickPayWithinBankScreen extends State<QuickPayWithinBankScreen> {
Text( Text(
'${AppLocalizations.of(context).beneficiaryName}: $_beneficiaryName', '${AppLocalizations.of(context).beneficiaryName}: $_beneficiaryName',
style: const TextStyle( style: const TextStyle(
color: Colors.green, fontWeight: FontWeight.bold), color: Colors.green,
fontWeight: FontWeight.bold),
), ),
], ],
), ),
@@ -432,7 +441,8 @@ class _QuickPayWithinBankScreen extends State<QuickPayWithinBankScreen> {
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: (context) => TransactionPinScreen( builder: (context) => TransactionPinScreen(
onPinCompleted: (pinScreenContext, tpin) async { onPinCompleted:
(pinScreenContext, tpin) async {
final transfer = Transfer( final transfer = Transfer(
fromAccount: widget.debitAccount, fromAccount: widget.debitAccount,
toAccount: accountNumberController.text, toAccount: accountNumberController.text,
@@ -442,14 +452,17 @@ class _QuickPayWithinBankScreen extends State<QuickPayWithinBankScreen> {
remarks: remarksController.text, remarks: remarksController.text,
); );
final paymentService = getIt<PaymentService>(); final paymentService =
getIt<PaymentService>();
final paymentResponseFuture = paymentService final paymentResponseFuture = paymentService
.processQuickPayWithinBank(transfer); .processQuickPayWithinBank(transfer);
Navigator.of(pinScreenContext).pushReplacement( Navigator.of(pinScreenContext)
.pushReplacement(
MaterialPageRoute( MaterialPageRoute(
builder: (_) => PaymentAnimationScreen( builder: (_) => PaymentAnimationScreen(
paymentResponse: paymentResponseFuture), paymentResponse:
paymentResponseFuture),
), ),
); );
}, },
@@ -465,6 +478,20 @@ class _QuickPayWithinBankScreen extends State<QuickPayWithinBankScreen> {
), ),
), ),
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }

View File

@@ -11,7 +11,9 @@ class SecurityErrorScreen extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
body: Padding( body: Stack(
children: [
Padding(
padding: const EdgeInsets.all(20.0), padding: const EdgeInsets.all(20.0),
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
@@ -21,17 +23,32 @@ class SecurityErrorScreen extends StatelessWidget {
Text( Text(
message, message,
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: const TextStyle(fontSize: 18, fontWeight: FontWeight.w600), style: const TextStyle(
fontSize: 18, fontWeight: FontWeight.w600),
), ),
const SizedBox(height: 40), const SizedBox(height: 40),
ElevatedButton( ElevatedButton(
onPressed: () => onPressed: () => SystemChannels.platform
SystemChannels.platform.invokeMethod('SystemNavigator.pop'), .invokeMethod('SystemNavigator.pop'),
child: const Text('Okay'), child: const Text('Okay'),
), ),
], ],
), ),
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }
} }

View File

@@ -0,0 +1,175 @@
// ignore_for_file: unused_element
import 'package:flutter/material.dart';
import '../../../l10n/app_localizations.dart';
// Enum to define the type of location
class Location {
final String name;
final String address;
Location({
required this.name,
required this.address,
});
}
class ATMLocatorScreen extends StatefulWidget {
const ATMLocatorScreen({super.key});
@override
State<ATMLocatorScreen> createState() => _ATMLocatorScreenState();
}
class _ATMLocatorScreenState extends State<ATMLocatorScreen> {
final TextEditingController _searchController = TextEditingController();
final List<Location> _allLocations = [
Location(
name: "Dharamsala ATM",
address: "Near Main Square, Dharamsala",
),
Location(
name: "Kangra ATM",
address: "Opposite Bus Stand, Kangra",
),
];
List<Location> _filteredLocations = [];
bool _isLoading = false;
@override
void initState() {
super.initState();
// _fetchAndSetLocations();
_filteredLocations = _allLocations;
}
// Example of a future API fetching function
/*
Future<void> _fetchAndSetLocations() async {
setState(() {
_isLoading = true;
});
try {
// final locations = await yourApiService.getLocations();
// setState(() {
// _allLocations = locations;
// _filteredLocations = locations;
// });
} catch (e) {
// Handle error
} finally {
setState(() {
_isLoading = false;
});
}
}
*/
void _filterLocations(String query) {
setState(() {
if (query.isEmpty) {
_filteredLocations = _allLocations;
} else {
_filteredLocations = _allLocations.where((location) {
final lowerQuery = query.toLowerCase();
return location.name.toLowerCase().contains(lowerQuery) ||
location.address.toLowerCase().contains(lowerQuery);
}).toList();
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("ATM Locator"),
),
body: Stack(
children: [
Column(
children: [
Padding(
padding: const EdgeInsets.all(12.0),
child: TextField(
controller: _searchController,
onChanged: _filterLocations,
decoration: InputDecoration(
hintText: "Name/Address",
prefixIcon: const Icon(Icons.search),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
),
),
),
),
// Content area
Expanded(
child: _isLoading
? const Center(child: CircularProgressIndicator())
: _filteredLocations.isEmpty
? const Center(
child: Text("No matching locations found"))
: ListView.builder(
itemCount: _filteredLocations.length,
itemBuilder: (context, index) {
final location = _filteredLocations[index];
return _buildLocationItem(location);
},
),
),
],
),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
);
}
Widget _buildHeader(String title) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
child: Text(
title,
style: Theme.of(context).textTheme.titleLarge?.copyWith(
fontWeight: FontWeight.bold,
color: Theme.of(context).colorScheme.primary,
),
),
);
}
// Helper widget to build a single location item
Widget _buildLocationItem(Location location) {
return Card(
margin: const EdgeInsets.symmetric(horizontal: 12, vertical: 6),
child: ListTile(
leading: const Icon(Icons.currency_rupee),
title: Text(location.name,
style: const TextStyle(fontWeight: FontWeight.bold)),
subtitle: Text(
"Address: ${location.address}",
),
onTap: () {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text("Selected ${location.name}")),
);
},
),
);
}
}

View File

@@ -3,22 +3,17 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../../../l10n/app_localizations.dart'; import '../../../l10n/app_localizations.dart';
// Enum to define the type of location
enum LocationType { branch, atm }
class Location { class Location {
final String name; final String name;
final String? code; // Nullable for ATMs final String? code; // Nullable for ATMs
final String? ifsc; // Nullable for ATMs final String? ifsc; // Nullable for ATMs
final String address; final String address;
final LocationType type;
Location({ Location({
required this.name, required this.name,
this.code, this.code,
this.ifsc, this.ifsc,
required this.address, required this.address,
required this.type,
}); });
} }
@@ -38,24 +33,12 @@ class _BranchLocatorScreenState extends State<BranchLocatorScreen> {
code: "002", code: "002",
ifsc: "KACE0000002", ifsc: "KACE0000002",
address: "Civil Lines Dharmashala, Kangra, HP - 176215", address: "Civil Lines Dharmashala, Kangra, HP - 176215",
type: LocationType.branch,
), ),
Location( Location(
name: "Kangra", name: "Kangra",
code: "033", code: "033",
ifsc: "KACE0000033", ifsc: "KACE0000033",
address: "Rajput Bhawankangrapo, Kangra, HP ", address: "Rajput Bhawankangrapo, Kangra, HP ",
type: LocationType.branch,
),
Location(
name: "Dharamsala ATM",
address: "Near Main Square, Dharamsala",
type: LocationType.atm,
),
Location(
name: "Kangra ATM",
address: "Opposite Bus Stand, Kangra",
type: LocationType.atm,
), ),
]; ];
@@ -112,7 +95,9 @@ Future<void> _fetchAndSetLocations() async {
appBar: AppBar( appBar: AppBar(
title: Text(AppLocalizations.of(context).branchLocator), title: Text(AppLocalizations.of(context).branchLocator),
), ),
body: Column( body: Stack(
children: [
Column(
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.all(12.0), padding: const EdgeInsets.all(12.0),
@@ -134,7 +119,8 @@ Future<void> _fetchAndSetLocations() async {
child: _isLoading child: _isLoading
? const Center(child: CircularProgressIndicator()) ? const Center(child: CircularProgressIndicator())
: _filteredLocations.isEmpty : _filteredLocations.isEmpty
? const Center(child: Text("No matching locations found")) ? const Center(
child: Text("No matching locations found"))
: ListView.builder( : ListView.builder(
itemCount: _filteredLocations.length, itemCount: _filteredLocations.length,
itemBuilder: (context, index) { itemBuilder: (context, index) {
@@ -145,6 +131,20 @@ Future<void> _fetchAndSetLocations() async {
), ),
], ],
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }
@@ -163,20 +163,16 @@ Future<void> _fetchAndSetLocations() async {
// Helper widget to build a single location item // Helper widget to build a single location item
Widget _buildLocationItem(Location location) { Widget _buildLocationItem(Location location) {
final isBranch = location.type == LocationType.branch;
return Card( return Card(
margin: const EdgeInsets.symmetric(horizontal: 12, vertical: 6), margin: const EdgeInsets.symmetric(horizontal: 12, vertical: 6),
child: ListTile( child: ListTile(
leading: CircleAvatar( leading: const CircleAvatar(
child: Icon(isBranch ? Icons.location_city : Icons.currency_rupee), child: Icon(Icons.location_city),
), ),
title: Text(location.name, title: Text(location.name,
style: const TextStyle(fontWeight: FontWeight.bold)), style: const TextStyle(fontWeight: FontWeight.bold)),
subtitle: Text( subtitle: Text(
isBranch "Code: ${location.code} | IFSC: ${location.ifsc}\nAddress: ${location.address}"),
? "Code: ${location.code} | IFSC: ${location.ifsc}\nAddress: ${location.address}"
: "Address: ${location.address}",
),
onTap: () { onTap: () {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text("Selected ${location.name}")), SnackBar(content: Text("Selected ${location.name}")),

View File

@@ -42,6 +42,22 @@ class _FaqsScreenState extends State<FaqsScreen> {
], ],
), ),
), ),
body: Stack(
children: [
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }
} }

View File

@@ -29,6 +29,22 @@ class _QuickLinksScreenState extends State<QuickLinksScreen> {
appBar: AppBar( appBar: AppBar(
title: Text(AppLocalizations.of(context).quickLinks), title: Text(AppLocalizations.of(context).quickLinks),
), ),
body: Stack(
children: [
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }
} }

View File

@@ -1,3 +1,4 @@
import 'package:kmobile/features/service/screens/atm_locator_screen.dart';
import 'package:kmobile/features/service/screens/branch_locator_screen.dart'; import 'package:kmobile/features/service/screens/branch_locator_screen.dart';
import '../../../l10n/app_localizations.dart'; import '../../../l10n/app_localizations.dart';
@@ -24,22 +25,24 @@ class _ServiceScreen extends State<ServiceScreen> {
), ),
centerTitle: false, centerTitle: false,
), ),
body: ListView( body: Stack(
children: [ children: [
ServiceManagementTile( ListView(
icon: Symbols.add, children: [
label: AppLocalizations.of(context).accountOpeningDeposit, // ServiceManagementTile(
onTap: () {}, // icon: Symbols.add,
disabled: true, // label: AppLocalizations.of(context).accountOpeningDeposit,
), // onTap: () {},
const Divider(height: 1), // disabled: true,
ServiceManagementTile( // ),
icon: Symbols.add, // const Divider(height: 1),
label: AppLocalizations.of(context).accountOpeningLoan, // ServiceManagementTile(
onTap: () {}, // icon: Symbols.add,
disabled: true, // label: AppLocalizations.of(context).accountOpeningLoan,
), // onTap: () {},
const Divider(height: 1), // disabled: true,
// ),
// const Divider(height: 1),
ServiceManagementTile( ServiceManagementTile(
icon: Symbols.captive_portal, icon: Symbols.captive_portal,
label: AppLocalizations.of(context).quickLinks, label: AppLocalizations.of(context).quickLinks,
@@ -49,7 +52,7 @@ class _ServiceScreen extends State<ServiceScreen> {
builder: (context) => const QuickLinksScreen()), builder: (context) => const QuickLinksScreen()),
); );
}, },
disabled: true, disabled: false,
), ),
const Divider(height: 1), const Divider(height: 1),
ServiceManagementTile( ServiceManagementTile(
@@ -60,23 +63,37 @@ class _ServiceScreen extends State<ServiceScreen> {
MaterialPageRoute(builder: (context) => const FaqsScreen()), MaterialPageRoute(builder: (context) => const FaqsScreen()),
); );
}, },
disabled: true, disabled: false,
), ),
const Divider(height: 1), const Divider(height: 1),
ServiceManagementTile( ServiceManagementTile(
icon: Symbols.location_pin, icon: Symbols.location_pin,
label: AppLocalizations.of(context).branchLocator, label: "ATM Locator",
onTap: () { onTap: () {
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: (context) => const BranchLocatorScreen())); builder: (context) => const ATMLocatorScreen()));
}, },
disabled: true, disabled: false,
), ),
const Divider(height: 1), const Divider(height: 1),
], ],
), ),
IgnorePointer(
child: Center(
child: Opacity(
opacity: 0.1, // Low opacity
child: Image.asset(
'assets/images/logo.png',
width: 200, // Adjust size as needed
height: 200, // Adjust size as needed
),
),
),
),
],
),
); );
} }
} }

View File

@@ -15,13 +15,13 @@ void main() async {
]); ]);
// Check for device compromise // Check for device compromise
final compromisedMessage = await SecurityService.deviceCompromisedMessage; // final compromisedMessage = await SecurityService.deviceCompromisedMessage;
if (compromisedMessage != null) { // if (compromisedMessage != null) {
runApp(MaterialApp( // runApp(MaterialApp(
home: SecurityErrorScreen(message: compromisedMessage), // home: SecurityErrorScreen(message: compromisedMessage),
)); // ));
return; // return;
} // }
await setupDependencies(); await setupDependencies();
runApp(const KMobile()); runApp(const KMobile());
} }