import 'package:flutter/material.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:healthcare_pharmacy/google_maps_place_picker_mb/google_maps_place_picker.dart'; import 'package:healthcare_pharmacy/keys.dart'; import 'package:healthcare_pharmacy/otpscreen.dart'; import 'package:healthcare_pharmacy/settings.dart'; import 'login.dart'; import 'package:geolocator/geolocator.dart'; import 'package:geocoding/geocoding.dart'; import 'package:image_picker/image_picker.dart'; import 'package:flutter/services.dart'; import 'dart:io' show File, Platform; import 'package:google_maps_flutter_android/google_maps_flutter_android.dart'; import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; import 'package:location/location.dart' as locationmap; class SignUp extends StatefulWidget { const SignUp({super.key}); @override State createState() => _SignUpState(); } class _SignUpState extends State { bool isPwdObscureText=true; bool isConfirmPwdObscureText = true; TextEditingController nameController = TextEditingController(); TextEditingController healthpharmaid = TextEditingController(); TextEditingController buildingNameController = TextEditingController(); TextEditingController pharmaRegController = TextEditingController(); TextEditingController pharmaOpentimeController = TextEditingController(); TextEditingController pharmaClosetimeController = TextEditingController(); TextEditingController emailController = TextEditingController(); TextEditingController mobileNumberController = TextEditingController(); TextEditingController userAddressDescriptionController = TextEditingController(); TextEditingController userAddressCapturingController = TextEditingController(); TextEditingController passwordController = TextEditingController(); TextEditingController confirmPasswordController = TextEditingController(); String _currentAddress =''; Position? _currentPosition; String address1 = ''; String address2 = ''; String city = ''; String state = ''; String zip = ''; String country = ''; double lat=0; double lng=0; String dropdownTypeOfPlans = 'Red'; var typeOfCategoryPlans = [ 'Red', 'Blue', 'Green', ]; @override void initState() { isPwdObscureText = true; isConfirmPwdObscureText = true; super.initState(); } PickResult? selectedPlace; bool _mapsInitialized = false; final String _mapsRenderer = "latest"; var kInitialPosition = const LatLng(15.462477, 78.717401); locationmap.Location location = locationmap.Location(); final GoogleMapsFlutterPlatform mapsImplementation = GoogleMapsFlutterPlatform.instance; void initRenderer() { if (_mapsInitialized) return; if (mapsImplementation is GoogleMapsFlutterAndroid) { switch (_mapsRenderer) { case "legacy": (mapsImplementation as GoogleMapsFlutterAndroid) .initializeWithRenderer(AndroidMapRenderer.legacy); break; case "latest": (mapsImplementation as GoogleMapsFlutterAndroid) .initializeWithRenderer(AndroidMapRenderer.latest); break; } } setState(() { _mapsInitialized = true; }); } Future onWillPop() async { final shouldPop = await showDialog(context: context, builder: (context) { return AlertDialog( title: const Text('Do you want to exit app?', style: TextStyle( color: primaryColor, fontSize: 20, )), actionsAlignment: MainAxisAlignment.spaceBetween, actions: [ TextButton( onPressed: () { SystemNavigator.pop(); }, child: const Text('Yes', style: TextStyle( color: primaryColor, fontSize: 20, )), ), TextButton( onPressed: () { Navigator.of(context).pop(false); }, child: const Text('No', style: TextStyle( color: primaryColor, fontSize: 20, )), ), ], ); }, ); return shouldPop!; } @override Widget build(BuildContext context) { return WillPopScope( onWillPop:()async=>onWillPop(), child: Scaffold( body: Stack(children: [ Container( decoration: const BoxDecoration( image: DecorationImage(image: AssetImage("images/background.png"), fit: BoxFit.cover,), ), ), GestureDetector( onTap: () { FocusManager.instance.primaryFocus?.unfocus(); }, child: SafeArea( child: SingleChildScrollView( child: Column( children: [ SizedBox( height: 20, ), Container( //width: double.infinity, child: Image( image: const AssetImage('images/logo.png'), height: MediaQuery.of(context).size.height * .18, )), SizedBox( height: 10, ), Container( padding: const EdgeInsets.all(10), // Set the desired width child: TextFormField( cursorColor: greyColor, controller: nameController, textCapitalization: TextCapitalization.characters, decoration: textFormFieldDecoration(Icons.person,'Enter Your Name'), ), ), //name Container( padding: const EdgeInsets.all(10), child: TextFormField( cursorColor: greyColor, controller: pharmaRegController, textCapitalization: TextCapitalization.characters, decoration: textFormFieldDecoration(Icons.numbers,'Enter REG Number'), ), ), Container( padding: const EdgeInsets.all(10), child: TextFormField( cursorColor: greyColor, controller: mobileNumberController, keyboardType: TextInputType.phone, maxLength: 10, decoration: textFormFieldDecoration(Icons.phone_android,'Enter Mobile Number'), ), ), //mobile Container( padding: const EdgeInsets.all(10), child: TextFormField( cursorColor: greyColor, controller: emailController, keyboardType: TextInputType.emailAddress, decoration: textFormFieldDecoration(Icons.email,'Enter Your Email'), ), ), SizedBox( height: 10, ), Container( padding: const EdgeInsets.fromLTRB(10, 10, 10, 0), child: DropdownButtonFormField( // Initial Value value: dropdownTypeOfPlans, isExpanded: true, decoration: textFormFieldDecoration(Icons.next_plan_outlined,'Type of plan'), hint: Text('Select Type of water'), // Down Arrow Icon icon: const Icon(Icons.keyboard_arrow_down), // Array list of items items: typeOfCategoryPlans.map((String items) { return DropdownMenuItem( value: items, child: Text(items), ); }).toList(), // After selecting the desired option,it will // change button value to selected value onChanged: (String? newValue) { setState(() { dropdownTypeOfPlans = newValue!; }); }, ), ), SizedBox( height: 10, ), GestureDetector( child: Container( padding: const EdgeInsets.all(10), child: TextFormField( cursorColor: greyColor, controller: userAddressCapturingController, onTap:() { //============================================================================================= location.serviceEnabled().then((value) { if (value) { initRenderer(); Navigator.push( context, MaterialPageRoute( builder: (context) { return PlacePicker( resizeToAvoidBottomInset: false, hintText: "Find a place ...", searchingText: "Please wait ...", selectText: "Select place", outsideOfPickAreaText: "Place not in area", initialPosition: kInitialPosition, useCurrentLocation: true, selectInitialPosition: true, usePinPointingSearch: true, usePlaceDetailSearch: true, zoomGesturesEnabled: true, zoomControlsEnabled: true, onMapCreated: (GoogleMapController controller) {}, onPlacePicked: (PickResult result) { setState(() { selectedPlace = result; lat=selectedPlace!.geometry!.location.lat; lng=selectedPlace!.geometry!.location.lng; if(selectedPlace!.types!.length==1){ userAddressCapturingController.text = selectedPlace!.formattedAddress!; } else{ userAddressCapturingController.text =selectedPlace!.name!+', '+selectedPlace!.formattedAddress!; } Navigator.of(context).pop(); }); }, onMapTypeChanged: (MapType mapType) {}, apiKey: Platform.isAndroid ? APIKeys.androidApiKey : APIKeys.iosApiKey, forceAndroidLocationManager: true, ); }, ), ); } else { showGeneralDialog( context: context, pageBuilder: (context, x, y) { return Scaffold( backgroundColor: Colors.grey.withOpacity(.5), body: Center( child: Container( width: double.infinity, height: 150, padding: const EdgeInsets.symmetric(horizontal: 20), child: Card( child: Padding( padding: const EdgeInsets.all(10.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const Text( "Please enable the location", style: TextStyle( fontSize:18, fontWeight: FontWeight.w500, ), ), const SizedBox( height: 20, ), ElevatedButton( onPressed: () { Navigator.pop(context); }, child: const Text("Cancel"), ), ], ), ), ), ), ), ); }, ); } }); //===================================================================================== // _getCurrentPosition(); }, keyboardType: TextInputType.streetAddress, readOnly: true, decoration: textFormFieldDecoration(Icons.location_on_rounded,'select address from MAP'), ), ), /* onTap: () { },*///address ),//address capturing const SizedBox( height: 5, ), Container( padding: const EdgeInsets.all(10), child: TextFormField( cursorColor: greyColor, controller: userAddressDescriptionController, textCapitalization: TextCapitalization.characters, decoration: textFormFieldDecoration(Icons.plagiarism_outlined,'Address Description ex:FlatNo [Optional]'), ), ),//address description const SizedBox( height: 5, ), /* Container( padding: const EdgeInsets.all(10), child: TextFormField( cursorColor: greyColor, controller: pharmaOpentimeController, keyboardType: TextInputType.datetime, decoration: const InputDecoration( prefixIcon: Icon( Icons.watch_later_outlined, color: primaryColor, ), border: OutlineInputBorder( borderSide: BorderSide(color: primaryColor)), focusedBorder: OutlineInputBorder( borderSide: BorderSide(color: primaryColor), ), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: primaryColor), ), labelText: 'Pharma Open Timing', labelStyle: TextStyle( color: greyColor, //<-- SEE HERE ), ), ), ), const SizedBox( height: 5, ), Container( padding: const EdgeInsets.all(10), child: TextFormField( cursorColor: greyColor, controller: pharmaClosetimeController, keyboardType: TextInputType.datetime, decoration: const InputDecoration( prefixIcon: Icon( Icons.watch_later_outlined, color: primaryColor, ), border: OutlineInputBorder( borderSide: BorderSide(color: primaryColor)), focusedBorder: OutlineInputBorder( borderSide: BorderSide(color: primaryColor), ), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: primaryColor), ), labelText: 'Pharma Close Timing', labelStyle: TextStyle( color: greyColor, //<-- SEE HERE ), ), ), ), const SizedBox( height: 5, ),*/ Container( padding: const EdgeInsets.all(10), child: TextFormField( cursorColor: greyColor, obscureText: isPwdObscureText, controller: passwordController, decoration: textFormFieldDecoration(Icons.lock,'Create Password'), ), ), //pwd const SizedBox( height: 5, ), Container( width:MediaQuery.of(context).size.width * .99, height: 55, padding: const EdgeInsets.fromLTRB(3, 0, 3, 0), child: ElevatedButton( style: ElevatedButton.styleFrom( primary: buttonColor, // background onPrimary: Colors.white, // foreground ), onPressed: () async { if (nameController.text != '' && passwordController.text != '' && mobileNumberController.text != ''&& emailController.text != '') { AppSettings.preLoaderDialog(context); var payload = new Map(); payload["pharmacyname"] = nameController.text.toString(); payload["password"] = passwordController.text.toString(); payload["phone"] = mobileNumberController.text.toString(); payload["emails"] = [ {"email": emailController.text.toString()} ]; payload["pharmacy_address"] = userAddressCapturingController.text; payload["registration_number"] = pharmaRegController.text; payload["city"] = city; payload["state"] = state; payload["zip"] = zip; payload["country"] = country; payload["description"] = ''; payload["plan"] = dropdownTypeOfPlans.toString(); payload["latitude"] = lat; payload["longitude"] = lng; payload["fcmId"] = AppSettings.fcmId; bool signUpStatus = await AppSettings.signUp(payload); try { if (signUpStatus) { var smsPayload = new Map(); smsPayload["mobileNumbers"] = mobileNumberController.text.toString(); bool sendSms = await AppSettings.sendSms(smsPayload); if(sendSms){ Navigator.of(context, rootNavigator: true).pop(); Navigator.push( context, MaterialPageRoute( builder: (context) => OtpScreen(myObject: mobileNumberController.text.toString(),)), ); } else{ Navigator.of(context, rootNavigator: true).pop(); } } else { Navigator.of(context, rootNavigator: true).pop(); /*AppSettings.longFailedToast( "Mobile number already exists");*/ } } catch (exception) { print(exception); Navigator.of(context, rootNavigator: true).pop(); //AppSettings.longFailedToast("Please enter valid details"); } } else { //.longFailedToast("details should not be empty"); } }, child: Text('Sign Up'), )),//login button Row( mainAxisAlignment: MainAxisAlignment.center, children: [ const Text( 'Are you a Member?', style: TextStyle( color: Colors.white, ), ), TextButton( child: const Text( 'Login?', style: TextStyle( fontSize: 20, color: Colors.white, decoration: TextDecoration.underline, ), ), onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (context) => const Login()), ); }, ) ], ), ], ), )), ), ])), ); } showUserSignUSuccessDialog() async { healthpharmaid.text=AppSettings.healthpharmaIdsign; return showDialog( context: context, barrierDismissible: false, useSafeArea: true, builder: (BuildContext context) { return StatefulBuilder( builder: (BuildContext context, StateSetter setState) { return AlertDialog( title: const Text('User SignUp Successfully!!'), content: SingleChildScrollView( child: ListBody( children: [ Container( padding: const EdgeInsets.fromLTRB(10, 10, 10, 0), child: TextFormField( cursorColor: greyColor, readOnly: true, controller: nameController, decoration: const InputDecoration( prefixIcon: Icon( Icons.person, color: greyColor, ), border: OutlineInputBorder( borderSide: BorderSide(color: greyColor)), focusedBorder: OutlineInputBorder( borderSide: BorderSide(color: greyColor), ), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: greyColor), ), labelText: 'User Name', labelStyle: TextStyle( color: greyColor, //<-- SEE HERE ), ), ), ), Container( padding: const EdgeInsets.fromLTRB(10, 10, 10, 0), child: TextFormField( cursorColor: greyColor, readOnly: true, controller:healthpharmaid, decoration: const InputDecoration( prefixIcon: Icon( Icons.person, color: greyColor, ), border: OutlineInputBorder( borderSide: BorderSide(color: greyColor)), focusedBorder: OutlineInputBorder( borderSide: BorderSide(color: greyColor), ), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: greyColor), ), labelText: 'User Id', labelStyle: TextStyle( color: greyColor, //<-- SEE HERE ), ), ), ), // AppSettings.saveAvailableReportAndLocationsInMemorysignup('customerId'); const SizedBox( height:10, ), Container( padding: const EdgeInsets.fromLTRB(10, 10, 10, 0), child: TextFormField( cursorColor: greyColor, readOnly: true, controller: buildingNameController, decoration: const InputDecoration( prefixIcon: Icon( Icons.home_filled, color: greyColor, ), border: OutlineInputBorder( borderSide: BorderSide(color: greyColor)), focusedBorder: OutlineInputBorder( borderSide: BorderSide(color: greyColor), ), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: greyColor), ), labelText: 'Building Name', labelStyle: TextStyle( color: greyColor, //<-- SEE HERE ), ), ), ), const SizedBox( height:10, ), Container( padding: const EdgeInsets.fromLTRB(10, 10, 10, 0), child: TextFormField( cursorColor: greyColor, readOnly: true, controller: emailController, decoration: const InputDecoration( prefixIcon: Icon( Icons.email, color: greyColor, ), border: OutlineInputBorder( borderSide: BorderSide(color: greyColor)), focusedBorder: OutlineInputBorder( borderSide: BorderSide(color: greyColor), ), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: greyColor), ), labelText: 'Email', labelStyle: TextStyle( color: greyColor, //<-- SEE HERE ), ), ), ), ], ), ), actions: [ Container( width: 400, height: 50, padding: const EdgeInsets.fromLTRB(10, 0, 10, 0), child: ElevatedButton( style: ElevatedButton.styleFrom( primary: primaryColor, // background onPrimary: Colors.white, // foreground ), onPressed: () async{ await Navigator.push( context, MaterialPageRoute( builder: (context) => const Login()), ); }, child: const Text('OK'), )), /* Padding( // padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 16 ), padding: EdgeInsets.only(left:75, bottom: 20, right: 70, top:10), child: TextFormField( cursorColor: greyColor, controller: nameController, decoration: const InputDecoration( border: UnderlineInputBorder(), labelText: 'Enter your username', ), ), ),*/ ], ); }); }, ); } }