import 'package:flutter/material.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:watermanagement/google_maps_place_picker_mb/google_maps_place_picker.dart'; import 'package:watermanagement/keys.dart'; import 'package:watermanagement/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; import 'google_maps_place_picker_mb/src/models/pick_result.dart'; import 'google_maps_place_picker_mb/src/place_picker.dart'; class SignIn extends StatefulWidget { const SignIn({super.key}); @override State createState() => _SignInState(); } class _SignInState extends State { bool isPwdObscureText=true; bool isConfirmPwdObscureText = true; TextEditingController nameController = TextEditingController(); TextEditingController supplierId = TextEditingController(); TextEditingController emailController = TextEditingController(); TextEditingController mobileNumberController = TextEditingController(); TextEditingController altermobileNumberController = TextEditingController(); TextEditingController userAddressDescriptionController = TextEditingController(); TextEditingController userAddressCapturingController = TextEditingController(); TextEditingController passwordController = TextEditingController(); TextEditingController confirmPasswordController = TextEditingController(); String _currentAddress =''; String address1 = ''; String address2 = ''; String city = ''; String state = ''; String zip = ''; String country = ''; 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; }); } @override void initState() { isPwdObscureText = true; isConfirmPwdObscureText = true; super.initState(); } 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(""), fit: BoxFit.cover, ), ),*/ ), GestureDetector( onTap: () { FocusManager.instance.primaryFocus?.unfocus(); }, child: SafeArea( child: SingleChildScrollView( child: Column( children: [ SizedBox( height: 15, ), Container( //width: double.infinity, child: Image( image: const AssetImage('images/loginpng.png'), height: MediaQuery.of(context).size.height * .18, )), SizedBox( height: 05, ), Container( padding: const EdgeInsets.all(10), child: TextFormField( cursorColor: greyColor, controller: nameController, textCapitalization: TextCapitalization.sentences, 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: 'Supplier Name', labelStyle: TextStyle( color: greyColor, //<-- SEE HERE ), ), ), ), //name const SizedBox( height: 5, ), Container( padding: const EdgeInsets.all(10), child: TextFormField( cursorColor: greyColor, controller: emailController, keyboardType: TextInputType.emailAddress, 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: 'Enter your email', labelStyle: TextStyle( color: greyColor, //<-- SEE HERE ), ), ), ), //email const SizedBox( height: 5, ), Container( padding: const EdgeInsets.all(10), child: TextFormField( cursorColor: greyColor, controller: mobileNumberController, keyboardType: TextInputType.phone, maxLength: 10, decoration: const InputDecoration( prefixIcon: Icon( Icons.phone_android, color: greyColor, ), border: OutlineInputBorder( borderSide: BorderSide(color: greyColor)), focusedBorder: OutlineInputBorder( borderSide: BorderSide(color: greyColor), ), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: greyColor), ), labelText: 'Enter Mobile Number', labelStyle: TextStyle( color: greyColor, //<-- SEE HERE ), ), ), ), //mobile const SizedBox( height: 5, ), Container( padding: const EdgeInsets.all(10), child: TextFormField( cursorColor: greyColor, controller: userAddressDescriptionController, keyboardType: TextInputType.emailAddress, decoration: const InputDecoration( prefixIcon: Icon( Icons.plagiarism_outlined, color: greyColor, ), border: OutlineInputBorder( borderSide: BorderSide(color: greyColor)), focusedBorder: OutlineInputBorder( borderSide: BorderSide(color: greyColor), ), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: greyColor), ), labelText: 'Address Description (Ex: Flat No)', labelStyle: TextStyle( color: greyColor, //<-- SEE HERE ), ), ), ),//address description const SizedBox( height: 5, ), 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; 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: false, decoration: const InputDecoration( prefixIcon: Icon( Icons.location_on_rounded, color: greyColor, ), border: OutlineInputBorder( borderSide: BorderSide(color: greyColor)), focusedBorder: OutlineInputBorder( borderSide: BorderSide(color: greyColor), ), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: greyColor), ), labelText: 'Pic Your office Address', labelStyle: TextStyle( color: greyColor, //<-- SEE HERE ), ), ), ), /* onTap: () { },*///address ),//address capturing const SizedBox( height: 5, ), Container( padding: const EdgeInsets.all(10), child: TextFormField( cursorColor: greyColor, obscureText: isPwdObscureText, controller: passwordController, decoration: InputDecoration( labelText: 'Create Password', prefixIcon: const Icon( Icons.lock, color: greyColor, ), labelStyle: const TextStyle( color: greyColor, //<-- SEE HERE ), border: const OutlineInputBorder( borderSide: BorderSide(color: greyColor)), focusedBorder: const OutlineInputBorder( borderSide: BorderSide(color: greyColor), ), enabledBorder: const OutlineInputBorder( borderSide: BorderSide(color: textFieldStartColor), ), suffixIcon: IconButton( icon: Icon( Icons.visibility_off_outlined, color: isPwdObscureText?greyColor:primaryColor, ), onPressed: () { setState(() { isPwdObscureText = !isPwdObscureText; }); }, ), ), ), ), //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: primaryColor, // background onPrimary: Colors.white, // foreground ), onPressed: () async { if (nameController.text != '' && passwordController.text != '' && mobileNumberController.text != '') { AppSettings.preLoaderDialog(context); var payload = new Map(); payload["suppliername"] = nameController.text.toString(); payload["password"] = passwordController.text.toString(); payload["phone"] = mobileNumberController.text.toString(); payload["alternativeContactNumber"] = altermobileNumberController.text.toString(); payload["emails"] = [ {"email": emailController.text.toString()} ]; payload["firstName"] = ''; payload["lastName"] = ''; payload["office_address"] = userAddressCapturingController.text; payload["address2"] = address2; payload["city"] = city; payload["state"] = state; payload["zip"] = zip; payload["country"] = country; payload["notes"] = ''; bool signUpStatus = await AppSettings.signUp(payload); try { if (signUpStatus) { var phoneVerifyPayload = new Map(); phoneVerifyPayload["phoneVerificationCode"] = "11111"; phoneVerifyPayload["phone"] = mobileNumberController.text.toString(); bool verifyPhnStatus = await AppSettings.verifyPhn(phoneVerifyPayload); if (verifyPhnStatus) { Navigator.of(context, rootNavigator: true).pop(); AppSettings.longSuccessToast( "User SignUp Successfully"); // showUserSignUSuccessDialog(); await Navigator.push( context, MaterialPageRoute( builder: (context) => const Login()), ); } else { Navigator.of(context, rootNavigator: true).pop(); AppSettings.longFailedToast( "Phone verification failed"); } } 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 { AppSettings.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: primaryColor, ), ), TextButton( child: const Text( 'Login?', style: TextStyle( fontSize: 20, color: greyColor, decoration: TextDecoration.underline, ), ), onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (context) => const Login()), ); }, ) ], ), ], ), )), ), ])), ); } /*showUserSignUSuccessDialog() async { custmerid.text=AppSettings.customerIdsign; 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:custmerid, 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 SignIn()), ); }, 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', ), ), ),*//* ], ); }); }, ); }*/ }