Skip to content

Commit

Permalink
chore: handle email and phone text inpiuts on auth page
Browse files Browse the repository at this point in the history
  • Loading branch information
ice-hector committed Dec 21, 2023
1 parent 4fb5c8f commit 307ae74
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 2 deletions.
32 changes: 30 additions & 2 deletions lib/app/features/auth/views/pages/auth_page/auth_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@ import 'package:ice/app/extensions/theme_data.dart';
import 'package:ice/app/features/auth/data/models/auth_state.dart';
import 'package:ice/app/features/auth/providers/auth_provider.dart';
import 'package:ice/app/features/auth/providers/ui_auth_provider.dart';
import 'package:ice/app/features/auth/views/pages/auth_page/controllers/email_controller.dart';
import 'package:ice/app/features/auth/views/pages/auth_page/controllers/phone_number_controller.dart';
import 'package:ice/app/shared/widgets/auth_header/auth_header.dart';
import 'package:ice/app/shared/widgets/button/button.dart';
import 'package:ice/app/shared/widgets/email_input.dart';
import 'package:ice/app/shared/widgets/inputs/text_fields.dart';
import 'package:ice/app/shared/widgets/modal_wrapper.dart';
import 'package:ice/app/shared/widgets/secured_by/secured_by.dart';
import 'package:ice/app/shared/widgets/socials/socials.dart';
Expand Down Expand Up @@ -38,6 +40,9 @@ class AuthPage extends HookConsumerWidget {
final bool isEmailMode = ref.watch(isEmailModeProvider);
final GlobalKey<FormState> emailFormKey = GlobalKey<FormState>();

final EmailController emailController = EmailController();
final PhoneNumberController numberController = PhoneNumberController();

return Scaffold(
body: Container(
margin: const EdgeInsets.symmetric(horizontal: kDefaultPadding),
Expand All @@ -47,7 +52,30 @@ class AuthPage extends HookConsumerWidget {
title: 'Get started',
description: 'Choose your login method',
),
EmailInput(formKey: emailFormKey),
// EmailInput(formKey: emailFormKey),
if (isEmailMode)
InputField(
leadingIcon: Image.asset(
Assets.images.fieldEmail.path,
color: context.theme.appColors.primaryText,
),
label: 'Email address',
controller: emailController.controller,
validator: (String? value) => emailController.onVerify(),
showLeadingSeparator: true,
),
if (!isEmailMode)
InputField(
leadingIcon: Image.asset(
Assets.images.fieldEmail.path,
color: context.theme.appColors.primaryText,
),
label: 'Phone number',
controller: numberController.controller,
validator: (String? value) => numberController.onVerify(),
showLeadingSeparator: true,
),

const SizedBox(
height: 16,
),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import 'package:flutter/cupertino.dart';

const String pattern =
r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$';

class EmailController {
final GlobalKey<FormState> formKey = GlobalKey<FormState>();
final RegExp regex = RegExp(pattern);
final TextEditingController controller = TextEditingController();

String errorMessage = '';

String? onVerify() {
final String trimmedEmail = controller.text.trim();

if (!regex.hasMatch(trimmedEmail)) {
errorMessage = 'Enter a valid email address';
}

return errorMessage.isEmpty ? null : errorMessage;
}

void dispose() {
controller.dispose();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import 'package:flutter/cupertino.dart';

class PhoneNumberController {
final GlobalKey<FormState> formKey = GlobalKey<FormState>();

final TextEditingController controller = TextEditingController();

String errorMessage = '';

String? onVerify() {
//TODO: validate phone number locally here
return null;
}

void dispose() {
controller.dispose();
}
}
Empty file.

0 comments on commit 307ae74

Please sign in to comment.