From cd1f2519872411dbc7355f332b5c8c23a9969af1 Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Fri, 15 Sep 2023 19:38:46 +0300 Subject: [PATCH] 9/15/1 --- .../auth/captin/login_captin_controller.dart | 3 +- .../captin/register_captin_controller.dart | 99 ++++++ lib/main.dart | 13 +- lib/views/auth/captin/login_captin.dart | 5 +- lib/views/auth/captin/register_captin.dart | 286 +++++++++++++++++- 5 files changed, 389 insertions(+), 17 deletions(-) create mode 100644 lib/controller/auth/captin/register_captin_controller.dart diff --git a/lib/controller/auth/captin/login_captin_controller.dart b/lib/controller/auth/captin/login_captin_controller.dart index c3ffcc1..754891e 100644 --- a/lib/controller/auth/captin/login_captin_controller.dart +++ b/lib/controller/auth/captin/login_captin_controller.dart @@ -10,6 +10,7 @@ import 'package:ride/controller/functions/crud.dart'; import 'package:ride/controller/functions/secure_storage.dart'; import 'package:ride/main.dart'; import 'package:ride/views/auth/verify_email_page.dart'; +import 'package:ride/views/home/Captin/home_captin.dart'; import 'package:ride/views/home/map_page.dart'; class LoginCaptinController extends GetxController { @@ -59,7 +60,7 @@ class LoginCaptinController extends GetxController { box.write(BoxName.phoneDriver, jsonDecoeded['data'][0]['phone']); SecureStorage() .saveData(BoxName.passwordDriver, passwordController.text); - Get.offAll(() => const MapPage()); + Get.offAll(() => const HomeCaptin()); isloading = false; update(); print(box.read(BoxName.driverID).toString()); diff --git a/lib/controller/auth/captin/register_captin_controller.dart b/lib/controller/auth/captin/register_captin_controller.dart new file mode 100644 index 0000000..3c71a5f --- /dev/null +++ b/lib/controller/auth/captin/register_captin_controller.dart @@ -0,0 +1,99 @@ +import 'dart:convert'; +import 'dart:math'; + +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:ride/constant/links.dart'; +import 'package:ride/controller/functions/crud.dart'; +import 'package:ride/views/auth/captin/login_captin.dart'; + +import '../../../views/auth/verify_email_page.dart'; + +class RegisterCaptinController extends GetxController { + final formKey = GlobalKey(); + + TextEditingController firstNameController = TextEditingController(); + TextEditingController lastNameController = TextEditingController(); + TextEditingController emailController = TextEditingController(); + TextEditingController phoneController = TextEditingController(); + TextEditingController passwordController = TextEditingController(); + TextEditingController siteController = TextEditingController(); + TextEditingController verifyCode = TextEditingController(); + + String birthDate = 'Birth Date'.tr; + String gender = 'Male'.tr; + bool isloading = false; + @override + void onInit() { + super.onInit(); + } + + getBirthDate() { + Get.defaultDialog( + title: 'Select Date'.tr, + content: SizedBox( + width: 300, + child: CalendarDatePicker( + initialDate: DateTime.now().subtract(const Duration(days: 18 * 365)), + firstDate: DateTime.parse('1940-06-01'), + lastDate: DateTime.now().subtract(const Duration(days: 18 * 365)), + onDateChanged: (date) { + // Get the selected date and convert it to a DateTime object + DateTime dateTime = date; + // Call the getOrders() function from the controller + birthDate = dateTime.toString().split(' ')[0]; + update(); + Get.back(); + }, + + // onDateChanged: (DateTime value) {}, + ), + ), + ); + } + + void changeGender(String value) { + gender = value; + update(); + } + + sendverfications() async { + var res = await CRUD().post(link: AppLink.verifyEmail, payload: { + 'email': emailController.text, + 'token': verifyCode.text, + }); + + if (res != 'failure') { + Get.offAll(() => LoginCaptin()); + } + } + + void register() async { + if (formKey.currentState!.validate()) { + isloading = true; + update(); + var res = await CRUD().post(link: AppLink.signUpCaptin, payload: { + 'first_name': firstNameController.text, + 'last_name': lastNameController.text, + 'email': emailController.text, + 'phone': phoneController.text, + 'password': passwordController.text, + 'gender': gender, + 'site': siteController.text, + 'birthdate': birthDate, + }); + print(jsonDecode(res)); + isloading = false; + update(); + if (jsonDecode(res)['status'] == 'success') { + print('sdfffffffffff'); + int randomNumber = Random().nextInt(100000) + 1; + await CRUD().post(link: AppLink.sendVerifyEmail, payload: { + 'email': emailController.text, + 'token': randomNumber.toString(), + }).then((value) => print(value)); + Get.to(() => const VerifyEmailPage()); + } + } + } +} diff --git a/lib/main.dart b/lib/main.dart index 3b831dc..69a0f6f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -68,13 +68,10 @@ class MyApp extends StatelessWidget { theme: controller.appTheme, key: UniqueKey(), // routes: {'/':const HomePage()}, - home: box.read(BoxName.lang).toString() != 'ar' && - box.read(BoxName.lang).toString() != 'en' - ? const Language() - : box.read(BoxName.email) != null - ? const MapPage() - : box.read(BoxName.emailDriver) == null - ? LoginPage() - : const HomeCaptin()); + home: box.read(BoxName.email) != null + ? const MapPage() + : box.read(BoxName.emailDriver) == null + ? LoginPage() + : const HomeCaptin()); } } diff --git a/lib/views/auth/captin/login_captin.dart b/lib/views/auth/captin/login_captin.dart index 2730efa..d037efc 100644 --- a/lib/views/auth/captin/login_captin.dart +++ b/lib/views/auth/captin/login_captin.dart @@ -6,6 +6,7 @@ import 'package:ride/constant/colors.dart'; import 'package:ride/constant/style.dart'; import 'package:ride/controller/auth/captin/login_captin_controller.dart'; import 'package:ride/main.dart'; +import 'package:ride/views/auth/captin/register_captin.dart'; import 'package:ride/views/widgets/elevated_btn.dart'; import 'package:ride/views/widgets/my_scafold.dart'; @@ -171,10 +172,10 @@ class LoginCaptin extends StatelessWidget { style: AppStyle.subtitle, ), AnimatedTextKit( - onTap: () => Get.to(() => const RegisterPage()), + onTap: () => Get.to(() => const RegisterCaptin()), animatedTexts: [ TypewriterAnimatedText( - 'Register'.tr, + 'Register Captin'.tr, textStyle: AppStyle.headtitle2, speed: const Duration(milliseconds: 200), ), diff --git a/lib/views/auth/captin/register_captin.dart b/lib/views/auth/captin/register_captin.dart index 7272114..6c8c2a5 100644 --- a/lib/views/auth/captin/register_captin.dart +++ b/lib/views/auth/captin/register_captin.dart @@ -1,16 +1,290 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:ride/constant/style.dart'; +import 'package:ride/controller/auth/captin/register_captin_controller.dart'; +import 'package:ride/views/widgets/elevated_btn.dart'; +import 'package:ride/views/widgets/my_scafold.dart'; +import 'package:ride/views/widgets/mycircular.dart'; + +import '../../../constant/colors.dart'; class RegisterCaptin extends StatelessWidget { const RegisterCaptin({super.key}); @override Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text('Register Captin'.tr), - ), - body: Container(), - ); + Get.put(RegisterCaptinController()); + return MyScafolld( + title: 'Register Captin'.tr, + body: [ + GetBuilder( + builder: (controller) => Form( + key: controller.formKey, + child: Padding( + padding: const EdgeInsets.all(16.0), + child: SingleChildScrollView( + child: Container( + decoration: const BoxDecoration( + boxShadow: [ + BoxShadow( + offset: Offset(3, 3), + color: AppColor.accentColor, + blurRadius: 3) + ], + color: AppColor.secondaryColor, + ), + child: Padding( + padding: const EdgeInsets.all(16), + child: Column(children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + SizedBox( + width: Get.width * .4, + child: TextFormField( + keyboardType: TextInputType.text, + controller: controller.firstNameController, + decoration: InputDecoration( + focusedBorder: OutlineInputBorder( + borderSide: const BorderSide( + color: AppColor.primaryColor, + width: 2.0, + ), + borderRadius: BorderRadius.circular(10), + ), + fillColor: AppColor.accentColor, + hoverColor: AppColor.accentColor, + focusColor: AppColor.accentColor, + border: const OutlineInputBorder( + borderRadius: BorderRadius.all( + Radius.circular(12))), + labelText: 'First name'.tr, + hintText: 'Enter your first name'.tr, + ), + validator: (value) { + if (value!.isEmpty) { + return 'Please enter your first name.'.tr; + } + return null; + }, + ), + ), + SizedBox( + width: Get.width * .4, + child: TextFormField( + keyboardType: TextInputType.text, + controller: controller.lastNameController, + decoration: InputDecoration( + focusedBorder: OutlineInputBorder( + borderSide: const BorderSide( + color: AppColor.primaryColor, + width: 2.0, + ), + borderRadius: BorderRadius.circular(10), + ), + focusColor: AppColor.accentColor, + fillColor: AppColor.accentColor, + border: const OutlineInputBorder( + borderRadius: BorderRadius.all( + Radius.circular(12))), + labelText: 'Last name'.tr, + hintText: 'Enter your last name'.tr, + ), + validator: (value) { + if (value!.isEmpty) { + return 'Please enter your last name.'.tr; + } + return null; + }, + ), + ), + ], + ), + const SizedBox( + height: 15, + ), + TextFormField( + keyboardType: TextInputType.emailAddress, + controller: controller.emailController, + decoration: InputDecoration( + focusedBorder: OutlineInputBorder( + borderSide: const BorderSide( + color: AppColor.primaryColor, + width: 2.0, + ), + borderRadius: BorderRadius.circular(10), + ), + fillColor: AppColor.accentColor, + hoverColor: AppColor.accentColor, + focusColor: AppColor.accentColor, + border: const OutlineInputBorder( + borderRadius: + BorderRadius.all(Radius.circular(12))), + labelText: 'Email'.tr, + hintText: 'Enter your email address'.tr, + ), + validator: (value) { + if (value!.isEmpty || + (!value.contains('@') || + !value.contains('.'))) { + return 'Please enter Your Email.'.tr; + } + return null; + }, + ), + const SizedBox( + height: 15, + ), + TextFormField( + obscureText: true, + keyboardType: TextInputType.emailAddress, + controller: controller.passwordController, + decoration: InputDecoration( + focusedBorder: OutlineInputBorder( + borderSide: const BorderSide( + color: AppColor.primaryColor, + width: 2.0, + ), + borderRadius: BorderRadius.circular(10), + ), + fillColor: AppColor.accentColor, + hoverColor: AppColor.accentColor, + focusColor: AppColor.accentColor, + border: const OutlineInputBorder( + borderRadius: + BorderRadius.all(Radius.circular(12))), + labelText: 'Password'.tr, + hintText: 'Enter your Password'.tr, + ), + validator: (value) { + if (value!.isEmpty || (value.length > 6)) { + return 'Please enter Your Password.'.tr; + } + return null; + }, + ), + const SizedBox( + height: 15, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + SizedBox( + width: Get.width * .4, + child: TextFormField( + keyboardType: TextInputType.phone, + cursorColor: AppColor.accentColor, + controller: controller.phoneController, + decoration: InputDecoration( + focusedBorder: OutlineInputBorder( + borderSide: const BorderSide( + color: AppColor.primaryColor, + width: 2.0, + ), + borderRadius: BorderRadius.circular(10), + ), + focusColor: AppColor.accentColor, + fillColor: AppColor.accentColor, + border: const OutlineInputBorder( + borderRadius: BorderRadius.all( + Radius.circular(12))), + labelText: 'Phone'.tr, + hintText: 'Enter your phone number'.tr, + ), + validator: (value) { + if (value!.isEmpty || value.length != 10) { + return 'Please enter your phone number.'.tr; + } + return null; + }, + ), + ), + SizedBox( + width: Get.width * .4, + child: TextFormField( + keyboardType: TextInputType.text, + controller: controller.siteController, + decoration: InputDecoration( + focusedBorder: OutlineInputBorder( + borderSide: const BorderSide( + color: AppColor.primaryColor, + width: 2.0, + ), + borderRadius: BorderRadius.circular(10), + ), + focusColor: AppColor.accentColor, + fillColor: AppColor.accentColor, + border: const OutlineInputBorder( + borderRadius: BorderRadius.all( + Radius.circular(12))), + labelText: 'City'.tr, + hintText: 'Enter your City'.tr, + ), + validator: (value) { + if (value!.isEmpty) { + return 'Please enter your City.'.tr; + } + return null; + }, + ), + ), + ], + ), + const SizedBox( + height: 15, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + InkWell( + onTap: () => controller.getBirthDate(), + child: Container( + height: 50, + width: Get.width * .4, + decoration: BoxDecoration( + border: Border.all(), + borderRadius: BorderRadius.circular(13)), + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 20), + child: Text( + controller.birthDate, + style: AppStyle.title, + ), + ), + ), + ), + DropdownButton( + value: controller.gender, + items: [ + DropdownMenuItem( + value: 'Male', + child: Text('Male'.tr), + ), + DropdownMenuItem( + value: 'Female', + child: Text('Female'.tr), + ), + ], + onChanged: (value) { + controller.changeGender(value!); + }, + ) + ], + ), + controller.isloading + ? const MyCircularProgressIndicator() + : MyElevatedButton( + title: 'Register Captin'.tr, + onPressed: () => controller.register()) + ]), + ), + ), + ), + ), + ), + ) + ], + isleading: true); } }