Localization of yojna schemes done
This commit is contained in:
@@ -46,9 +46,10 @@ class _APYScreenState extends State<APYScreen> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final l10n = AppLocalizations.of(context);
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: const Text('APY registration'),
|
title: Text(l10n.apyRegistration),
|
||||||
centerTitle: false,
|
centerTitle: false,
|
||||||
),
|
),
|
||||||
body: SingleChildScrollView(
|
body: SingleChildScrollView(
|
||||||
@@ -61,7 +62,7 @@ class _APYScreenState extends State<APYScreen> {
|
|||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.all(16.0),
|
padding: const EdgeInsets.all(16.0),
|
||||||
child: Text(
|
child: Text(
|
||||||
"Atal Pension Yojana (APY) is a periodic contribution-based pension scheme for citizens of India.",
|
l10n.apyDescription,
|
||||||
style: Theme.of(context).textTheme.titleMedium,
|
style: Theme.of(context).textTheme.titleMedium,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -77,7 +78,7 @@ class _APYScreenState extends State<APYScreen> {
|
|||||||
DropdownButtonFormField<User>(
|
DropdownButtonFormField<User>(
|
||||||
value: _selectedAccount,
|
value: _selectedAccount,
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
labelText: AppLocalizations.of(context).accountNumber,
|
labelText: l10n.accountNumber,
|
||||||
border: const OutlineInputBorder(),
|
border: const OutlineInputBorder(),
|
||||||
contentPadding: const EdgeInsets.symmetric(
|
contentPadding: const EdgeInsets.symmetric(
|
||||||
vertical: 20, horizontal: 12),
|
vertical: 20, horizontal: 12),
|
||||||
@@ -95,8 +96,7 @@ class _APYScreenState extends State<APYScreen> {
|
|||||||
},
|
},
|
||||||
validator: (value) {
|
validator: (value) {
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
return AppLocalizations.of(context)
|
return l10n.accountNumberRequired;
|
||||||
.accountNumberRequired;
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -20,9 +20,10 @@ class GovSchemeScreen extends StatefulWidget {
|
|||||||
class _GovSchemeScreenState extends State<GovSchemeScreen> {
|
class _GovSchemeScreenState extends State<GovSchemeScreen> {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final l10n = AppLocalizations.of(context);
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: const Text('Government Schemes'),
|
title: Text(l10n.governmentSchemes),
|
||||||
),
|
),
|
||||||
body: Stack(
|
body: Stack(
|
||||||
children: [
|
children: [
|
||||||
@@ -34,8 +35,8 @@ class _GovSchemeScreenState extends State<GovSchemeScreen> {
|
|||||||
Expanded(
|
Expanded(
|
||||||
child: GovSchemeTile(
|
child: GovSchemeTile(
|
||||||
logoText: "PMJJBY/PMSBY",
|
logoText: "PMJJBY/PMSBY",
|
||||||
label: "Pradhan Mantri Yojana",
|
label: l10n.pradhanMantriYojana,
|
||||||
subtitle: "Enroll in Pradhan Mantri Jeevan Jyoti Bima Yojana (PMJJBY) and Pradhan Mantri Suraksha Bima Yojana (PMSBY) insurance schemes",
|
subtitle: l10n.enrollPMJJBYPMSBY,
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
@@ -52,8 +53,8 @@ class _GovSchemeScreenState extends State<GovSchemeScreen> {
|
|||||||
Expanded(
|
Expanded(
|
||||||
child: GovSchemeTile(
|
child: GovSchemeTile(
|
||||||
logoText: "APY",
|
logoText: "APY",
|
||||||
label: "Register for Atal Pension Yojana",
|
label: l10n.registerForAtalPensionYojana,
|
||||||
subtitle: "Secure your future with Atal Pension Yojana (APY) retirement scheme. Register in a few steps.",
|
subtitle: l10n.secureYourFutureAPY,
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
|
|||||||
@@ -26,9 +26,9 @@ class _PMMainScreenState extends State<PMMainScreen> {
|
|||||||
List<User> _filteredUsers = [];
|
List<User> _filteredUsers = [];
|
||||||
String? _selectedScheme;
|
String? _selectedScheme;
|
||||||
|
|
||||||
final List<String> _schemes = [
|
List<String> _getSchemes(AppLocalizations l10n) => [
|
||||||
'Pradhan Mantri Jeevan Jyoti Bima Yojana (PMJJBY)',
|
l10n.pmjjbyFull,
|
||||||
'Pradhan Mantri Suraksha Bima Yojana (PMSBY)',
|
l10n.pmsbyFull,
|
||||||
];
|
];
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -61,33 +61,34 @@ class _PMMainScreenState extends State<PMMainScreen> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _handleCreate() async {
|
Future<void> _handleCreate() async {
|
||||||
|
final l10n = AppLocalizations.of(context);
|
||||||
if (_selectedAccount == null) {
|
if (_selectedAccount == null) {
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
const SnackBar(content: Text('Please select account number')),
|
SnackBar(content: Text(l10n.pleaseSelectAccountNumber)),
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_selectedScheme == null) {
|
if (_selectedScheme == null) {
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
const SnackBar(content: Text('Please select a scheme first')),
|
SnackBar(content: Text(l10n.pleaseSelectSchemeFirst)),
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final String schemeCode = _selectedScheme!.contains('PMJJBY') ? '02' : '01';
|
final String schemeCode = (_selectedScheme == l10n.pmjjbyFull) ? '02' : '01';
|
||||||
|
|
||||||
// Show loading
|
// Show loading
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
const SnackBar(
|
SnackBar(
|
||||||
content: Row(
|
content: Row(
|
||||||
children: [
|
children: [
|
||||||
CircularProgressIndicator(),
|
const CircularProgressIndicator(),
|
||||||
SizedBox(width: 16),
|
const SizedBox(width: 16),
|
||||||
Text('Fetching details...'),
|
Text(l10n.fetchingDetails),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
duration: Duration(seconds: 2),
|
duration: const Duration(seconds: 2),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -111,40 +112,41 @@ class _PMMainScreenState extends State<PMMainScreen> {
|
|||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
MaterialPageRoute(
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
if (_selectedScheme!.contains('PMJJBY')) {
|
if (_selectedScheme == l10n.pmjjbyFull) {
|
||||||
return PMJJBYScreen(initialData: data);
|
return PMJJBYScreen(initialData: data!);
|
||||||
} else {
|
} else {
|
||||||
return PMSBYScreen(initialData: data);
|
return PMSBYScreen(initialData: data!);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
const SnackBar(content: Text('Failed to fetch details or no data found.')),
|
SnackBar(content: Text(l10n.failedToFetchDetails)),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
SnackBar(content: Text('Error: ${e.toString()}')),
|
SnackBar(content: Text(l10n.genericError(e.toString()))),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _handleEnquiry() {
|
void _handleEnquiry() {
|
||||||
|
final l10n = AppLocalizations.of(context);
|
||||||
if (_selectedAccount == null) {
|
if (_selectedAccount == null) {
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
const SnackBar(content: Text('Please select account number')),
|
SnackBar(content: Text(l10n.pleaseSelectAccountNumber)),
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_selectedScheme == null) {
|
if (_selectedScheme == null) {
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
const SnackBar(content: Text('Please select a scheme first')),
|
SnackBar(content: Text(l10n.pleaseSelectSchemeFirst)),
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -153,7 +155,7 @@ class _PMMainScreenState extends State<PMMainScreen> {
|
|||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
MaterialPageRoute(
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
if (_selectedScheme!.contains('PMJJBY')) {
|
if (_selectedScheme == l10n.pmjjbyFull) {
|
||||||
return PMJJBYEnquiryScreen(cifNumber: _selectedAccount!.cifNumber);
|
return PMJJBYEnquiryScreen(cifNumber: _selectedAccount!.cifNumber);
|
||||||
} else {
|
} else {
|
||||||
return PMSBYEnquiryScreen(cifNumber: _selectedAccount!.cifNumber);
|
return PMSBYEnquiryScreen(cifNumber: _selectedAccount!.cifNumber);
|
||||||
@@ -165,9 +167,22 @@ class _PMMainScreenState extends State<PMMainScreen> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final l10n = AppLocalizations.of(context);
|
||||||
|
final schemes = _getSchemes(l10n);
|
||||||
|
|
||||||
|
// Ensure _selectedScheme is valid if it was set in a different language
|
||||||
|
if (_selectedScheme != null && !schemes.contains(_selectedScheme)) {
|
||||||
|
// Try to find the corresponding scheme in the new language
|
||||||
|
// This is a bit tricky, but since we only have two:
|
||||||
|
// If it doesn't match, it might be from the other language.
|
||||||
|
// For simplicity, we can just reset it or try to guess.
|
||||||
|
// Better to use non-localized values for the state, but let's just reset for now if it doesn't match
|
||||||
|
_selectedScheme = null;
|
||||||
|
}
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: const Text('Pradhan Mantri Yojana'),
|
title: Text(l10n.pradhanMantriYojana),
|
||||||
centerTitle: false,
|
centerTitle: false,
|
||||||
),
|
),
|
||||||
body: SingleChildScrollView(
|
body: SingleChildScrollView(
|
||||||
@@ -180,7 +195,7 @@ class _PMMainScreenState extends State<PMMainScreen> {
|
|||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.all(16.0),
|
padding: const EdgeInsets.all(16.0),
|
||||||
child: Text(
|
child: Text(
|
||||||
"Create and Enquire about your Pradhan Mantri Jeevan Jyoti Bima Yojana (PMJJBY) and Pradhan Mantri Suraksha Bima Yojana(PMSBY) schemes.",
|
l10n.pmjjbyPmsbyDescription,
|
||||||
style: Theme.of(context).textTheme.titleMedium,
|
style: Theme.of(context).textTheme.titleMedium,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -196,7 +211,7 @@ class _PMMainScreenState extends State<PMMainScreen> {
|
|||||||
DropdownButtonFormField<User>(
|
DropdownButtonFormField<User>(
|
||||||
value: _selectedAccount,
|
value: _selectedAccount,
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
labelText: AppLocalizations.of(context).accountNumber,
|
labelText: l10n.accountNumber,
|
||||||
border: const OutlineInputBorder(),
|
border: const OutlineInputBorder(),
|
||||||
contentPadding: const EdgeInsets.symmetric(
|
contentPadding: const EdgeInsets.symmetric(
|
||||||
vertical: 20, horizontal: 12),
|
vertical: 20, horizontal: 12),
|
||||||
@@ -214,8 +229,7 @@ class _PMMainScreenState extends State<PMMainScreen> {
|
|||||||
},
|
},
|
||||||
validator: (value) {
|
validator: (value) {
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
return AppLocalizations.of(context)
|
return l10n.accountNumberRequired;
|
||||||
.accountNumberRequired;
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
},
|
},
|
||||||
@@ -226,14 +240,14 @@ class _PMMainScreenState extends State<PMMainScreen> {
|
|||||||
isExpanded: true,
|
isExpanded: true,
|
||||||
isDense: false,
|
isDense: false,
|
||||||
itemHeight: null,
|
itemHeight: null,
|
||||||
decoration: const InputDecoration(
|
decoration: InputDecoration(
|
||||||
labelText: 'Select Scheme',
|
labelText: l10n.selectScheme,
|
||||||
border: OutlineInputBorder(),
|
border: const OutlineInputBorder(),
|
||||||
contentPadding:
|
contentPadding:
|
||||||
EdgeInsets.symmetric(vertical: 12, horizontal: 12),
|
const EdgeInsets.symmetric(vertical: 12, horizontal: 12),
|
||||||
),
|
),
|
||||||
selectedItemBuilder: (BuildContext context) {
|
selectedItemBuilder: (BuildContext context) {
|
||||||
return _schemes.map((String scheme) {
|
return schemes.map((String scheme) {
|
||||||
return Container(
|
return Container(
|
||||||
alignment: Alignment.centerLeft,
|
alignment: Alignment.centerLeft,
|
||||||
child: Text(
|
child: Text(
|
||||||
@@ -246,7 +260,7 @@ class _PMMainScreenState extends State<PMMainScreen> {
|
|||||||
);
|
);
|
||||||
}).toList();
|
}).toList();
|
||||||
},
|
},
|
||||||
items: _schemes.map((String scheme) {
|
items: schemes.map((String scheme) {
|
||||||
return DropdownMenuItem<String>(
|
return DropdownMenuItem<String>(
|
||||||
value: scheme,
|
value: scheme,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
@@ -287,9 +301,9 @@ class _PMMainScreenState extends State<PMMainScreen> {
|
|||||||
borderRadius: BorderRadius.circular(8),
|
borderRadius: BorderRadius.circular(8),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
child: const Text(
|
child: Text(
|
||||||
"Create",
|
l10n.create,
|
||||||
style: TextStyle(fontWeight: FontWeight.bold),
|
style: const TextStyle(fontWeight: FontWeight.bold),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -309,7 +323,7 @@ class _PMMainScreenState extends State<PMMainScreen> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
child: Text(
|
child: Text(
|
||||||
AppLocalizations.of(context).enquiry,
|
l10n.enquiry,
|
||||||
style: const TextStyle(fontWeight: FontWeight.bold),
|
style: const TextStyle(fontWeight: FontWeight.bold),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:kmobile/api/services/yojna_service.dart';
|
import 'package:kmobile/api/services/yojna_service.dart';
|
||||||
import 'package:kmobile/di/injection.dart';
|
import 'package:kmobile/di/injection.dart';
|
||||||
|
import 'package:kmobile/l10n/app_localizations.dart';
|
||||||
|
|
||||||
class PMJJBYEnquiryScreen extends StatefulWidget {
|
class PMJJBYEnquiryScreen extends StatefulWidget {
|
||||||
final String? cifNumber;
|
final String? cifNumber;
|
||||||
@@ -35,6 +36,7 @@ class _PMJJBYEnquiryScreenState extends State<PMJJBYEnquiryScreen> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _fetchEnquiryData() async {
|
Future<void> _fetchEnquiryData() async {
|
||||||
|
final l10n = AppLocalizations.of(context);
|
||||||
if (_selectedFinancialYear == null || widget.cifNumber == null) return;
|
if (_selectedFinancialYear == null || widget.cifNumber == null) return;
|
||||||
|
|
||||||
setState(() {
|
setState(() {
|
||||||
@@ -56,19 +58,19 @@ class _PMJJBYEnquiryScreenState extends State<PMJJBYEnquiryScreen> {
|
|||||||
setState(() {
|
setState(() {
|
||||||
if (response is Map<String, dynamic>) {
|
if (response is Map<String, dynamic>) {
|
||||||
if (response['status'] == 'FAILED') {
|
if (response['status'] == 'FAILED') {
|
||||||
_errorMessage = response['message'] ?? 'No record found';
|
_errorMessage = response['message'] ?? l10n.noRecordFound;
|
||||||
} else {
|
} else {
|
||||||
_enquiryData = response;
|
_enquiryData = response;
|
||||||
}
|
}
|
||||||
} else if (response is List && response.isNotEmpty) {
|
} else if (response is List && response.isNotEmpty) {
|
||||||
_enquiryData = response[0] as Map<String, dynamic>;
|
_enquiryData = response[0] as Map<String, dynamic>;
|
||||||
} else {
|
} else {
|
||||||
_errorMessage = 'No data found for the selected year.';
|
_errorMessage = l10n.noDataFoundYear;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
setState(() {
|
setState(() {
|
||||||
_errorMessage = 'Error: ${e.toString()}';
|
_errorMessage = l10n.genericError(e.toString());
|
||||||
});
|
});
|
||||||
} finally {
|
} finally {
|
||||||
setState(() {
|
setState(() {
|
||||||
@@ -79,9 +81,10 @@ class _PMJJBYEnquiryScreenState extends State<PMJJBYEnquiryScreen> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final l10n = AppLocalizations.of(context);
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: const Text('PMJJBY details'),
|
title: Text(l10n.pmjjbyDetails),
|
||||||
),
|
),
|
||||||
body: SingleChildScrollView(
|
body: SingleChildScrollView(
|
||||||
padding: const EdgeInsets.all(16.0),
|
padding: const EdgeInsets.all(16.0),
|
||||||
@@ -100,9 +103,9 @@ class _PMJJBYEnquiryScreenState extends State<PMJJBYEnquiryScreen> {
|
|||||||
ListTile(
|
ListTile(
|
||||||
contentPadding: EdgeInsets.zero,
|
contentPadding: EdgeInsets.zero,
|
||||||
leading: const Icon(Icons.person, color: Colors.blue),
|
leading: const Icon(Icons.person, color: Colors.blue),
|
||||||
title: const Text('CIF Number'),
|
title: Text(l10n.cifNumber),
|
||||||
subtitle: Text(
|
subtitle: Text(
|
||||||
widget.cifNumber ?? 'N/A',
|
widget.cifNumber ?? l10n.notApplicable,
|
||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
@@ -112,11 +115,11 @@ class _PMJJBYEnquiryScreenState extends State<PMJJBYEnquiryScreen> {
|
|||||||
const SizedBox(height: 16),
|
const SizedBox(height: 16),
|
||||||
DropdownButtonFormField<String>(
|
DropdownButtonFormField<String>(
|
||||||
value: _selectedFinancialYear,
|
value: _selectedFinancialYear,
|
||||||
decoration: const InputDecoration(
|
decoration: InputDecoration(
|
||||||
labelText: 'Select Financial Year',
|
labelText: l10n.selectFinancialYear,
|
||||||
border: OutlineInputBorder(),
|
border: const OutlineInputBorder(),
|
||||||
prefixIcon: Icon(Icons.calendar_today),
|
prefixIcon: const Icon(Icons.calendar_today),
|
||||||
contentPadding: EdgeInsets.symmetric(horizontal: 12, vertical: 8),
|
contentPadding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
|
||||||
),
|
),
|
||||||
items: _financialYears.map((String year) {
|
items: _financialYears.map((String year) {
|
||||||
return DropdownMenuItem<String>(
|
return DropdownMenuItem<String>(
|
||||||
@@ -167,20 +170,20 @@ class _PMJJBYEnquiryScreenState extends State<PMJJBYEnquiryScreen> {
|
|||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
'Scheme Details',
|
l10n.schemeDetails,
|
||||||
style: Theme.of(context).textTheme.titleLarge?.copyWith(
|
style: Theme.of(context).textTheme.titleLarge?.copyWith(
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
color: Theme.of(context).colorScheme.primary,
|
color: Theme.of(context).colorScheme.primary,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const Divider(),
|
const Divider(),
|
||||||
_buildDetailRow('Customer Name', _enquiryData!['customername']),
|
_buildDetailRow(l10n.customerName, _enquiryData!['customername']),
|
||||||
_buildDetailRow('Policy Number', _enquiryData!['policynumber']),
|
_buildDetailRow(l10n.policyNumber, _enquiryData!['policynumber']),
|
||||||
_buildDetailRow('Account Number', _enquiryData!['accountno']),
|
_buildDetailRow(l10n.accountNumber, _enquiryData!['accountno']),
|
||||||
_buildDetailRow('Premium Amount', _enquiryData!['preimiumamount']),
|
_buildDetailRow(l10n.premiumAmount, _enquiryData!['preimiumamount']),
|
||||||
_buildDetailRow('Nominee Name', _enquiryData!['nomineename']),
|
_buildDetailRow(l10n.nomineeName, _enquiryData!['nomineename']),
|
||||||
_buildDetailRow('Transaction Date', _enquiryData!['transactiondate']),
|
_buildDetailRow(l10n.date, _enquiryData!['transactiondate']),
|
||||||
_buildDetailRow('Journal No', _enquiryData!['journalno']),
|
_buildDetailRow(l10n.journalNo, _enquiryData!['journalno']),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -203,7 +206,7 @@ class _PMJJBYEnquiryScreenState extends State<PMJJBYEnquiryScreen> {
|
|||||||
),
|
),
|
||||||
Flexible(
|
Flexible(
|
||||||
child: Text(
|
child: Text(
|
||||||
value?.toString() ?? 'N/A',
|
value?.toString() ?? AppLocalizations.of(context).notApplicable,
|
||||||
style: const TextStyle(fontWeight: FontWeight.bold),
|
style: const TextStyle(fontWeight: FontWeight.bold),
|
||||||
textAlign: TextAlign.end,
|
textAlign: TextAlign.end,
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:kmobile/api/services/yojna_service.dart';
|
import 'package:kmobile/api/services/yojna_service.dart';
|
||||||
import 'package:kmobile/di/injection.dart';
|
import 'package:kmobile/di/injection.dart';
|
||||||
|
import 'package:kmobile/l10n/app_localizations.dart';
|
||||||
|
|
||||||
class PMJJBYScreen extends StatefulWidget {
|
class PMJJBYScreen extends StatefulWidget {
|
||||||
final Map<String, dynamic>? initialData;
|
final Map<String, dynamic>? initialData;
|
||||||
@@ -141,6 +142,7 @@ class _PMJJBYScreenState extends State<PMJJBYScreen> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _handleRegister() async {
|
Future<void> _handleRegister() async {
|
||||||
|
final l10n = AppLocalizations.of(context);
|
||||||
// Show loading spinner
|
// Show loading spinner
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
@@ -179,7 +181,7 @@ class _PMJJBYScreenState extends State<PMJJBYScreen> {
|
|||||||
);
|
);
|
||||||
String x = response.toString();
|
String x = response.toString();
|
||||||
if(x.contains('RECORD ALREADY EXISTS')){
|
if(x.contains('RECORD ALREADY EXISTS')){
|
||||||
x= "A record already exists for this request. Your submission has been registered previously.";
|
x= l10n.recordAlreadyExists;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
@@ -190,14 +192,14 @@ class _PMJJBYScreenState extends State<PMJJBYScreen> {
|
|||||||
context: context,
|
context: context,
|
||||||
barrierDismissible: false,
|
barrierDismissible: false,
|
||||||
builder: (context) => AlertDialog(
|
builder: (context) => AlertDialog(
|
||||||
title: const Text('Response'),
|
title: Text(l10n.response),
|
||||||
content: SingleChildScrollView(child: Text(x)),
|
content: SingleChildScrollView(child: Text(x)),
|
||||||
actions: [
|
actions: [
|
||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.of(context).popUntil((route) => route.isFirst);
|
Navigator.of(context).popUntil((route) => route.isFirst);
|
||||||
},
|
},
|
||||||
child: const Text('Close'),
|
child: Text(l10n.close),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@@ -207,7 +209,7 @@ class _PMJJBYScreenState extends State<PMJJBYScreen> {
|
|||||||
if (mounted) {
|
if (mounted) {
|
||||||
Navigator.pop(context); // Close loading spinner
|
Navigator.pop(context); // Close loading spinner
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
SnackBar(content: Text('Error: ${e.toString()}')),
|
SnackBar(content: Text(l10n.genericError(e.toString()))),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -215,9 +217,10 @@ class _PMJJBYScreenState extends State<PMJJBYScreen> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final l10n = AppLocalizations.of(context);
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: const Text('PMJJBY Registration'),
|
title: Text(l10n.pmjjbyRegistration),
|
||||||
),
|
),
|
||||||
body: SingleChildScrollView(
|
body: SingleChildScrollView(
|
||||||
padding: const EdgeInsets.all(16.0),
|
padding: const EdgeInsets.all(16.0),
|
||||||
@@ -226,38 +229,38 @@ class _PMJJBYScreenState extends State<PMJJBYScreen> {
|
|||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
children: [
|
children: [
|
||||||
_buildTextField(_nameController, 'Customer Name', readOnly: _isFetched('customername')),
|
_buildTextField(_nameController, l10n.customerName, readOnly: _isFetched('customername')),
|
||||||
_buildTextField(_customerNoController, 'Customer No', readOnly: _isFetched('customerno')),
|
_buildTextField(_customerNoController, l10n.customerNo, readOnly: _isFetched('customerno')),
|
||||||
_buildTextField(_accountNoController, 'Account No', keyboardType: TextInputType.number, readOnly: _isFetched('accountno')),
|
_buildTextField(_accountNoController, l10n.accountNumber, keyboardType: TextInputType.number, readOnly: _isFetched('accountno')),
|
||||||
_buildTextField(_balanceController, 'Available Balance', keyboardType: TextInputType.number, readOnly: _isFetched('availablebalance')),
|
_buildTextField(_balanceController, l10n.availableBalance, keyboardType: TextInputType.number, readOnly: _isFetched('availablebalance')),
|
||||||
_buildTextField(_aadhaarController, 'Aadhaar No', keyboardType: TextInputType.number, readOnly: _isFetched('aadharno')),
|
_buildTextField(_aadhaarController, l10n.aadhaarNo, keyboardType: TextInputType.number, readOnly: _isFetched('aadharno')),
|
||||||
_buildTextField(_dobController, 'Customer DOB (DD/MM/YYYY)', readOnly: _isFetched('customerdob')),
|
_buildTextField(_dobController, l10n.customerDobFormat, readOnly: _isFetched('customerdob')),
|
||||||
_buildTextField(_genderController, 'Gender', readOnly: _isFetched('gender')),
|
_buildTextField(_genderController, l10n.gender, readOnly: _isFetched('gender')),
|
||||||
_buildTextField(_marriedController, 'Married (Yes/No)', readOnly: _isFetched('married')),
|
_buildTextField(_marriedController, l10n.marriedYesNo, readOnly: _isFetched('married')),
|
||||||
_buildTextField(_mobileController, 'Mobile No', keyboardType: TextInputType.phone, readOnly: _isFetched('mobileno')),
|
_buildTextField(_mobileController, l10n.mobileNumber, keyboardType: TextInputType.phone, readOnly: _isFetched('mobileno')),
|
||||||
_buildTextField(_emailController, 'Email ID', keyboardType: TextInputType.emailAddress, readOnly: _isFetched('emailid')),
|
_buildTextField(_emailController, 'Email ID', keyboardType: TextInputType.emailAddress, readOnly: _isFetched('emailid')),
|
||||||
_buildTextField(_panController, 'PAN', readOnly: _isFetched('pan')),
|
_buildTextField(_panController, l10n.pan, readOnly: _isFetched('pan')),
|
||||||
_buildTextField(_ifscController, 'IFSC Code', readOnly: _isFetched('ifsccode')),
|
_buildTextField(_ifscController, l10n.ifscCode, readOnly: _isFetched('ifsccode')),
|
||||||
_buildTextField(_acctOpeningDateController, 'Date of Acct Opening', readOnly: _isFetched('dateofacctopening')),
|
_buildTextField(_acctOpeningDateController, l10n.dateOfAcctOpening, readOnly: _isFetched('dateofacctopening')),
|
||||||
_buildTextField(_pincodeController, 'Pincode', keyboardType: TextInputType.number, readOnly: _isFetched('pincode')),
|
_buildTextField(_pincodeController, l10n.pincode, keyboardType: TextInputType.number, readOnly: _isFetched('pincode')),
|
||||||
_buildTextField(_stateController, 'State', readOnly: _isFetched('state')),
|
_buildTextField(_stateController, l10n.state, readOnly: _isFetched('state')),
|
||||||
_buildTextField(_countryController, 'Country', readOnly: _isFetched('country')),
|
_buildTextField(_countryController, l10n.country, readOnly: _isFetched('country')),
|
||||||
_buildDropdownField(_ruralCategoryController, 'Rural Category', _ruralOptions, readOnly: _isFetched('ruralcategory')),
|
_buildDropdownField(_ruralCategoryController, l10n.ruralCategory, _ruralOptions, readOnly: _isFetched('ruralcategory')),
|
||||||
const Divider(height: 32),
|
const Divider(height: 32),
|
||||||
const Text('Policy Details', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
|
Text(l10n.policyDetails, style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
|
||||||
const SizedBox(height: 16),
|
const SizedBox(height: 16),
|
||||||
_buildTextField(_policyNumberController, 'Policy Number', readOnly: _isFetched('policynumber')),
|
_buildTextField(_policyNumberController, l10n.policyNumber, readOnly: _isFetched('policynumber')),
|
||||||
_buildTextField(_premiumAmountController, 'Premium Amount', keyboardType: TextInputType.number, readOnly: _isFetched('premiumamount')),
|
_buildTextField(_premiumAmountController, l10n.premiumAmount, keyboardType: TextInputType.number, readOnly: _isFetched('premiumamount')),
|
||||||
_buildTextField(_financialYearController, 'Financial Year', readOnly: _isFetched('financialyear')),
|
_buildTextField(_financialYearController, l10n.financialYear, readOnly: _isFetched('financialyear')),
|
||||||
_buildDropdownField(_healthStatusController, 'Health Status', _healthStatusOptions),
|
_buildDropdownField(_healthStatusController, l10n.healthStatus, _healthStatusOptions),
|
||||||
_buildTextField(_collectionChannelController, 'Collection Channel'),
|
_buildTextField(_collectionChannelController, l10n.collectionChannel),
|
||||||
const Divider(height: 32),
|
const Divider(height: 32),
|
||||||
const Text('Nominee Details', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
|
Text(l10n.nomineeDetails, style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
|
||||||
const SizedBox(height: 16),
|
const SizedBox(height: 16),
|
||||||
_buildTextField(_nomineeNameController, 'Nominee Name'),
|
_buildTextField(_nomineeNameController, l10n.nomineeName),
|
||||||
_buildTextField(_nomineeAddressController, 'Nominee Address'),
|
_buildTextField(_nomineeAddressController, l10n.nomineeAddress),
|
||||||
_buildDropdownField(_nomineeRelationshipController, 'Nominee Relationship', _relationshipOptions, readOnly: _isFetched('nomineerelationship')),
|
_buildDropdownField(_nomineeRelationshipController, l10n.nomineeRelationship, _relationshipOptions, readOnly: _isFetched('nomineerelationship')),
|
||||||
_buildDropdownField(_nomineeMinorController, 'Nominee Minor', _minorOptions, readOnly: _isFetched('nomineeminor')),
|
_buildDropdownField(_nomineeMinorController, l10n.nomineeMinor, _minorOptions, readOnly: _isFetched('nomineeminor')),
|
||||||
const SizedBox(height: 24),
|
const SizedBox(height: 24),
|
||||||
ElevatedButton(
|
ElevatedButton(
|
||||||
onPressed: _handleRegister,
|
onPressed: _handleRegister,
|
||||||
@@ -269,9 +272,9 @@ class _PMJJBYScreenState extends State<PMJJBYScreen> {
|
|||||||
borderRadius: BorderRadius.circular(8),
|
borderRadius: BorderRadius.circular(8),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
child: const Text(
|
child: Text(
|
||||||
'Register',
|
l10n.register,
|
||||||
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
|
style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 32),
|
const SizedBox(height: 32),
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:kmobile/api/services/yojna_service.dart';
|
import 'package:kmobile/api/services/yojna_service.dart';
|
||||||
import 'package:kmobile/di/injection.dart';
|
import 'package:kmobile/di/injection.dart';
|
||||||
|
import 'package:kmobile/l10n/app_localizations.dart';
|
||||||
|
|
||||||
class PMSBYEnquiryScreen extends StatefulWidget {
|
class PMSBYEnquiryScreen extends StatefulWidget {
|
||||||
final String? cifNumber;
|
final String? cifNumber;
|
||||||
@@ -35,6 +36,7 @@ class _PMSBYEnquiryScreenState extends State<PMSBYEnquiryScreen> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _fetchEnquiryData() async {
|
Future<void> _fetchEnquiryData() async {
|
||||||
|
final l10n = AppLocalizations.of(context);
|
||||||
if (_selectedFinancialYear == null || widget.cifNumber == null) return;
|
if (_selectedFinancialYear == null || widget.cifNumber == null) return;
|
||||||
|
|
||||||
setState(() {
|
setState(() {
|
||||||
@@ -56,19 +58,19 @@ class _PMSBYEnquiryScreenState extends State<PMSBYEnquiryScreen> {
|
|||||||
setState(() {
|
setState(() {
|
||||||
if (response is Map<String, dynamic>) {
|
if (response is Map<String, dynamic>) {
|
||||||
if (response['status'] == 'FAILED') {
|
if (response['status'] == 'FAILED') {
|
||||||
_errorMessage = response['message'] ?? 'No record found';
|
_errorMessage = response['message'] ?? l10n.noRecordFound;
|
||||||
} else {
|
} else {
|
||||||
_enquiryData = response;
|
_enquiryData = response;
|
||||||
}
|
}
|
||||||
} else if (response is List && response.isNotEmpty) {
|
} else if (response is List && response.isNotEmpty) {
|
||||||
_enquiryData = response[0] as Map<String, dynamic>;
|
_enquiryData = response[0] as Map<String, dynamic>;
|
||||||
} else {
|
} else {
|
||||||
_errorMessage = 'No data found for the selected year.';
|
_errorMessage = l10n.noDataFoundYear;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
setState(() {
|
setState(() {
|
||||||
_errorMessage = 'Error: ${e.toString()}';
|
_errorMessage = l10n.genericError(e.toString());
|
||||||
});
|
});
|
||||||
} finally {
|
} finally {
|
||||||
setState(() {
|
setState(() {
|
||||||
@@ -79,9 +81,10 @@ class _PMSBYEnquiryScreenState extends State<PMSBYEnquiryScreen> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final l10n = AppLocalizations.of(context);
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: const Text('PMSBY details'),
|
title: Text(l10n.pmsbyDetails),
|
||||||
),
|
),
|
||||||
body: SingleChildScrollView(
|
body: SingleChildScrollView(
|
||||||
padding: const EdgeInsets.all(16.0),
|
padding: const EdgeInsets.all(16.0),
|
||||||
@@ -100,9 +103,9 @@ class _PMSBYEnquiryScreenState extends State<PMSBYEnquiryScreen> {
|
|||||||
ListTile(
|
ListTile(
|
||||||
contentPadding: EdgeInsets.zero,
|
contentPadding: EdgeInsets.zero,
|
||||||
leading: const Icon(Icons.person, color: Colors.blue),
|
leading: const Icon(Icons.person, color: Colors.blue),
|
||||||
title: const Text('CIF Number'),
|
title: Text(l10n.cifNumber),
|
||||||
subtitle: Text(
|
subtitle: Text(
|
||||||
widget.cifNumber ?? 'N/A',
|
widget.cifNumber ?? l10n.notApplicable,
|
||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
@@ -112,11 +115,11 @@ class _PMSBYEnquiryScreenState extends State<PMSBYEnquiryScreen> {
|
|||||||
const SizedBox(height: 16),
|
const SizedBox(height: 16),
|
||||||
DropdownButtonFormField<String>(
|
DropdownButtonFormField<String>(
|
||||||
value: _selectedFinancialYear,
|
value: _selectedFinancialYear,
|
||||||
decoration: const InputDecoration(
|
decoration: InputDecoration(
|
||||||
labelText: 'Select Financial Year',
|
labelText: l10n.selectFinancialYear,
|
||||||
border: OutlineInputBorder(),
|
border: const OutlineInputBorder(),
|
||||||
prefixIcon: Icon(Icons.calendar_today),
|
prefixIcon: const Icon(Icons.calendar_today),
|
||||||
contentPadding: EdgeInsets.symmetric(horizontal: 12, vertical: 8),
|
contentPadding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
|
||||||
),
|
),
|
||||||
items: _financialYears.map((String year) {
|
items: _financialYears.map((String year) {
|
||||||
return DropdownMenuItem<String>(
|
return DropdownMenuItem<String>(
|
||||||
@@ -167,20 +170,20 @@ class _PMSBYEnquiryScreenState extends State<PMSBYEnquiryScreen> {
|
|||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
'Scheme Details',
|
l10n.schemeDetails,
|
||||||
style: Theme.of(context).textTheme.titleLarge?.copyWith(
|
style: Theme.of(context).textTheme.titleLarge?.copyWith(
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
color: Theme.of(context).colorScheme.primary,
|
color: Theme.of(context).colorScheme.primary,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const Divider(),
|
const Divider(),
|
||||||
_buildDetailRow('Customer Name', _enquiryData!['customername']),
|
_buildDetailRow(l10n.customerName, _enquiryData!['customername']),
|
||||||
_buildDetailRow('Policy Number', _enquiryData!['policynumber'] ?? _enquiryData!['policyno']),
|
_buildDetailRow(l10n.policyNumber, _enquiryData!['policynumber'] ?? _enquiryData!['policyno']),
|
||||||
_buildDetailRow('Account Number', _enquiryData!['accountno']),
|
_buildDetailRow(l10n.accountNumber, _enquiryData!['accountno']),
|
||||||
_buildDetailRow('Premium Amount', _enquiryData!['preimiumamount'] ?? _enquiryData!['premiumamount']),
|
_buildDetailRow(l10n.premiumAmount, _enquiryData!['preimiumamount'] ?? _enquiryData!['premiumamount']),
|
||||||
_buildDetailRow('Nominee Name', _enquiryData!['nomineename']),
|
_buildDetailRow(l10n.nomineeName, _enquiryData!['nomineename']),
|
||||||
_buildDetailRow('Transaction Date', _enquiryData!['transactiondate']),
|
_buildDetailRow(l10n.date, _enquiryData!['transactiondate']),
|
||||||
_buildDetailRow('Journal No', _enquiryData!['journalno']),
|
_buildDetailRow(l10n.journalNo, _enquiryData!['journalno']),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -203,7 +206,7 @@ class _PMSBYEnquiryScreenState extends State<PMSBYEnquiryScreen> {
|
|||||||
),
|
),
|
||||||
Flexible(
|
Flexible(
|
||||||
child: Text(
|
child: Text(
|
||||||
value?.toString() ?? 'N/A',
|
value?.toString() ?? AppLocalizations.of(context).notApplicable,
|
||||||
style: const TextStyle(fontWeight: FontWeight.bold),
|
style: const TextStyle(fontWeight: FontWeight.bold),
|
||||||
textAlign: TextAlign.end,
|
textAlign: TextAlign.end,
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:kmobile/api/services/yojna_service.dart';
|
import 'package:kmobile/api/services/yojna_service.dart';
|
||||||
import 'package:kmobile/di/injection.dart';
|
import 'package:kmobile/di/injection.dart';
|
||||||
|
import 'package:kmobile/l10n/app_localizations.dart';
|
||||||
|
|
||||||
class PMSBYScreen extends StatefulWidget {
|
class PMSBYScreen extends StatefulWidget {
|
||||||
final Map<String, dynamic>? initialData;
|
final Map<String, dynamic>? initialData;
|
||||||
@@ -151,6 +152,7 @@ class _PMSBYScreenState extends State<PMSBYScreen> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _handleRegister() async {
|
Future<void> _handleRegister() async {
|
||||||
|
final l10n = AppLocalizations.of(context);
|
||||||
// Show loading spinner
|
// Show loading spinner
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
@@ -191,7 +193,7 @@ class _PMSBYScreenState extends State<PMSBYScreen> {
|
|||||||
);
|
);
|
||||||
String x = response.toString();
|
String x = response.toString();
|
||||||
if(x.contains('RECORD ALREADY EXISTS')){
|
if(x.contains('RECORD ALREADY EXISTS')){
|
||||||
x= "A record already exists for this request. Your submission has been registered previously.";
|
x= l10n.recordAlreadyExists;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
@@ -202,14 +204,14 @@ class _PMSBYScreenState extends State<PMSBYScreen> {
|
|||||||
context: context,
|
context: context,
|
||||||
barrierDismissible: false,
|
barrierDismissible: false,
|
||||||
builder: (context) => AlertDialog(
|
builder: (context) => AlertDialog(
|
||||||
title: const Text('Response'),
|
title: Text(l10n.response),
|
||||||
content: SingleChildScrollView(child: Text(x)),
|
content: SingleChildScrollView(child: Text(x)),
|
||||||
actions: [
|
actions: [
|
||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.of(context).popUntil((route) => route.isFirst);
|
Navigator.of(context).popUntil((route) => route.isFirst);
|
||||||
},
|
},
|
||||||
child: const Text('Close'),
|
child: Text(l10n.close),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@@ -219,7 +221,7 @@ class _PMSBYScreenState extends State<PMSBYScreen> {
|
|||||||
if (mounted) {
|
if (mounted) {
|
||||||
Navigator.pop(context); // Close loading spinner
|
Navigator.pop(context); // Close loading spinner
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
SnackBar(content: Text('Error: ${e.toString()}')),
|
SnackBar(content: Text(l10n.genericError(e.toString()))),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -227,9 +229,10 @@ class _PMSBYScreenState extends State<PMSBYScreen> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final l10n = AppLocalizations.of(context);
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: const Text('PMSBY Registration'),
|
title: Text(l10n.pmsbyRegistration),
|
||||||
),
|
),
|
||||||
body: SingleChildScrollView(
|
body: SingleChildScrollView(
|
||||||
padding: const EdgeInsets.all(16.0),
|
padding: const EdgeInsets.all(16.0),
|
||||||
@@ -238,43 +241,43 @@ class _PMSBYScreenState extends State<PMSBYScreen> {
|
|||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
children: [
|
children: [
|
||||||
_buildTextField(_nameController, 'Customer Name', readOnly: _isFetched('customername')),
|
_buildTextField(_nameController, l10n.customerName, readOnly: _isFetched('customername')),
|
||||||
_buildTextField(_customerNoController, 'Customer No', readOnly: _isFetched('customerno')),
|
_buildTextField(_customerNoController, l10n.customerNo, readOnly: _isFetched('customerno')),
|
||||||
_buildTextField(_accountNoController, 'Account No', keyboardType: TextInputType.number, readOnly: _isFetched('accountno')),
|
_buildTextField(_accountNoController, l10n.accountNumber, keyboardType: TextInputType.number, readOnly: _isFetched('accountno')),
|
||||||
_buildTextField(_balanceController, 'Available Balance', keyboardType: TextInputType.number, readOnly: _isFetched('availablebalance')),
|
_buildTextField(_balanceController, l10n.availableBalance, keyboardType: TextInputType.number, readOnly: _isFetched('availablebalance')),
|
||||||
_buildTextField(_aadhaarController, 'Aadhaar No', keyboardType: TextInputType.number, readOnly: _isFetched('aadharno')),
|
_buildTextField(_aadhaarController, l10n.aadhaarNo, keyboardType: TextInputType.number, readOnly: _isFetched('aadharno')),
|
||||||
_buildTextField(_dobController, 'Customer DOB (DD/MM/YYYY)', readOnly: _isFetched('customerdob')),
|
_buildTextField(_dobController, l10n.customerDobFormat, readOnly: _isFetched('customerdob')),
|
||||||
_buildTextField(_genderController, 'Gender', readOnly: _isFetched('gender')),
|
_buildTextField(_genderController, l10n.gender, readOnly: _isFetched('gender')),
|
||||||
_buildTextField(_marriedController, 'Married (Yes/No)', readOnly: _isFetched('married')),
|
_buildTextField(_marriedController, l10n.marriedYesNo, readOnly: _isFetched('married')),
|
||||||
_buildTextField(_mobileController, 'Mobile No', keyboardType: TextInputType.phone, readOnly: _isFetched('mobileno')),
|
_buildTextField(_mobileController, l10n.mobileNumber, keyboardType: TextInputType.phone, readOnly: _isFetched('mobileno')),
|
||||||
_buildTextField(_emailController, 'Email ID', keyboardType: TextInputType.emailAddress, readOnly: _isFetched('emailid')),
|
_buildTextField(_emailController, 'Email ID', keyboardType: TextInputType.emailAddress, readOnly: _isFetched('emailid')),
|
||||||
_buildTextField(_address1Controller, 'Address 1', readOnly: _isFetched('address1')),
|
_buildTextField(_address1Controller, l10n.address1, readOnly: _isFetched('address1')),
|
||||||
_buildTextField(_address2Controller, 'Address 2', readOnly: _isFetched('address2')),
|
_buildTextField(_address2Controller, l10n.address2, readOnly: _isFetched('address2')),
|
||||||
_buildTextField(_cityController, 'City', readOnly: _isFetched('city')),
|
_buildTextField(_cityController, l10n.city, readOnly: _isFetched('city')),
|
||||||
_buildTextField(_panController, 'PAN', readOnly: _isFetched('pan')),
|
_buildTextField(_panController, l10n.pan, readOnly: _isFetched('pan')),
|
||||||
_buildTextField(_ifscController, 'IFSC Code', readOnly: _isFetched('ifsccode')),
|
_buildTextField(_ifscController, l10n.ifscCode, readOnly: _isFetched('ifsccode')),
|
||||||
_buildTextField(_acctOpeningDateController, 'Date of Acct Opening', readOnly: _isFetched('dateofacctopening')),
|
_buildTextField(_acctOpeningDateController, l10n.dateOfAcctOpening, readOnly: _isFetched('dateofacctopening')),
|
||||||
_buildTextField(_pincodeController, 'Pincode', keyboardType: TextInputType.number, readOnly: _isFetched('pincode')),
|
_buildTextField(_pincodeController, l10n.pincode, keyboardType: TextInputType.number, readOnly: _isFetched('pincode')),
|
||||||
_buildTextField(_stateController, 'State', readOnly: _isFetched('state')),
|
_buildTextField(_stateController, l10n.state, readOnly: _isFetched('state')),
|
||||||
_buildTextField(_countryController, 'Country', readOnly: _isFetched('country')),
|
_buildTextField(_countryController, l10n.country, readOnly: _isFetched('country')),
|
||||||
_buildDropdownField(_ruralCategoryController, 'Rural Category', _ruralOptions, readOnly: _isFetched('ruralcategory')),
|
_buildDropdownField(_ruralCategoryController, l10n.ruralCategory, _ruralOptions, readOnly: _isFetched('ruralcategory')),
|
||||||
const Divider(height: 32),
|
const Divider(height: 32),
|
||||||
const Text('Policy Details', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
|
Text(l10n.policyDetails, style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
|
||||||
const SizedBox(height: 16),
|
const SizedBox(height: 16),
|
||||||
_buildTextField(_policyNumberController, 'Policy Number', readOnly: _isFetched('policyno')),
|
_buildTextField(_policyNumberController, l10n.policyNumber, readOnly: _isFetched('policyno')),
|
||||||
_buildTextField(_premiumAmountController, 'Premium Amount', keyboardType: TextInputType.number, readOnly: _isFetched('premiumamount')),
|
_buildTextField(_premiumAmountController, l10n.premiumAmount, keyboardType: TextInputType.number, readOnly: _isFetched('premiumamount')),
|
||||||
_buildTextField(_financialYearController, 'Financial Year', readOnly: _isFetched('financialyear')),
|
_buildTextField(_financialYearController, l10n.financialYear, readOnly: _isFetched('financialyear')),
|
||||||
_buildTextField(_policyStatusController, 'Policy Status', readOnly: _isFetched('policystatus')),
|
_buildTextField(_policyStatusController, l10n.policyStatus, readOnly: _isFetched('policystatus')),
|
||||||
_buildDropdownField(_healthStatusController, 'Health Status', _healthStatusOptions),
|
_buildDropdownField(_healthStatusController, l10n.healthStatus, _healthStatusOptions),
|
||||||
_buildTextField(_collectionChannelController, 'Collection Channel'),
|
_buildTextField(_collectionChannelController, l10n.collectionChannel),
|
||||||
const Divider(height: 32),
|
const Divider(height: 32),
|
||||||
const Text('Nominee Details', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
|
Text(l10n.nomineeDetails, style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
|
||||||
const SizedBox(height: 16),
|
const SizedBox(height: 16),
|
||||||
_buildTextField(_nomineeNameController, 'Nominee Name'),
|
_buildTextField(_nomineeNameController, l10n.nomineeName),
|
||||||
_buildTextField(_nomineeAddressController, 'Nominee Address'),
|
_buildTextField(_nomineeAddressController, l10n.nomineeAddress),
|
||||||
_buildDropdownField(_relationWithNomineeController, 'Relation with Nominee', _relationshipOptions, readOnly: _isFetched('relationwithnominee')),
|
_buildDropdownField(_relationWithNomineeController, l10n.relationWithNominee, _relationshipOptions, readOnly: _isFetched('relationwithnominee')),
|
||||||
_buildTextField(_nomineeRelationshipController, 'Nominee Relationship'),
|
_buildTextField(_nomineeRelationshipController, l10n.nomineeRelationship),
|
||||||
_buildDropdownField(_nomineeMinorController, 'Nominee Minor', _minorOptions, readOnly: _isFetched('nomineeminor')),
|
_buildDropdownField(_nomineeMinorController, l10n.nomineeMinor, _minorOptions, readOnly: _isFetched('nomineeminor')),
|
||||||
const SizedBox(height: 24),
|
const SizedBox(height: 24),
|
||||||
ElevatedButton(
|
ElevatedButton(
|
||||||
onPressed: _handleRegister,
|
onPressed: _handleRegister,
|
||||||
@@ -286,9 +289,9 @@ class _PMSBYScreenState extends State<PMSBYScreen> {
|
|||||||
borderRadius: BorderRadius.circular(8),
|
borderRadius: BorderRadius.circular(8),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
child: const Text(
|
child: Text(
|
||||||
'Register',
|
l10n.register,
|
||||||
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
|
style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 32),
|
const SizedBox(height: 32),
|
||||||
|
|||||||
@@ -592,5 +592,63 @@
|
|||||||
"chequeStolen": "Cheque Stolen",
|
"chequeStolen": "Cheque Stolen",
|
||||||
"chequeMissing": "Cheque Missing",
|
"chequeMissing": "Cheque Missing",
|
||||||
"chequeDamaged": "Cheque Damaged",
|
"chequeDamaged": "Cheque Damaged",
|
||||||
"close": "Close"
|
"close": "Close",
|
||||||
|
"governmentSchemes": "Government Schemes",
|
||||||
|
"pradhanMantriYojana": "Pradhan Mantri Yojana",
|
||||||
|
"atalPensionYojana": "Atal Pension Yojana",
|
||||||
|
"registerForAtalPensionYojana": "Register for Atal Pension Yojana",
|
||||||
|
"secureYourFutureAPY": "Secure your future with Atal Pension Yojana (APY) retirement scheme. Register in a few steps.",
|
||||||
|
"enrollPMJJBYPMSBY": "Enroll in Pradhan Mantri Jeevan Jyoti Bima Yojana (PMJJBY) and Pradhan Mantri Suraksha Bima Yojana (PMSBY) insurance schemes",
|
||||||
|
"apyRegistration": "APY registration",
|
||||||
|
"apyDescription": "Atal Pension Yojana (APY) is a periodic contribution-based pension scheme for citizens of India.",
|
||||||
|
"pmjjbyPmsbyDescription": "Create and Enquire about your Pradhan Mantri Jeevan Jyoti Bima Yojana (PMJJBY) and Pradhan Mantri Suraksha Bima Yojana(PMSBY) schemes.",
|
||||||
|
"selectScheme": "Select Scheme",
|
||||||
|
"pmjjbyFull": "Pradhan Mantri Jeevan Jyoti Bima Yojana (PMJJBY)",
|
||||||
|
"pmsbyFull": "Pradhan Mantri Suraksha Bima Yojana (PMSBY)",
|
||||||
|
"create": "Create",
|
||||||
|
"pleaseSelectAccountNumber": "Please select account number",
|
||||||
|
"pleaseSelectSchemeFirst": "Please select a scheme first",
|
||||||
|
"fetchingDetails": "Fetching details...",
|
||||||
|
"failedToFetchDetails": "Failed to fetch details or no data found.",
|
||||||
|
"pmjjbyDetails": "PMJJBY details",
|
||||||
|
"pmsbyDetails": "PMSBY details",
|
||||||
|
"cifNumber": "CIF Number",
|
||||||
|
"selectFinancialYear": "Select Financial Year",
|
||||||
|
"schemeDetails": "Scheme Details",
|
||||||
|
"customerName": "Customer Name",
|
||||||
|
"policyNumber": "Policy Number",
|
||||||
|
"premiumAmount": "Premium Amount",
|
||||||
|
"nomineeName": "Nominee Name",
|
||||||
|
"journalNo": "Journal No",
|
||||||
|
"noRecordFound": "No record found",
|
||||||
|
"noDataFoundYear": "No data found for the selected year.",
|
||||||
|
"pmjjbyRegistration": "PMJJBY Registration",
|
||||||
|
"pmsbyRegistration": "PMSBY Registration",
|
||||||
|
"customerNo": "Customer No",
|
||||||
|
"aadhaarNo": "Aadhaar No",
|
||||||
|
"customerDobFormat": "Customer DOB (DD/MM/YYYY)",
|
||||||
|
"gender": "Gender",
|
||||||
|
"marriedYesNo": "Married (Yes/No)",
|
||||||
|
"pan": "PAN",
|
||||||
|
"dateOfAcctOpening": "Date of Acct Opening",
|
||||||
|
"pincode": "Pincode",
|
||||||
|
"state": "State",
|
||||||
|
"country": "Country",
|
||||||
|
"ruralCategory": "Rural Category",
|
||||||
|
"policyDetails": "Policy Details",
|
||||||
|
"financialYear": "Financial Year",
|
||||||
|
"healthStatus": "Health Status",
|
||||||
|
"collectionChannel": "Collection Channel",
|
||||||
|
"nomineeDetails": "Nominee Details",
|
||||||
|
"nomineeAddress": "Nominee Address",
|
||||||
|
"nomineeRelationship": "Nominee Relationship",
|
||||||
|
"nomineeMinor": "Nominee Minor",
|
||||||
|
"response": "Response",
|
||||||
|
"recordAlreadyExists": "A record already exists for this request. Your submission has been registered previously.",
|
||||||
|
"address1": "Address 1",
|
||||||
|
"address2": "Address 2",
|
||||||
|
"city": "City",
|
||||||
|
"relationWithNominee": "Relation with Nominee",
|
||||||
|
"policyStatus": "Policy Status",
|
||||||
|
"emailId": "Email ID"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -593,5 +593,62 @@
|
|||||||
"chequeStolen": "चेक चोरी हो गया",
|
"chequeStolen": "चेक चोरी हो गया",
|
||||||
"chequeMissing": "चेक गायब है",
|
"chequeMissing": "चेक गायब है",
|
||||||
"chequeDamaged": "चेक क्षतिग्रस्त है",
|
"chequeDamaged": "चेक क्षतिग्रस्त है",
|
||||||
"close": "बंद करें"
|
"close": "बंद करें",
|
||||||
|
"governmentSchemes": "सरकारी योजनाएं",
|
||||||
|
"pradhanMantriYojana": "प्रधानमंत्री योजना",
|
||||||
|
"atalPensionYojana": "अटल पेंशन योजना",
|
||||||
|
"registerForAtalPensionYojana": "अटल पेंशन योजना के लिए पंजीकरण करें",
|
||||||
|
"secureYourFutureAPY": "अटल पेंशन योजना (APY) सेवानिवृत्ति योजना के साथ अपना भविष्य सुरक्षित करें। कुछ ही चरणों में पंजीकरण करें।",
|
||||||
|
"enrollPMJJBYPMSBY": "प्रधानमंत्री जीवन ज्योति बीमा योजना (PMJJBY) और प्रधानमंत्री सुरक्षा बीमा योजना (PMSBY) बीमा योजनाओं में नामांकन करें",
|
||||||
|
"apyRegistration": "APY पंजीकरण",
|
||||||
|
"apyDescription": "अटल पेंशन योजना (APY) भारत के नागरिकों के लिए एक आवधिक योगदान-आधारित पेंशन योजना है।",
|
||||||
|
"pmjjbyPmsbyDescription": "अपनी प्रधानमंत्री जीवन ज्योति बीमा योजना (PMJJBY) और प्रधानमंत्री सुरक्षा बीमा योजना (PMSBY) योजनाओं के बारे में बनाएं और पूछताछ करें।",
|
||||||
|
"selectScheme": "योजना चुनें",
|
||||||
|
"pmjjbyFull": "प्रधानमंत्री जीवन ज्योति बीमा योजना (PMJJBY)",
|
||||||
|
"pmsbyFull": "प्रधानमंत्री सुरक्षा बीमा योजना (PMSBY)",
|
||||||
|
"create": "बनाएं",
|
||||||
|
"pleaseSelectAccountNumber": "कृपया खाता संख्या चुनें",
|
||||||
|
"pleaseSelectSchemeFirst": "कृपया पहले एक योजना चुनें",
|
||||||
|
"fetchingDetails": "विवरण प्राप्त किया जा रहा है...",
|
||||||
|
"failedToFetchDetails": "विवरण प्राप्त करने में विफल या कोई डेटा नहीं मिला।",
|
||||||
|
"pmjjbyDetails": "PMJJBY विवरण",
|
||||||
|
"pmsbyDetails": "PMSBY विवरण",
|
||||||
|
"cifNumber": "CIF संख्या",
|
||||||
|
"selectFinancialYear": "वित्तीय वर्ष चुनें",
|
||||||
|
"schemeDetails": "योजना विवरण",
|
||||||
|
"customerName": "ग्राहक का नाम",
|
||||||
|
"policyNumber": "पॉलिसी संख्या",
|
||||||
|
"premiumAmount": "प्रीमियम राशि",
|
||||||
|
"nomineeName": "नामांकित व्यक्ति का नाम",
|
||||||
|
"journalNo": "जर्नल नंबर",
|
||||||
|
"noRecordFound": "कोई रिकॉर्ड नहीं मिला",
|
||||||
|
"noDataFoundYear": "चयनित वर्ष के लिए कोई डेटा नहीं मिला।",
|
||||||
|
"pmjjbyRegistration": "PMJJBY पंजीकरण",
|
||||||
|
"pmsbyRegistration": "PMSBY पंजीकरण",
|
||||||
|
"customerNo": "ग्राहक संख्या",
|
||||||
|
"aadhaarNo": "आधार संख्या",
|
||||||
|
"customerDobFormat": "ग्राहक की जन्म तिथि (DD/MM/YYYY)",
|
||||||
|
"gender": "लिंग",
|
||||||
|
"marriedYesNo": "विवाहित (हाँ/नहीं)",
|
||||||
|
"pan": "पैन",
|
||||||
|
"dateOfAcctOpening": "खाता खोलने की तिथि",
|
||||||
|
"pincode": "पिनकोड",
|
||||||
|
"state": "राज्य",
|
||||||
|
"country": "देश",
|
||||||
|
"ruralCategory": "ग्रामीण श्रेणी",
|
||||||
|
"policyDetails": "पॉलिसी विवरण",
|
||||||
|
"financialYear": "वित्तीय वर्ष",
|
||||||
|
"healthStatus": "स्वास्थ्य की स्थिति",
|
||||||
|
"collectionChannel": "संग्रह चैनल",
|
||||||
|
"nomineeDetails": "नामांकित व्यक्ति का विवरण",
|
||||||
|
"nomineeAddress": "नामांकित व्यक्ति का पता",
|
||||||
|
"nomineeRelationship": "नामांकित व्यक्ति से संबंध",
|
||||||
|
"nomineeMinor": "नामांकित व्यक्ति नाबालिग है",
|
||||||
|
"response": "प्रतिक्रिया",
|
||||||
|
"recordAlreadyExists": "इस अनुरोध के लिए एक रिकॉर्ड पहले से मौजूद है। आपका सबमिशन पहले पंजीकृत किया जा चुका है।",
|
||||||
|
"address1": "पता 1",
|
||||||
|
"address2": "पता 2",
|
||||||
|
"city": "शहर",
|
||||||
|
"relationWithNominee": "नामांकित व्यक्ति के साथ संबंध",
|
||||||
|
"policyStatus": "पॉलिसी की स्थिति"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user