How To Get User ID on Checkout Form Field
By Webotapp Academy•
<!-- wp:paragraph -->\n<p><strong>Following was our previous code of the checkout screen</strong></p>\n<!-- /wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>\n\nimport 'package:ecommerce_app/MyAccount/thankyou.dart';\nimport 'package:ecommerce_app/cart/Cart.dart';\nimport 'package:flutter/cupertino.dart';\nimport 'package:flutter/material.dart';\nimport 'package:http/http.dart' as http;\nimport 'package:ecommerce_app/Home/Home.dart';\nimport 'package:shared_preferences/shared_preferences.dart';\n\nimport '../MyAccount/login.dart';\n\nclass CheckoutScreen extends StatefulWidget {\n const CheckoutScreen({super.key});\n\n @override\n State<CheckoutScreen> createState() => _CheckoutScreenState();\n}\n\nclass _CheckoutScreenState extends State<CheckoutScreen> {\n //define all the variables\n\n final _formKey = GlobalKey<FormState>();\n String selectedState = 'Select State';\n String userMobile = '';\n\n\n\n\n List<String> indianStates = [\n 'Select State',\n 'Andhra Pradesh',\n 'Arunachal Pradesh',\n 'Assam',\n 'Bihar',\n 'Chhattisgarh',\n 'Goa',\n 'Gujarat',\n 'Haryana',\n 'Himachal Pradesh',\n 'Jharkhand',\n 'Karnataka',\n 'Kerala',\n 'Madhya Pradesh',\n 'Maharashtra',\n 'Manipur',\n 'Meghalaya',\n 'Mizoram',\n 'Nagaland',\n 'Odisha',\n 'Punjab',\n 'Rajasthan',\n 'Sikkim',\n 'Tamil Nadu',\n 'Telangana',\n 'Tripura',\n 'Uttar Pradesh',\n 'Uttarakhand',\n 'West Bengal',\n // Rest of the states\n ];\n\n\n\n Widget _buildStateDropdown() {\n\n return DropdownButtonFormField<String>(\n decoration: InputDecoration(\n labelText: 'Your State',\n border: OutlineInputBorder(\n borderRadius: BorderRadius.circular(50),\n borderSide: BorderSide(color: Colors.pink),\n ),\n ),\n value: selectedState,\n items: indianStates.map((state) {\n return DropdownMenuItem<String>(\n value: state,\n child: Text(state),\n );\n }).toList(),\n onChanged: (value) {\n setState(() {\n selectedState = value!;\n });\n },\n );\n }\n\n @override\n void initState() {\n super.initState();\n\n _getUserInfo();\n }\n Future<void> _getUserInfo() async {\n try {\n SharedPreferences prefs = await SharedPreferences.getInstance();\n String usermobile = prefs.getString('userMobile') ?? ''; // Get user email\n\n if (usermobile.isEmpty) {\n Navigator.push(\n context,\n MaterialPageRoute(\n builder: (context) => LoginScreen(),\n ),\n );\n } else {\n setState(() {\n userMobile = usermobile;\n });\n }\n ;\n } catch (error) {\n print('Error retrieving user info: $error');\n }\n }\n\n\n //Define Controllers Here\n\n TextEditingController yourName = TextEditingController();\n TextEditingController yourMobile = TextEditingController();\n TextEditingController yourAddress = TextEditingController();\n\n\n @override\n void dispose(){\n yourName.dispose();\n yourMobile.dispose();\n yourAddress.dispose();\n super.dispose();\n }\n\n @override\n Widget build(BuildContext context) {\n return Scaffold(\n appBar: AppBar(\n title: Text('Checkout Now'),\n backgroundColor: Colors.pink,\n ),\n body: SingleChildScrollView(\n child: Column(\n children: [\n Container(\n margin: EdgeInsets.all(30),\n child: Image.network('https://aboutassam.in/flutter_app/assets/img/cart.png'),\n ),\n Container(\n child: Text('Checkout Screen', style: TextStyle(fontSize: 30),),\n ),\n\n Form(\n\n key: _formKey,\n child: Column(\n children: <Widget>[\n\n _buildTextInputField('Your Name', yourName),\n SizedBox(height: 10,),\n _buildTextInputField('Your Mobile', yourMobile, userMobile : userMobile, readOnly: true),\n SizedBox(height: 10,),\n _buildStateDropdown(),\n SizedBox(height: 10,),\n _buildTextInputField('Your Address', yourAddress),\n SizedBox(height: 10,),\n ElevatedButton(\n onPressed: (){\n if(_formKey.currentState!.validate()){\n sendDataToServer();\n }\n\n },\n child: Text('Submit')\n )\n\n ],\n )\n ,\n )\n ],\n ),\n ),\n );\n }\n\n void sendDataToServer () async {\n // Create a map of the form data.\n Map<String, String> formData = {\n 'name': yourName.text,\n 'mobile': yourMobile.text,\n 'state': selectedState,\n 'address': yourAddress.text,\n };\n\n // Make an HTTP POST request to send the form data.\n final response = await http.post(\n Uri.parse('https://aboutassam.in/flutter_app/api/checkout.php'),\n body: formData,\n );\n\n\n if (response.statusCode == 200) {\n print('Response===== ${response.body}');\n Navigator.push(context,\n MaterialPageRoute(\n builder: (context) => ThankYouScreen())\n );\n } else {\n print('Response===== ${response.body}');\n }\n }\n}\n\n\n\nWidget _buildTextInputField(\n\n\n\n\nString labelText, TextEditingController controller, {\n TextInputType inputType = TextInputType.text,\n String? Function(String?)? validator,\n String userMobile = '',\n bool readOnly = false,\n\n }) {\n\n\n\n if(labelText == 'Your Mobile'){\n\n controller.text = userMobile;\n }\n\n\n return TextFormField(\n controller: controller,\n enabled: !readOnly,\n decoration: InputDecoration(\n labelText: labelText,\n border: OutlineInputBorder(\n borderRadius: BorderRadius.circular(50),\n borderSide: BorderSide(color: Colors.pink),\n ),\n ),\n keyboardType: inputType,\n validator: validator,\n );\n}\n\n\n</code></pre>\n<!-- /wp:code -->\n\n<!-- wp:paragraph -->\n<p>Modified Checkout screen</p>\n<!-- /wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>\n\nimport 'package:ecommerce_app/MyAccount/thankyou.dart';\nimport 'package:ecommerce_app/cart/Cart.dart';\nimport 'package:flutter/cupertino.dart';\nimport 'package:flutter/material.dart';\nimport 'package:http/http.dart' as http;\nimport 'package:ecommerce_app/Home/Home.dart';\nimport 'package:shared_preferences/shared_preferences.dart';\n\nimport '../MyAccount/login.dart';\n\nclass CheckoutScreen extends StatefulWidget {\n const CheckoutScreen({super.key});\n\n @override\n State<CheckoutScreen> createState() => _CheckoutScreenState();\n}\n\nclass _CheckoutScreenState extends State<CheckoutScreen> {\n //define all the variables\n\n final _formKey = GlobalKey<FormState>();\n String selectedState = 'Select State';\n String userMobile = '';\n String userId = '';\n\n\n\n\n List<String> indianStates = [\n 'Select State',\n 'Andhra Pradesh',\n 'Arunachal Pradesh',\n 'Assam',\n 'Bihar',\n 'Chhattisgarh',\n 'Goa',\n 'Gujarat',\n 'Haryana',\n 'Himachal Pradesh',\n 'Jharkhand',\n 'Karnataka',\n 'Kerala',\n 'Madhya Pradesh',\n 'Maharashtra',\n 'Manipur',\n 'Meghalaya',\n 'Mizoram',\n 'Nagaland',\n 'Odisha',\n 'Punjab',\n 'Rajasthan',\n 'Sikkim',\n 'Tamil Nadu',\n 'Telangana',\n 'Tripura',\n 'Uttar Pradesh',\n 'Uttarakhand',\n 'West Bengal',\n // Rest of the states\n ];\n\n\n\n Widget _buildStateDropdown() {\n\n return DropdownButtonFormField<String>(\n decoration: InputDecoration(\n labelText: 'Your State',\n border: OutlineInputBorder(\n borderRadius: BorderRadius.circular(50),\n borderSide: BorderSide(color: Colors.pink),\n ),\n ),\n value: selectedState,\n items: indianStates.map((state) {\n return DropdownMenuItem<String>(\n value: state,\n child: Text(state),\n );\n }).toList(),\n onChanged: (value) {\n setState(() {\n selectedState = value!;\n });\n },\n );\n }\n\n @override\n void initState() {\n super.initState();\n\n _getUserInfo();\n }\n Future<void> _getUserInfo() async {\n try {\n SharedPreferences prefs = await SharedPreferences.getInstance();\n String usermobile = prefs.getString('userMobile') ?? ''; // Get user email\n int userId = prefs.getInt('userId') ?? 0; // Get user email\n\n print('-------User id is $userId');\n\n if (usermobile.isEmpty) {\n Navigator.push(\n context,\n MaterialPageRoute(\n builder: (context) => LoginScreen(),\n ),\n );\n } else {\n setState(() {\n userMobile = usermobile;\n this.userId = userId.toString();\n yourId.text = this.userId;\n });\n }\n ;\n } catch (error) {\n print('Error retrieving user info: $error');\n }\n }\n\n\n //Define Controllers Here\n\n TextEditingController yourName = TextEditingController();\n TextEditingController yourMobile = TextEditingController();\n TextEditingController yourAddress = TextEditingController();\n TextEditingController yourId = TextEditingController();\n\n\n @override\n void dispose(){\n yourName.dispose();\n yourMobile.dispose();\n yourAddress.dispose();\n yourId.dispose();\n super.dispose();\n }\n\n @override\n Widget build(BuildContext context) {\n return Scaffold(\n appBar: AppBar(\n title: Text('Checkout Now'),\n backgroundColor: Colors.pink,\n ),\n body: SingleChildScrollView(\n child: Column(\n children: [\n Container(\n margin: EdgeInsets.all(30),\n child: Image.network('https://aboutassam.in/flutter_app/assets/img/cart.png'),\n ),\n Container(\n child: Text('Checkout Screen', style: TextStyle(fontSize: 30),),\n ),\n\n Form(\n\n key: _formKey,\n child: Column(\n children: <Widget>[\n\n _buildTextInputField('Your Name', yourName),\n SizedBox(height: 10,),\n _buildTextInputField('Your Mobile', yourMobile, userMobile : userMobile, readOnly: true),\n SizedBox(height: 10,),\n\n _buildTextInputField('Your ID', yourId, userId : userId, readOnly: true),\n SizedBox(height: 10,),\n _buildStateDropdown(),\n SizedBox(height: 10,),\n _buildTextInputField('Your Address', yourAddress),\n SizedBox(height: 10,),\n ElevatedButton(\n onPressed: (){\n if(_formKey.currentState!.validate()){\n sendDataToServer();\n }\n\n },\n child: Text('Submit')\n )\n\n ],\n )\n ,\n )\n ],\n ),\n ),\n );\n }\n\n void sendDataToServer () async {\n // Create a map of the form data.\n Map<String, String> formData = {\n 'name': yourName.text,\n 'mobile': yourMobile.text,\n 'state': selectedState,\n 'address': yourAddress.text,\n 'user_id' : yourId.text\n };\n\n // Make an HTTP POST request to send the form data.\n final response = await http.post(\n Uri.parse('https://aboutassam.in/flutter_app/api/checkout.php'),\n body: formData,\n );\n\n\n if (response.statusCode == 200) {\n print('Response===== ${response.body}');\n Navigator.push(context,\n MaterialPageRoute(\n builder: (context) => ThankYouScreen())\n );\n } else {\n print('Response===== ${response.body}');\n }\n }\n}\n\n\n\nWidget _buildTextInputField(\n\n\n\n\nString labelText, TextEditingController controller, {\n TextInputType inputType = TextInputType.text,\n String? Function(String?)? validator,\n String userMobile = '',\n String userId = '',\n bool readOnly = false,\n\n }) {\n\n\n\n if(labelText == 'Your Mobile'){\n\n controller.text = userMobile;\n }\n\n if(labelText == 'Your ID'){\n\n controller.text = userId;\n }\n\n\n return TextFormField(\n controller: controller,\n enabled: !readOnly,\n decoration: InputDecoration(\n labelText: labelText,\n border: OutlineInputBorder(\n borderRadius: BorderRadius.circular(50),\n borderSide: BorderSide(color: Colors.pink),\n ),\n ),\n keyboardType: inputType,\n validator: validator,\n );\n}\n\n\n</code></pre>\n<!-- /wp:code -->