Files
Fondex-Driver/lib/app/auth_screen/phone_number_screen.dart
2025-12-08 23:25:00 +05:00

178 lines
8.1 KiB
Dart
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'dart:io';
import 'package:country_code_picker/country_code_picker.dart';
import 'package:driver/app/auth_screen/login_screen.dart';
import 'package:driver/app/auth_screen/signup_screen.dart';
import 'package:driver/constant/show_toast_dialog.dart';
import 'package:driver/controllers/phone_number_controller.dart';
import 'package:driver/themes/app_them_data.dart';
import 'package:driver/themes/responsive.dart';
import 'package:driver/themes/text_field_widget.dart';
import 'package:driver/themes/theme_controller.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';
import '../../constant/constant.dart';
class PhoneNumberScreen extends StatelessWidget {
const PhoneNumberScreen({super.key});
@override
Widget build(BuildContext context) {
final themeController = Get.find<ThemeController>();
final isDark = themeController.isDark.value;
return GetX(
init: PhoneNumberController(),
builder: (controller) {
return Scaffold(
appBar: AppBar(
backgroundColor: isDark ? AppThemeData.surfaceDark : AppThemeData.surface,
),
body: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Log In Using Your Mobile Number".tr,
style: TextStyle(color: isDark ? AppThemeData.grey50 : AppThemeData.grey900, fontSize: 22, fontFamily: AppThemeData.semiBold),
),
Text(
"Enter your mobile number to quickly access your account and start managing your deliveries.".tr,
style: TextStyle(color: isDark ? AppThemeData.grey50 : AppThemeData.grey500, fontFamily: AppThemeData.regular),
),
const SizedBox(
height: 10,
),
Text.rich(
TextSpan(
children: [
TextSpan(
text: 'Didnt Have an account?'.tr,
style: TextStyle(
color: isDark ? AppThemeData.grey50 : AppThemeData.grey900,
fontFamily: AppThemeData.medium,
fontWeight: FontWeight.w500,
)),
const WidgetSpan(
child: SizedBox(
width: 10,
)),
TextSpan(
recognizer: TapGestureRecognizer()
..onTap = () {
Get.to(const SignupScreen());
},
text: 'Sign up'.tr,
style: TextStyle(
color: AppThemeData.primary300,
fontFamily: AppThemeData.medium,
fontWeight: FontWeight.w500,
decoration: TextDecoration.underline,
decorationColor: AppThemeData.primary300)),
],
),
),
const SizedBox(
height: 32,
),
TextFieldWidget(
title: 'Phone Number'.tr,
controller: controller.phoneNUmberEditingController.value,
hintText: 'Enter Phone Number'.tr,
textInputType: const TextInputType.numberWithOptions(signed: true, decimal: true),
textInputAction: TextInputAction.done,
inputFormatters: [
FilteringTextInputFormatter.allow(RegExp('[0-9]')),
],
prefix: CountryCodePicker(
onChanged: (value) {
controller.countryCodeEditingController.value.text = value.dialCode ?? Constant.defaultCountryCode;
},
dialogTextStyle: TextStyle(color: isDark ? AppThemeData.grey50 : AppThemeData.grey900, fontWeight: FontWeight.w500, fontFamily: AppThemeData.medium),
dialogBackgroundColor: isDark ? AppThemeData.grey800 : AppThemeData.grey100,
initialSelection: controller.countryCodeEditingController.value.text,
comparator: (a, b) => b.name!.compareTo(a.name.toString()),
textStyle: TextStyle(fontSize: 14, color: isDark ? AppThemeData.grey50 : AppThemeData.grey900, fontFamily: AppThemeData.medium),
searchDecoration: InputDecoration(iconColor: isDark ? AppThemeData.grey50 : AppThemeData.grey900),
searchStyle: TextStyle(color: isDark ? AppThemeData.grey50 : AppThemeData.grey900, fontWeight: FontWeight.w500, fontFamily: AppThemeData.medium),
),
),
],
),
),
bottomNavigationBar: Column(
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: EdgeInsets.symmetric(vertical: Platform.isAndroid ? 10 : 30),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text.rich(
TextSpan(
children: [
TextSpan(
text: 'Log in with'.tr,
style: TextStyle(
color: isDark ? AppThemeData.grey50 : AppThemeData.grey900,
fontFamily: AppThemeData.medium,
fontWeight: FontWeight.w500,
)),
const WidgetSpan(
child: SizedBox(
width: 10,
)),
TextSpan(
recognizer: TapGestureRecognizer()
..onTap = () {
Get.offAll(const LoginScreen());
},
text: 'E-mail'.tr,
style: TextStyle(
color: AppThemeData.primary300,
fontFamily: AppThemeData.medium,
fontWeight: FontWeight.w500,
decoration: TextDecoration.underline,
decorationColor: AppThemeData.primary300)),
],
),
),
],
),
),
InkWell(
onTap: () {
if (controller.phoneNUmberEditingController.value.text.isEmpty) {
ShowToastDialog.showToast("Please enter mobile number".tr);
} else {
controller.sendCode();
}
},
child: Container(
color: AppThemeData.primary300,
width: Responsive.width(100, context),
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 16),
child: Text(
"Send Code".tr,
textAlign: TextAlign.center,
style: TextStyle(
color: isDark ? AppThemeData.grey50 : AppThemeData.grey50,
fontSize: 16,
fontFamily: AppThemeData.medium,
fontWeight: FontWeight.w400,
),
),
),
),
),
],
),
);
});
}
}