Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
137 changes: 136 additions & 1 deletion main.js
Original file line number Diff line number Diff line change
@@ -1 +1,136 @@
console.log('Hello World!');
// main.dart
import 'package:flutter/material.dart';

void main() => runApp(RechargeApp());

class RechargeApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Mobile Recharge',
theme: ThemeData(primarySwatch: Colors.blue),
home: RechargeScreen(),
);
}
}

class RechargeScreen extends StatefulWidget {
@override
_RechargeScreenState createState() => _RechargeScreenState();
}

class _RechargeScreenState extends State<RechargeScreen> {
String _selectedOperator = 'Airtel';
String _selectedPlan = '299';
String _mobileNumber = '';
final _formKey = GlobalKey<FormState>();

List<String> operators = ['Airtel', 'Jio', 'Vodafone', 'Idea'];
Map<String, List<String>> plans = {
'Airtel': ['299', '399', '499', '799'],
'Jio': ['299', '399', '555', '799'],
'Vodafone': ['249', '399', '499', '749'],
'Idea': ['199', '299', '399', '699'],
};

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Mobile Recharge')),
body: Padding(
padding: EdgeInsets.all(16.0),
child: Form(
key: _formKey,
child: Column(
children: [
DropdownButtonFormField<String>(
value: _selectedOperator,
items: operators.map((operator) {
return DropdownMenuItem(
value: operator,
child: Text(operator),
);
}).toList(),
onChanged: (value) {
setState(() {
_selectedOperator = value!;
_selectedPlan = plans[value]!.first;
});
},
decoration: InputDecoration(labelText: 'Select Operator'),
),
SizedBox(height: 20),
TextFormField(
keyboardType: TextInputType.phone,
decoration: InputDecoration(
labelText: 'Mobile Number',
hintText: 'Enter 10-digit mobile number',
),
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter mobile number';
}
if (value.length != 10) {
return 'Please enter valid 10-digit number';
}
return null;
},
onChanged: (value) {
_mobileNumber = value;
},
),
SizedBox(height: 20),
DropdownButtonFormField<String>(
value: _selectedPlan,
items: plans[_selectedOperator]!.map((plan) {
return DropdownMenuItem(
value: plan,
child: Text('₹$plan'),
);
}).toList(),
onChanged: (value) {
setState(() {
_selectedPlan = value!;
});
},
decoration: InputDecoration(labelText: 'Select Plan'),
),
SizedBox(height: 30),
ElevatedButton(
onPressed: () {
if (_formKey.currentState!.validate()) {
// Process recharge
_processRecharge();
}
},
child: Text('Recharge Now'),
style: ElevatedButton.styleFrom(
padding: EdgeInsets.symmetric(horizontal: 40, vertical: 15),
),
),
],
),
),
),
);
}

void _processRecharge() async {
// Here you would typically call your backend API
// For now, just show a confirmation dialog
showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text('Recharge Successful'),
content: Text(
'₹$_selectedPlan recharge for $_mobileNumber ($_selectedOperator) was successful!'),
actions: [
TextButton(
onPressed: () => Navigator.pop(context),
child: Text('OK'),
),
],
),
);
}
}