Language Change

This commit is contained in:
Nilanjan Chakrabarti
2025-07-09 16:52:24 +05:30
parent 5e72baf1d3
commit 9b439338a9
12 changed files with 312 additions and 65 deletions

View File

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:kmobile/data/models/user.dart'; import 'package:kmobile/data/models/user.dart';
import 'package:material_symbols_icons/material_symbols_icons.dart'; import 'package:material_symbols_icons/material_symbols_icons.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
class AccountInfoScreen extends StatefulWidget { class AccountInfoScreen extends StatefulWidget {
final User user; final User user;
@@ -24,8 +25,8 @@ class _AccountInfoScreen extends State<AccountInfoScreen> {
Navigator.pop(context); Navigator.pop(context);
}, },
), ),
title: const Text( title: Text(
'Account Info', AppLocalizations.of(context).accountInfo,
style: TextStyle(color: Colors.black, fontWeight: FontWeight.w500), style: TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
), ),
centerTitle: false, centerTitle: false,
@@ -48,23 +49,32 @@ class _AccountInfoScreen extends State<AccountInfoScreen> {
body: ListView( body: ListView(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
children: [ children: [
InfoRow(title: 'Account Number', value: user.accountNo ?? 'N/A'), InfoRow(
title: AppLocalizations.of(context).accountNumber,
value: user.accountNo ?? 'N/A'),
// InfoRow(title: 'Nominee Customer No', value: user.nomineeCustomerNo), // InfoRow(title: 'Nominee Customer No', value: user.nomineeCustomerNo),
// InfoRow(title: 'SMS Service', value: user.smsService), // InfoRow(title: 'SMS Service', value: user.smsService),
// InfoRow(title: 'Missed Call Service', value: user.missedCallService), // InfoRow(title: 'Missed Call Service', value: user.missedCallService),
InfoRow(title: 'Customer Number', value: user.cifNumber ?? 'N/A'),
InfoRow(title: 'Product Name', value: user.productType ?? 'N/A'),
// InfoRow(title: 'Account Opening Date', value: user.accountOpeningDate ?? 'N/A'),
const InfoRow(title: 'Account Status', value: 'OPEN'),
InfoRow( InfoRow(
title: 'Available Balance', title: AppLocalizations.of(context).customerNumber,
value: user.cifNumber ?? 'N/A'),
InfoRow(
title: AppLocalizations.of(context).productName,
value: user.productType ?? 'N/A'),
// InfoRow(title: 'Account Opening Date', value: user.accountOpeningDate ?? 'N/A'),
InfoRow(
title: AppLocalizations.of(context).accountStatus, value: 'OPEN'),
InfoRow(
title: AppLocalizations.of(context).availableBalance,
value: user.availableBalance ?? 'N/A'), value: user.availableBalance ?? 'N/A'),
InfoRow( InfoRow(
title: 'Current Balance', value: user.currentBalance ?? 'N/A'), title: AppLocalizations.of(context).currentBalance,
value: user.currentBalance ?? 'N/A'),
user.approvedAmount != null user.approvedAmount != null
? InfoRow( ? InfoRow(
title: 'Approved Amount', value: user.approvedAmount ?? 'N/A') title: AppLocalizations.of(context).approvedAmount,
value: user.approvedAmount ?? 'N/A')
: const SizedBox.shrink(), : const SizedBox.shrink(),
], ],
), ),

View File

@@ -5,6 +5,7 @@ import 'package:shimmer/shimmer.dart';
import 'package:kmobile/data/models/transaction.dart'; import 'package:kmobile/data/models/transaction.dart';
import 'package:kmobile/data/repositories/transaction_repository.dart'; import 'package:kmobile/data/repositories/transaction_repository.dart';
import 'package:kmobile/di/injection.dart'; import 'package:kmobile/di/injection.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
class AccountStatementScreen extends StatefulWidget { class AccountStatementScreen extends StatefulWidget {
final String accountNo; final String accountNo;
@@ -109,8 +110,8 @@ class _AccountStatementScreen extends State<AccountStatementScreen> {
icon: const Icon(Symbols.arrow_back_ios_new), icon: const Icon(Symbols.arrow_back_ios_new),
onPressed: () => Navigator.pop(context), onPressed: () => Navigator.pop(context),
), ),
title: const Text( title: Text(
'Account Statement', AppLocalizations.of(context).accountStatement,
style: TextStyle(color: Colors.black, fontWeight: FontWeight.w500), style: TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
), ),
centerTitle: false, centerTitle: false,
@@ -135,21 +136,24 @@ class _AccountStatementScreen extends State<AccountStatementScreen> {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
const Text('Filters', style: TextStyle(fontSize: 17)), Text(AppLocalizations.of(context).filters,
style: TextStyle(fontSize: 17)),
const SizedBox(height: 15), const SizedBox(height: 15),
Row( Row(
children: [ children: [
Expanded( Expanded(
child: GestureDetector( child: GestureDetector(
onTap: () => _selectFromDate(context), onTap: () => _selectFromDate(context),
child: buildDateBox("From Date", fromDate), child: buildDateBox(
AppLocalizations.of(context).fromDate, fromDate),
), ),
), ),
const SizedBox(width: 10), const SizedBox(width: 10),
Expanded( Expanded(
child: GestureDetector( child: GestureDetector(
onTap: () => _selectToDate(context), onTap: () => _selectToDate(context),
child: buildDateBox("To Date", toDate), child: buildDateBox(
AppLocalizations.of(context).toDate, toDate),
), ),
), ),
], ],
@@ -160,8 +164,8 @@ class _AccountStatementScreen extends State<AccountStatementScreen> {
Expanded( Expanded(
child: TextFormField( child: TextFormField(
controller: _minAmountController, controller: _minAmountController,
decoration: const InputDecoration( decoration: InputDecoration(
labelText: 'Min Amount', labelText: AppLocalizations.of(context).minAmount,
border: OutlineInputBorder(), border: OutlineInputBorder(),
isDense: true, isDense: true,
filled: true, filled: true,
@@ -175,8 +179,8 @@ class _AccountStatementScreen extends State<AccountStatementScreen> {
Expanded( Expanded(
child: TextFormField( child: TextFormField(
controller: _maxAmountController, controller: _maxAmountController,
decoration: const InputDecoration( decoration: InputDecoration(
labelText: 'Max Amount', labelText: AppLocalizations.of(context).maxAmount,
border: OutlineInputBorder(), border: OutlineInputBorder(),
isDense: true, isDense: true,
filled: true, filled: true,
@@ -208,7 +212,7 @@ class _AccountStatementScreen extends State<AccountStatementScreen> {
Padding( Padding(
padding: const EdgeInsets.only(bottom: 12.0), padding: const EdgeInsets.only(bottom: 12.0),
child: Text( child: Text(
'Showing last 10 transactions.', AppLocalizations.of(context).lastTenTransactions,
style: TextStyle( style: TextStyle(
fontSize: 16, fontSize: 16,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
@@ -244,7 +248,7 @@ class _AccountStatementScreen extends State<AccountStatementScreen> {
: _transactions.isEmpty : _transactions.isEmpty
? Center( ? Center(
child: Text( child: Text(
'No transactions found for this account.', AppLocalizations.of(context).noTransactions,
style: TextStyle( style: TextStyle(
fontSize: 16, fontSize: 16,
color: Colors.grey[600], color: Colors.grey[600],

View File

@@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:material_symbols_icons/material_symbols_icons.dart'; import 'package:material_symbols_icons/material_symbols_icons.dart';
class BlockCardScreen extends StatefulWidget { class BlockCardScreen extends StatefulWidget {
@@ -91,8 +92,8 @@ class _BlockCardScreen extends State<BlockCardScreen> {
const SizedBox(height: 10), const SizedBox(height: 10),
TextFormField( TextFormField(
controller: _cardController, controller: _cardController,
decoration: const InputDecoration( decoration: InputDecoration(
labelText: 'Card Number', labelText: AppLocalizations.of(context).cardNumber,
border: OutlineInputBorder(), border: OutlineInputBorder(),
isDense: true, isDense: true,
filled: true, filled: true,
@@ -116,8 +117,8 @@ class _BlockCardScreen extends State<BlockCardScreen> {
Expanded( Expanded(
child: TextFormField( child: TextFormField(
controller: _cvvController, controller: _cvvController,
decoration: const InputDecoration( decoration: InputDecoration(
labelText: 'CVV', labelText: AppLocalizations.of(context).cvv,
border: OutlineInputBorder(), border: OutlineInputBorder(),
isDense: true, isDense: true,
filled: true, filled: true,
@@ -143,8 +144,8 @@ class _BlockCardScreen extends State<BlockCardScreen> {
controller: _expiryController, controller: _expiryController,
readOnly: true, readOnly: true,
onTap: _pickExpiryDate, onTap: _pickExpiryDate,
decoration: const InputDecoration( decoration: InputDecoration(
labelText: 'Expiry Date', labelText: AppLocalizations.of(context).expiryDate,
suffixIcon: Icon(Icons.calendar_today), suffixIcon: Icon(Icons.calendar_today),
border: OutlineInputBorder(), border: OutlineInputBorder(),
isDense: true, isDense: true,
@@ -167,8 +168,8 @@ class _BlockCardScreen extends State<BlockCardScreen> {
const SizedBox(height: 24), const SizedBox(height: 24),
TextFormField( TextFormField(
controller: _phoneController, controller: _phoneController,
decoration: const InputDecoration( decoration: InputDecoration(
labelText: 'Phone', labelText: AppLocalizations.of(context).phone,
prefixIcon: Icon(Icons.phone), prefixIcon: Icon(Icons.phone),
border: OutlineInputBorder(), border: OutlineInputBorder(),
isDense: true, isDense: true,
@@ -185,7 +186,7 @@ class _BlockCardScreen extends State<BlockCardScreen> {
keyboardType: TextInputType.phone, keyboardType: TextInputType.phone,
validator: (value) => value != null && value.length >= 10 validator: (value) => value != null && value.length >= 10
? null ? null
: 'Enter valid phone number', : AppLocalizations.of(context).enterValidPhone,
), ),
const SizedBox(height: 45), const SizedBox(height: 45),
Align( Align(
@@ -200,7 +201,7 @@ class _BlockCardScreen extends State<BlockCardScreen> {
backgroundColor: Colors.blue[900], backgroundColor: Colors.blue[900],
foregroundColor: Colors.white, foregroundColor: Colors.white,
), ),
child: const Text('Block'), child: Text(AppLocalizations.of(context).block),
), ),
), ),
), ),

View File

@@ -3,6 +3,7 @@ import 'package:flutter_svg/svg.dart';
import 'package:kmobile/features/card/screens/block_card_screen.dart'; import 'package:kmobile/features/card/screens/block_card_screen.dart';
import 'package:kmobile/features/card/screens/card_pin_change_details_screen.dart'; import 'package:kmobile/features/card/screens/card_pin_change_details_screen.dart';
import 'package:material_symbols_icons/material_symbols_icons.dart'; import 'package:material_symbols_icons/material_symbols_icons.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
class CardManagementScreen extends StatefulWidget { class CardManagementScreen extends StatefulWidget {
const CardManagementScreen({super.key}); const CardManagementScreen({super.key});
@@ -42,7 +43,7 @@ class _CardManagementScreen extends State<CardManagementScreen> {
children: [ children: [
CardManagementTile( CardManagementTile(
icon: Symbols.add, icon: Symbols.add,
label: 'Apply Debit Card', label: AppLocalizations.of(context).applyDebitCard,
onTap: () {}, onTap: () {},
), ),
const Divider( const Divider(
@@ -50,7 +51,7 @@ class _CardManagementScreen extends State<CardManagementScreen> {
), ),
CardManagementTile( CardManagementTile(
icon: Symbols.remove_moderator, icon: Symbols.remove_moderator,
label: 'Block / Unblock Card', label: AppLocalizations.of(context).blockUnblockCard,
onTap: () { onTap: () {
Navigator.push( Navigator.push(
context, context,
@@ -63,7 +64,7 @@ class _CardManagementScreen extends State<CardManagementScreen> {
), ),
CardManagementTile( CardManagementTile(
icon: Symbols.password_2, icon: Symbols.password_2,
label: 'Change Card PIN', label: AppLocalizations.of(context).changeCardPin,
onTap: () { onTap: () {
Navigator.push( Navigator.push(
context, context,

View File

@@ -3,6 +3,7 @@ import 'package:flutter_svg/svg.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:kmobile/features/card/screens/card_pin_set_screen.dart'; import 'package:kmobile/features/card/screens/card_pin_set_screen.dart';
import 'package:material_symbols_icons/material_symbols_icons.dart'; import 'package:material_symbols_icons/material_symbols_icons.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
class CardPinChangeDetailsScreen extends StatefulWidget { class CardPinChangeDetailsScreen extends StatefulWidget {
const CardPinChangeDetailsScreen({super.key}); const CardPinChangeDetailsScreen({super.key});
@@ -81,8 +82,8 @@ class _CardPinChangeDetailsScreen extends State<CardPinChangeDetailsScreen> {
const SizedBox(height: 10), const SizedBox(height: 10),
TextFormField( TextFormField(
controller: _cardController, controller: _cardController,
decoration: const InputDecoration( decoration: InputDecoration(
labelText: 'Card Number', labelText: AppLocalizations.of(context).cardNumber,
border: OutlineInputBorder(), border: OutlineInputBorder(),
isDense: true, isDense: true,
filled: true, filled: true,
@@ -106,8 +107,8 @@ class _CardPinChangeDetailsScreen extends State<CardPinChangeDetailsScreen> {
Expanded( Expanded(
child: TextFormField( child: TextFormField(
controller: _cvvController, controller: _cvvController,
decoration: const InputDecoration( decoration: InputDecoration(
labelText: 'CVV', labelText: AppLocalizations.of(context).cvv,
border: OutlineInputBorder(), border: OutlineInputBorder(),
isDense: true, isDense: true,
filled: true, filled: true,
@@ -133,8 +134,8 @@ class _CardPinChangeDetailsScreen extends State<CardPinChangeDetailsScreen> {
controller: _expiryController, controller: _expiryController,
readOnly: true, readOnly: true,
onTap: _pickExpiryDate, onTap: _pickExpiryDate,
decoration: const InputDecoration( decoration: InputDecoration(
labelText: 'Expiry Date', labelText: AppLocalizations.of(context).expiryDate,
suffixIcon: Icon(Icons.calendar_today), suffixIcon: Icon(Icons.calendar_today),
border: OutlineInputBorder(), border: OutlineInputBorder(),
isDense: true, isDense: true,
@@ -157,8 +158,8 @@ class _CardPinChangeDetailsScreen extends State<CardPinChangeDetailsScreen> {
const SizedBox(height: 24), const SizedBox(height: 24),
TextFormField( TextFormField(
controller: _phoneController, controller: _phoneController,
decoration: const InputDecoration( decoration: InputDecoration(
labelText: 'Phone', labelText: AppLocalizations.of(context).phone,
prefixIcon: Icon(Icons.phone), prefixIcon: Icon(Icons.phone),
border: OutlineInputBorder(), border: OutlineInputBorder(),
isDense: true, isDense: true,
@@ -190,7 +191,7 @@ class _CardPinChangeDetailsScreen extends State<CardPinChangeDetailsScreen> {
backgroundColor: Colors.blue[900], backgroundColor: Colors.blue[900],
foregroundColor: Colors.white, foregroundColor: Colors.white,
), ),
child: const Text('Next'), child: Text(AppLocalizations.of(context).next),
), ),
), ),
), ),

View File

@@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:material_symbols_icons/material_symbols_icons.dart'; import 'package:material_symbols_icons/material_symbols_icons.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
class CardPinSetScreen extends StatefulWidget { class CardPinSetScreen extends StatefulWidget {
const CardPinSetScreen({super.key}); const CardPinSetScreen({super.key});

View File

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:kmobile/features/enquiry/screens/enquiry_screen.dart'; import 'package:kmobile/features/enquiry/screens/enquiry_screen.dart';
import 'package:material_symbols_icons/material_symbols_icons.dart'; import 'package:material_symbols_icons/material_symbols_icons.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
class ChequeManagementScreen extends StatefulWidget { class ChequeManagementScreen extends StatefulWidget {
const ChequeManagementScreen({super.key}); const ChequeManagementScreen({super.key});

View File

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:material_symbols_icons/material_symbols_icons.dart'; import 'package:material_symbols_icons/material_symbols_icons.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
class EnquiryScreen extends StatefulWidget { class EnquiryScreen extends StatefulWidget {
const EnquiryScreen({super.key}); const EnquiryScreen({super.key});
@@ -16,7 +17,7 @@ class _EnquiryScreen extends State<EnquiryScreen> {
if (await canLaunchUrl(emailUri)) { if (await canLaunchUrl(emailUri)) {
await launchUrl(emailUri); await launchUrl(emailUri);
} else { } else {
debugPrint('Could not launch email client for $email'); debugPrint('${AppLocalizations.of(context).emailLaunchError} $email');
} }
} }
@@ -25,7 +26,7 @@ class _EnquiryScreen extends State<EnquiryScreen> {
if (await canLaunchUrl(phoneUri)) { if (await canLaunchUrl(phoneUri)) {
await launchUrl(phoneUri); await launchUrl(phoneUri);
} else { } else {
debugPrint('Could not launch dialer for $phone'); debugPrint('${AppLocalizations.of(context).dialerLaunchError} $phone');
} }
} }
@@ -58,8 +59,8 @@ class _EnquiryScreen extends State<EnquiryScreen> {
Navigator.pop(context); Navigator.pop(context);
}, },
), ),
title: const Text( title: Text(
'Enquiry', AppLocalizations.of(context).enquiry,
style: TextStyle(color: Colors.black, fontWeight: FontWeight.w500), style: TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
), ),
centerTitle: false, centerTitle: false,
@@ -87,16 +88,17 @@ class _EnquiryScreen extends State<EnquiryScreen> {
// … existing Mail us / Call us / Write to us … // … existing Mail us / Call us / Write to us …
const SizedBox(height: 20), const SizedBox(height: 20),
const Text("Write to us", style: TextStyle(color: Colors.grey)), Text(AppLocalizations.of(context).writeToUs,
style: TextStyle(color: Colors.grey)),
const SizedBox(height: 4), const SizedBox(height: 4),
const Text( const Text(
"complaint@kccb.in", "complaint@kccb.in",
style: TextStyle(color: Colors.blue), style: TextStyle(color: Colors.blue),
), ),
const SizedBox(height: 20), SizedBox(height: 20),
Text( Text(
"Key Contacts", AppLocalizations.of(context).keyContacts,
style: TextStyle( style: TextStyle(
fontSize: 17, fontSize: 17,
color: Theme.of(context).primaryColor, color: Theme.of(context).primaryColor,
@@ -106,25 +108,25 @@ class _EnquiryScreen extends State<EnquiryScreen> {
Divider(color: Colors.grey[300]), Divider(color: Colors.grey[300]),
const SizedBox(height: 16), const SizedBox(height: 16),
_buildContactItem( _buildContactItem(
"Chairman", AppLocalizations.of(context).chairman,
"chairman@kccb.in", "chairman@kccb.in",
"01892-222677", "01892-222677",
), ),
const SizedBox(height: 16), const SizedBox(height: 16),
_buildContactItem( _buildContactItem(
"Managing Director", AppLocalizations.of(context).managingDirector,
"md@kccb.in", "md@kccb.in",
"01892-224969", "01892-224969",
), ),
const SizedBox(height: 16), const SizedBox(height: 16),
_buildContactItem( _buildContactItem(
"General Manager (West)", AppLocalizations.of(context).gmWest,
"gmw@kccb.in", "gmw@kccb.in",
"01892-223280", "01892-223280",
), ),
const SizedBox(height: 16), const SizedBox(height: 16),
_buildContactItem( _buildContactItem(
"General Manager (North)", AppLocalizations.of(context).gmNorth,
"gmn@kccb.in", "gmn@kccb.in",
"01892-224607", "01892-224607",
), ),

View File

@@ -3,6 +3,7 @@ import 'package:flutter_svg/svg.dart';
import 'package:kmobile/features/beneficiaries/screens/add_beneficiary_screen.dart'; import 'package:kmobile/features/beneficiaries/screens/add_beneficiary_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:material_symbols_icons/material_symbols_icons.dart'; import 'package:material_symbols_icons/material_symbols_icons.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
class FundTransferBeneficiaryScreen extends StatefulWidget { class FundTransferBeneficiaryScreen extends StatefulWidget {
const FundTransferBeneficiaryScreen({super.key}); const FundTransferBeneficiaryScreen({super.key});
@@ -43,8 +44,8 @@ class _FundTransferBeneficiaryScreen
Navigator.pop(context); Navigator.pop(context);
}, },
), ),
title: const Text( title: Text(
'Fund Transfer - Beneficiary', AppLocalizations.of(context).fundTransferBeneficiary,
style: TextStyle(color: Colors.black, fontWeight: FontWeight.w500), style: TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
), ),
centerTitle: false, centerTitle: false,

View File

@@ -2,6 +2,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:kmobile/features/fund_transfer/screens/transaction_pin_screen.dart'; import 'package:kmobile/features/fund_transfer/screens/transaction_pin_screen.dart';
import 'package:material_symbols_icons/material_symbols_icons.dart'; import 'package:material_symbols_icons/material_symbols_icons.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
class FundTransferScreen extends StatefulWidget { class FundTransferScreen extends StatefulWidget {
const FundTransferScreen({super.key}); const FundTransferScreen({super.key});
@@ -82,8 +83,8 @@ class _FundTransferScreen extends State<FundTransferScreen> {
Navigator.pop(context); Navigator.pop(context);
}, },
), ),
title: const Text( title: Text(
'Fund Transfer', AppLocalizations.of(context).fundTransfer,
style: TextStyle(color: Colors.black, fontWeight: FontWeight.w500), style: TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
), ),
centerTitle: false, centerTitle: false,
@@ -101,10 +102,10 @@ class _FundTransferScreen extends State<FundTransferScreen> {
body: Column( body: Column(
children: [ children: [
const Spacer(), const Spacer(),
const Row( Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Text('Debit from:'), Text(AppLocalizations.of(context).debitFrom),
Text( Text(
'0300015678903456', '0300015678903456',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.w500), style: TextStyle(fontSize: 18, fontWeight: FontWeight.w500),
@@ -112,7 +113,8 @@ class _FundTransferScreen extends State<FundTransferScreen> {
], ],
), ),
const SizedBox(height: 20), const SizedBox(height: 20),
const Text('Enter Amount', style: TextStyle(fontSize: 20)), Text(AppLocalizations.of(context).enterAmount,
style: TextStyle(fontSize: 20)),
const SizedBox(height: 20), const SizedBox(height: 20),
Container( Container(
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 16), padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 16),
@@ -136,8 +138,7 @@ class _FundTransferScreen extends State<FundTransferScreen> {
mainAxisSpacing: 12, mainAxisSpacing: 12,
crossAxisSpacing: 12, crossAxisSpacing: 12,
childAspectRatio: 1.2, childAspectRatio: 1.2,
children: children: keys.map((key) => buildKey(key)).toList(),
keys.map((key) => buildKey(key)).toList(),
), ),
), ),
], ],

View File

@@ -82,6 +82,118 @@
"validAmount": "Enter a valid amount", "validAmount": "Enter a valid amount",
"swipeToPay": "Swipe to Pay", "swipeToPay": "Swipe to Pay",
"outsideBank": "Outside Bank", "outsideBank": "Outside Bank",
"ownBank": "Own Bank" "ownBank": "Own Bank",
"neft": "NEFT",
"rtgs": "RTGS",
"imps": "IMPS",
"quickPayOutsideBank": "Quick Pay - Outside Bank",
"debitFrom": "Debit from",
"nameRequired": "Name is required",
"bankNameRequired": "Beneficiary Bank name is required",
"branchNameRequired": "Beneficiary Branch Name is required",
"ifscRequired": "IFSC Code is required",
"phoneRequired": "Phone number is required",
"transactionMode": "Transaction Mode",
"payingVia": "Paying via",
"accountOpeningDeposit": "Account Opening Request - Deposit",
"accountOpeningLoan": "Account Opening Request - Loan",
"quickLinks": "Quick Links",
"branchLocator": "Branch Locator",
"emailLaunchError": "Could not launch email client for",
"dialerLaunchError": "Could not launch dialer for",
"writeToUs": "Write to us",
"keyContacts": "Key Contacts",
"chairman": "Chairman",
"managingDirector": "Managing Director",
"gmWest": "General Manager (West)",
"gmNorth": "General Manager (North)",
"enquiry": "Enquiry",
"fundTransferBeneficiary": "Fund Transfer - Beneficiary",
"fundTransfer": "Fund Transfer",
"enterAmount": "Enter Amount",
"accountInfo": "Account Info",
"customerNumber": "Customer Number",
"productName": "Product Name",
"accountStatus": "Account Status",
"availableBalance": "Available Balance",
"currentBalance": "Current Balance",
"accountStatement": "Account Statement",
"filters": "Filters",
"fromDate": "From Date",
"toDate": "To Date",
"minAmount": "Min Amount",
"maxAmount": "Max amount",
"lastTenTransactions": "Showing last 10 transactions",
"applyDebitCard": "Apply Debit Card",
"blockUnblockCard": "Block / Unblock Card",
"changeCardPin": "Change Card PIN",
"cardNumber": "Card Number",
"cvv": "CVV",
"expiryDate": "Expiry Date",
"next": "Next",
"block": "Block",
"approvedAmount": "Approved Amount",
"failedToLoadTransactions": "Failed to load transactions",
"pleaseSelectDateFirst": "Please select date first",
"cardBlocked": "Card has been blocked",
"blockCard": "Block Card",
"enterValidCardNumber": "Enter valid card number",
"cvv3Digits": "CVV must be 3 digits",
"selectExpiryDate": "Select expiry date",
"cardManagement": "Card Management",
"paymentResult": "Payment Result",
"failedToShareScreenshot": "Failed to share screenshot",
"paymentSuccessful": "Payment successful",
"cardDetails": "Card Details",
"cardPin": "Card PIN",
"amountEntered": "Amount entered",
"enterNewPin": "Enter new PIN",
"pleaseEnterNewPin": "Please enter new PIN",
"pin4Digits": "PIN must be at least 4 digits",
"enterAgain": "Enter Again",
"pinsDoNotMatch": "PINs do not match",
"submit": "Submit",
"chequeManagement": "Cheque Management",
"requestChequeBook": "Request Chequebook",
"chequeDeposit": "Cheque Deposit",
"stopCheque": "Stop Cheque",
"revokeStop": "Revoke Stop",
"positivePay": "Positive Pay",
"availableBalance": "Available Balance",
"pinSetSuccess": "PIN set successfully",
"amount": "Amount",
"creditedAccount": "Credited Account",
"date": "Date",
"paymentFailed": "Payment Failed",
"share": "Share",
"done": "Done",
"invalidOtp": "Invalid OTP",
"enterOtp": "Enter OTP",
"otpVerification": "OTP Verification",
"otpSentMessage": "Enter the 4-digit OTP sent to your mobile number",
"verifyOtp": "Verify OTP",
"otpResent": "OTP Resent",
"resendOtp": "Resend OTP",
"setTpin": "Set TPIN",
"tpinRequired": "TPIN Required",
"tpinRequiredMessage": "You need to set your TPIN to continue with secure transactions",
"setTpinTitle": "Set TPIN",
"tpinInfo": "Your TPIN is a 6-digit code used to authorize transactions. Keep it safe and do not share it with anyone.",
"tpinFailed": "Failed to set TPIN. Please try again.",
"success": "Success!",
"tpinSetSuccess": "Your TPIN was set successfully",
"ok": "OK",
"pinsMismatchRetry": "PINs do not match. Try again.",
"pleaseEnter6Digits": "Please enter 6 digits",
"setNewTpin": "Set your new TPIN",
"confirmNewTpin": "Confirm your new TPIN",
"tpinStatusFailed": "Failed to check TPIN status",
"enter6DigitTpin": "Please enter a 6-digit TPIN",
"tpin": "TPIN",
"enterTpin": "Enter your TPIN",
"transactionSuccess": "Transaction Successful",
"on": "On",
"toAccountNumber": "To Account Number",
"shareText": "Share"
} }

View File

@@ -82,5 +82,117 @@
"validAmount": "एक मान्य राशि दर्ज करें", "validAmount": "एक मान्य राशि दर्ज करें",
"swipeToPay": "भुगतान करने के लिए स्वाइप करें", "swipeToPay": "भुगतान करने के लिए स्वाइप करें",
"outsideBank": "बाहरी बैंक", "outsideBank": "बाहरी बैंक",
"ownBank": "स्वयं का बैंक" "ownBank": "स्वयं का बैंक",
"neft": "एनईएफटी",
"rtgs": "आरटीजीएस",
"imps": "आईएमपीएस",
"quickPayOutsideBank": "त्वरित भुगतान - बाहरी बैंक",
"debitFrom": "से डेबिट करें",
"nameRequired": "नाम आवश्यक है",
"bankNameRequired": "बैंक का नाम आवश्यक है",
"branchNameRequired": "शाखा का नाम आवश्यक है",
"ifscRequired": "आईएफएससी कोड आवश्यक है",
"phoneRequired": "फ़ोन नंबर आवश्यक है",
"transactionMode": "लेन-देन का माध्यम",
"payingVia": "के माध्यम से भुगतान",
"accountOpeningDeposit": "खाता खोलने का अनुरोध - जमा",
"accountOpeningLoan": "खाता खोलने का अनुरोध - ऋण",
"quickLinks": "त्वरित लिंक",
"branchLocator": "शाखा लोकेटर",
"emailLaunchError": "ईमेल क्लाइंट खोलने में विफल: ",
"dialerLaunchError": "डायलर खोलने में विफल: ",
"writeToUs": "हमें लिखें",
"keyContacts": "मुख्य संपर्क",
"chairman": "अध्यक्ष",
"managingDirector": "प्रबंध निदेशक",
"gmWest": "महाप्रबंधक (पश्चिम)",
"gmNorth": "महाप्रबंधक (उत्तर)",
"enquiry": "पूछताछ",
"fundTransferBeneficiary": "फंड ट्रांसफर - लाभार्थी",
"fundTransfer": "फंड ट्रांसफर",
"enterAmount": "राशि दर्ज करें",
"accountInfo": "खाता जानकारी",
"customerNumber": "ग्राहक संख्या",
"productName": "उत्पाद का नाम",
"accountStatus": "खाता स्थिति",
"availableBalance": "उपलब्ध शेष राशि",
"currentBalance": "वर्तमान शेष राशि",
"accountStatement": "खाता विवरण",
"filters": "फ़िल्टर",
"fromDate": "प्रारंभ तिथि",
"toDate": "अंतिम तिथि",
"minAmount": "न्यूनतम राशि",
"maxAmount": "अधिकतम राशि",
"lastTenTransactions": "अंतिम 10 लेनदेन प्रदर्शित किए जा रहे हैं",
"applyDebitCard": "डेबिट कार्ड के लिए आवेदन करें",
"blockUnblockCard": "कार्ड ब्लॉक/अनब्लॉक करें",
"changeCardPin": "कार्ड पिन बदलें",
"cardNumber": "कार्ड संख्या",
"cvv": "सीवीवी",
"expiryDate": "समाप्ति तिथि",
"next": "आगे",
"block": "ब्लॉक करें",
"approvedAmount": "स्वीकृत राशि",
"failedToLoadTransactions": "लेन-देन लोड करने में विफल",
"pleaseSelectDateFirst": "कृपया पहले तिथि चुनें",
"cardBlocked": "कार्ड ब्लॉक कर दिया गया है",
"blockCard": "कार्ड ब्लॉक करें",
"enterValidCardNumber": "मान्य कार्ड नंबर दर्ज करें",
"cvv3Digits": "सीवीवी 3 अंकों का होना चाहिए",
"selectExpiryDate": "समाप्ति तिथि चुनें",
"cardManagement": "कार्ड प्रबंधन",
"paymentResult": "भुगतान परिणाम",
"failedToShareScreenshot": "स्क्रीनशॉट साझा करने में विफल",
"paymentSuccessful": "भुगतान सफल",
"cardDetails": "कार्ड विवरण",
"cardPin": "कार्ड पिन",
"amountEntered": "दर्ज की गई राशि",
"enterNewPin": "नया पिन दर्ज करें",
"pleaseEnterNewPin": "कृपया नया पिन दर्ज करें",
"pin4Digits": "पिन कम से कम 4 अंकों का होना चाहिए",
"enterAgain": "पुनः दर्ज करें",
"pinsDoNotMatch": "पिन मेल नहीं खाते",
"submit": "जमा करें",
"chequeManagement": "चेक प्रबंधन",
"requestChequeBook": "चेकबुक का अनुरोध करें",
"chequeDeposit": "चेक जमा",
"stopCheque": "चेक रोकें",
"revokeStop": "रोक हटाएं",
"positivePay": "पॉजिटिव पे",
"availableBalance": "उपलब्ध शेष राशि",
"pinSetSuccess": "पिन सफलतापूर्वक सेट किया गया",
"amount": "राशि",
"creditedAccount": "क्रेडिटेड खाता",
"date": "तिथि",
"paymentFailed": "भुगतान विफल",
"share": "साझा करें",
"done": "पूर्ण",
"invalidOtp": "अमान्य ओटीपी",
"enterOtp": "ओटीपी दर्ज करें",
"otpVerification": "ओटीपी सत्यापन",
"otpSentMessage": "अपने मोबाइल नंबर पर भेजा गया 4-अंकों का ओटीपी दर्ज करें",
"verifyOtp": "ओटीपी सत्यापित करें",
"otpResent": "ओटीपी पुनः भेजा गया",
"resendOtp": "ओटीपी पुनः भेजें",
"setTpin": "टी-पिन सेट करें",
"tpinRequired": "टी-पिन आवश्यक है",
"tpinRequiredMessage": "सुरक्षित लेनदेन के लिए टी-पिन सेट करना आवश्यक है",
"setTpinTitle": "टी-पिन सेट करें",
"tpinInfo": "आपका टी-पिन 6 अंकों का कोड है जिसका उपयोग लेन-देन को प्रमाणित करने के लिए किया जाता है। इसे सुरक्षित रखें और किसी से साझा न करें।",
"tpinFailed": "टी-पिन सेट करने में विफल। कृपया पुनः प्रयास करें।",
"success": "सफलता!",
"tpinSetSuccess": "आपका टी-पिन सफलतापूर्वक सेट हो गया है",
"ok": "ठीक है",
"pinsMismatchRetry": "पिन मेल नहीं खाते। पुनः प्रयास करें।",
"pleaseEnter6Digits": "कृपया 6 अंक दर्ज करें",
"setNewTpin": "अपना नया टी-पिन सेट करें",
"confirmNewTpin": "अपना नया टी-पिन पुष्टि करें",
"tpinStatusFailed": "टी-पिन स्थिति की जांच करने में विफल",
"enter6DigitTpin": "कृपया 6 अंकों का टी-पिन दर्ज करें",
"tpin": "टी-पिन",
"enterTpin": "अपना टी-पिन दर्ज करें",
"transactionSuccess": "लेन-देन सफल रहा",
"on": "पर",
"toAccountNumber": "खाते संख्या में",
"shareText": "साझा करें"
} }