import 'package:car_for_her/config/SizeConfig.dart'; import 'package:car_for_her/config/palette.dart'; import 'package:car_for_her/config/styles.dart'; import 'package:car_for_her/singletons/profile_image.dart'; import 'package:car_for_her/widgets/profile_image_picker.dart'; import 'package:flutter/material.dart'; import 'package:toast/toast.dart'; class DriverSignUp extends StatefulWidget { DriverSignUp({Key key}) : super(key: key); @override _DriverSignUpState createState() => _DriverSignUpState(); } class _DriverSignUpState extends State { bool isMale = false; bool isFemale = false; bool isOther=false; bool noGender = false; bool selectedGender; String gender; void setGender() { if (isMale) { gender = "Male"; } else if (isFemale) { gender = "Female"; }else if(isOther){ gender="Other"; } else { gender = "none"; } setState(() { noGender = false; }); } GlobalKey _globalKey = GlobalKey(); String fullName = ""; TextEditingController fullNameController = TextEditingController(); String phoneNumber = ""; TextEditingController phoneNumberController = TextEditingController(); String idCardNumber = ""; TextEditingController idCardNumberController = TextEditingController(); @override void dispose() { // TODO: implement dispose super.dispose(); imagePicked.image = null; } @override Widget build(BuildContext context) { return LayoutBuilder( builder: (context, constraints) { return OrientationBuilder( builder: (context, orientation) { SizeConfig().init(constraints, orientation); return GestureDetector( onTap: () { FocusScope.of(context).requestFocus(new FocusNode()); }, child: Scaffold( body: SingleChildScrollView( child: Column( children: [ Center( child: Padding( padding: EdgeInsets.fromLTRB( 0, 9.5 * SizeConfig.heightMultiplier, 0, 0), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( "Sign up", style: TextStyle( fontFamily: 'MontHeavy', fontSize: 5.43 * SizeConfig.heightMultiplier), ), SizedBox( height: 16 * SizeConfig.heightMultiplier, width: 32 * SizeConfig.widthMultiplier, child: ProfileImagePicker(), ), Text( "Your photo", style: TextStyle( fontFamily: 'MontExtraLight', fontSize: 2.7 * SizeConfig.textMultiplier), ), Padding( padding: EdgeInsets.fromLTRB( 5 * SizeConfig.widthMultiplier, 4.22 * SizeConfig.heightMultiplier, 5 * SizeConfig.widthMultiplier, 0), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Text( "Personal informations", style: TextStyle( fontSize: 1.844 * SizeConfig.textMultiplier, fontFamily: 'MontExtraLight', fontWeight: FontWeight.bold), ), Padding( padding: EdgeInsets.only( top: 1.35 * SizeConfig.heightMultiplier), child: Form( key: _globalKey, child: Column( children: [ Container( height: 8.560854505 * SizeConfig.heightMultiplier, width: 90.530612245 * SizeConfig.widthMultiplier, child: TextFormField( onChanged: (val) { setState(() { fullName = val; }); }, validator: (val) { if (val.isEmpty || val.length < 3) { return "Your full name must contain at least 3 characters"; } return null; }, controller: fullNameController, decoration: InputDecoration( errorBorder: AppTheme .textFormFieldErrorBorder, focusedErrorBorder: AppTheme .textFormFieldErrorBorder, hintText: "Your full name", focusedBorder: AppTheme .textFormFieldBorder, enabledBorder: AppTheme .textFormFieldBorder, hintStyle: AppTheme.hintTextStyle, ), ), ), Padding( padding: EdgeInsets.only( top: 1.35 * SizeConfig .heightMultiplier), child: Container( height: 8.560854505 * SizeConfig .heightMultiplier, width: 90.530612245 * SizeConfig .widthMultiplier, child: TextFormField( keyboardType: TextInputType.number, validator: (val) { if (val.isEmpty) { return "Phone number is required"; } else if (int.tryParse( val) == null) { return "Phone number must contain only digits"; } return null; }, onChanged: (val) { setState(() { phoneNumber = val; }); }, decoration: InputDecoration( errorBorder: AppTheme .textFormFieldErrorBorder, focusedErrorBorder: AppTheme .textFormFieldErrorBorder, hintText: "Phone number", focusedBorder: AppTheme .textFormFieldBorder, enabledBorder: AppTheme .textFormFieldBorder, hintStyle: AppTheme .hintTextStyle, ), ), ), ), Padding( padding: EdgeInsets.only( top: 1.35 * SizeConfig .heightMultiplier), child: Container( height: 8.560854505 * SizeConfig .heightMultiplier, width: 90.530612245 * SizeConfig .widthMultiplier, child: TextFormField( keyboardType: TextInputType.number, onChanged: (val) { setState(() { idCardNumber = val; }); }, validator: (val) { if (val.isEmpty) { return "Id must not be empty"; } else if (val .isNotEmpty && int.tryParse(val) == null) { return "Id card must contain only digits"; } return null; }, decoration: InputDecoration( errorBorder: AppTheme .textFormFieldErrorBorder, focusedErrorBorder: AppTheme .textFormFieldErrorBorder, hintText: "ID Card number", focusedBorder: AppTheme .textFormFieldBorder, enabledBorder: AppTheme .textFormFieldBorder, hintStyle: AppTheme .hintTextStyle, ), ), ), ), Container( margin: EdgeInsets.only( top: 1 * SizeConfig .heightMultiplier), height: 8.560854505 * SizeConfig.heightMultiplier, width: 90.530612245 * SizeConfig.widthMultiplier, decoration: BoxDecoration( border: Border.all( color: noGender ? Colors.red : Color.fromRGBO( 0, 0, 0, 0.5))), child: Padding( padding: EdgeInsets.all(1.0 * SizeConfig .imageSizeMultiplier), child: Row( mainAxisAlignment: MainAxisAlignment.start, children: [ SizedBox( width: 1*SizeConfig.widthMultiplier, ), FittedBox( child: Text( "I'am a...", style: TextStyle( fontFamily: 'MontExtraLight', fontWeight: FontWeight .bold), ), ), Checkbox( activeColor: Palette.primary, value: isMale, onChanged: (val) { setState(() { isMale = val; isFemale = false; isOther=false; setGender(); }); }), FittedBox( child: Text( "Male", style: TextStyle( fontFamily: 'MontExtraLight', fontWeight: FontWeight .bold), ), ), Checkbox( activeColor: Palette.primary, value: isFemale, onChanged: (val) { setState(() { isFemale = val; isMale = false; isOther=false; setGender(); }); }), Text( "Female", style: TextStyle( fontFamily: 'MontExtraLight', fontWeight: FontWeight .bold), ), Checkbox( activeColor: Palette.primary, value: isOther, onChanged: (val) { setState(() { isOther = val; isFemale = false; isMale=false; setGender(); }); }), FittedBox( child: Text( "Other", style: TextStyle( fontFamily: 'MontExtraLight', fontWeight: FontWeight .bold), )), ], ), ), ), Container( margin: EdgeInsets.only( top: 1.05 * SizeConfig .heightMultiplier), width: 77.77 * SizeConfig.textMultiplier, height: 6.587615283 * SizeConfig.heightMultiplier, color: Palette.primary, child: TextButton( onPressed: () { if(imagePicked.image==null){ Toast.show("Please select your profile image", context, duration: Toast.LENGTH_LONG, gravity: Toast.TOP, backgroundColor: Color.fromRGBO(255, 0, 0, 0.7)); } else if(!isMale && !isFemale && !isOther){ setState(() { noGender=true; }); } else if(_globalKey.currentState.validate() && (isMale || isFemale || isOther)==true && imagePicked!=null){ Navigator.pushNamed( context, '/driver_car_details'); imagePicked.image=null; } }, child: Text( "Continue", style: TextStyle( color: Colors.white, fontFamily: 'MontExtraLight', fontWeight: FontWeight.bold, fontSize: 3.04 * SizeConfig .textMultiplier), )), ) ], )), ), ], ), ), ], ), ), ), Stack( children: [ Positioned( child: Padding( padding: const EdgeInsets.only(right: 0, bottom: 0), child: Row( mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end, children: [ Text( "Sign up", style: TextStyle( color: Color.fromRGBO(0, 0, 0, 0.1), fontFamily: "MontHeavy", fontWeight: FontWeight.bold, fontSize: 6.75 * SizeConfig.textMultiplier), ) ], ), ), ), ], ), ], ), ), ), ); }, ); }, ); } }