sapaly_store/lib/features/screens/auth/register_screen.dart

180 lines
6.4 KiB
Dart

import 'package:adaptix/adaptix.dart';
import 'package:flutter/material.dart';
import 'package:sapaly_shop/features/screens/auth/login/login_screen.dart';
import 'package:sapaly_shop/features/services/auth_service.dart';
import 'package:sapaly_shop/features/services/page_navigator.dart';
import 'package:sapaly_shop/themes/app_theme.dart';
import '../../../common/custom_button.dart';
import '../../../common/widgets/custom_text_field.dart';
import '../../../constants/global_variables.dart';
import '../../../models/auth/register/register_request_model.dart';
class RegisterScreen extends StatefulWidget {
static const String routeName = '/register';
const RegisterScreen({super.key});
@override
State<RegisterScreen> createState() => _LoginScreenState();
}
class _LoginScreenState extends State<RegisterScreen> {
final TextEditingController emailController = TextEditingController();
final TextEditingController phoneController = TextEditingController();
final TextEditingController passwordController = TextEditingController();
final TextEditingController passwordConfirmationController =
TextEditingController();
final AuthService authService = AuthService();
final formKey = GlobalKey<FormState>();
void register() {
authService.register(
registerRequestModel: RegisterRequestModel(
email: emailController.text,
password: passwordController.text,
passwordConfirmation: passwordConfirmationController.text,
phone: phoneController.text,
),
context: context,
);
}
@override
void dispose() {
emailController.dispose();
phoneController.dispose();
passwordController.dispose();
passwordConfirmationController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
leading: Container(),
),
body: Align(
alignment: Alignment.center,
child: Container(
margin: EdgeInsets.symmetric(
vertical: GlobalVariables.verticalPadding(context) / 2,
horizontal: GlobalVariables.horizontalPadding(context),
),
padding: EdgeInsets.symmetric(
vertical: GlobalVariables.verticalPadding(context) / 2,
horizontal: GlobalVariables.horizontalPadding(context),
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.adaptedPx()),
border: Border.all(
width: 2.adaptedPx(),
color: AppTheme.blackColor.withOpacity(0.1),
),
),
height: GlobalVariables.deviceHeight(context) / 1.5,
child: Form(
key: formKey,
child: ListView(
physics: const BouncingScrollPhysics(),
children: [
Padding(
padding: EdgeInsets.symmetric(
vertical: 15.adaptedPx(),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset(
'assets/images/sapalyLogo.png',
),
SizedBox(width: 15.adaptedPx()),
Text(
GlobalVariables.kAppName,
style: Theme.of(context)
.primaryTextTheme
.bodyMedium
?.copyWith(
color: AppTheme.blackColor,
fontSize: 18.adaptedPx(),
fontWeight: FontWeight.w600,
),
)
],
),
),
Padding(
padding: EdgeInsets.symmetric(vertical: 15.adaptedPx()),
child: CustomTextField(
controller: emailController,
labelText: 'your_email',
hintText: 'enter_your_email_here',
obscureText: false,
inputType: TextInputType.emailAddress,
),
),
CustomTextField(
controller: phoneController,
labelText: 'your_phone_number',
hintText: '64283513',
obscureText: false,
inputType: TextInputType.phone,
),
Padding(
padding: EdgeInsets.symmetric(vertical: 15.adaptedPx()),
child: CustomTextField(
controller: passwordController,
labelText: 'your_password',
hintText: 'enter_your_password_here',
obscureText: true,
inputType: TextInputType.visiblePassword,
),
),
CustomTextField(
controller: passwordConfirmationController,
labelText: 'repeat_password',
hintText: 'repeat_password_to_confirm',
obscureText: true,
inputType: TextInputType.visiblePassword,
),
SizedBox(height: 20.adaptedPx()),
CustomButton(
name: 'register',
onTap: () async {
if (formKey.currentState!.validate()) {
register();
}
},
isMain: true,
backgroundColor: AppTheme.lightPrimaryColor,
),
Align(
alignment: Alignment.center,
child: Text(
'or',
textAlign: TextAlign.center,
style:
Theme.of(context).primaryTextTheme.bodyMedium?.copyWith(
color: AppTheme.blackColor,
fontSize: 14.adaptedPx(),
),
),
),
CustomButton(
name: 'login',
isMain: false,
onTap: () {
PageNavigator(ctx: context)
.nextPageOnly(page: LoginScreen());
},
backgroundColor: AppTheme.lightTextColor.withOpacity(0.150),
),
],
),
),
),
),
);
}
}