Aidra Connect 10.0.2+16
Aidra Connect Mobile Application
Loading...
Searching...
No Matches
signin_form_view.dart
Go to the documentation of this file.
1import 'package:connect/core/localization/app_localizations.dart';
2import 'package:connect/features/authentication/domain/entities/credentials_entity.dart';
3import 'package:flutter/material.dart';
4import 'package:flutter_bloc/flutter_bloc.dart';
5import 'package:flutter_screenutil/flutter_screenutil.dart';
6import 'package:flutter_svg/svg.dart';
7import 'package:hugeicons/hugeicons.dart';
8
9import '../../../../../../core/constants/assets.dart';
10import '../../../../../../core/ui/widgets/custom_text_form_field.dart';
11import '../../../logic/authentication_bloc/authentication_bloc.dart';
12import '../widgets/terms_and_conditions_checkbox.dart';
13
14class SignInFormView extends StatefulWidget {
15 const SignInFormView({super.key});
16
17 @override
18 State<SignInFormView> createState() => _SignInFormViewState();
19}
20
21class _SignInFormViewState extends State<SignInFormView> {
22 bool _isObscure = true;
23 bool _isCheked = true;
24 final _emailController = TextEditingController();
25 final _passwordController = TextEditingController();
26 final _formKey = GlobalKey<FormState>();
27
28 @override
29 void initState() {
30 super.initState();
31 context.read<AuthenticationBloc>().add(LoadEmailEvent());
32 }
33
35 if (_formKey.currentState!.validate()) {
36 context.read<AuthenticationBloc>().add(
39 email: _emailController.text.trim(),
40 password: _passwordController.text.trim(),
41 ),
42 ),
43 );
44 }
45 }
46
47 @override
48 Widget build(BuildContext context) {
49 return BlocListener<AuthenticationBloc, AuthenticationState>(
50 listener: (context, state) {
51 if (state is EmailLoadedState) {
52 _emailController.text = state.email ?? '';
53 }
54 },
55 child: SingleChildScrollView(
56 padding: EdgeInsets.symmetric(
57 horizontal: 10.sp,
58 vertical: 15.sp,
59 ),
60 child: Form(
61 key: _formKey,
62 child: Column(
63 children: [
64 Padding(
65 padding: EdgeInsets.symmetric(vertical: 20.sp),
66 child: SvgPicture.asset(
68 colorFilter: ColorFilter.mode(
69 Theme.of(context).colorScheme.onSurface,
70 BlendMode.srcIn,
71 ),
72 height: 50.sp,
73 ),
74 ),
75 Padding(
76 padding: EdgeInsets.all(15.sp),
77 child: Column(
78 crossAxisAlignment: CrossAxisAlignment.center,
79 children: [
80 CustomTextFormField(
81 hintText: AppLocalizations.of(context)
82 .translate('Email Address'),
83 labelText: AppLocalizations.of(context)
84 .translate('Email Address'),
85 inputType: TextInputType.emailAddress,
86 controller: _emailController,
87 suffix: const Icon(HugeIcons.strokeRoundedMail02),
88 validator: (value) {
89 if (value == null || value.isEmpty) {
90 return AppLocalizations.of(context)
91 .translate('Email is required');
92 }
93 return null;
94 },
95 ),
96 SizedBox(height: 15.sp),
97 CustomTextFormField(
98 hintText:
99 AppLocalizations.of(context).translate('Password'),
100 labelText:
101 AppLocalizations.of(context).translate('Password'),
102 controller: _passwordController,
103 isObscure: _isObscure,
104 validator: (value) {
105 if (value == null || value.isEmpty) {
106 return AppLocalizations.of(context)
107 .translate('Password is required');
108 }
109 return null;
110 },
111 suffix: InkWell(
112 onTap: () {
113 setState(() {
115 });
116 },
117 child: Icon(
119 ? HugeIcons.strokeRoundedViewOffSlash
120 : HugeIcons.strokeRoundedView,
121 ),
122 ),
123 ),
124 SizedBox(height: 40.sp),
125 TermsAndConditionsCheckbox(
126 isChecked: _isCheked,
127 onCheckStatuschanged: (value) {
128 setState(() {
130 });
131 },
132 ),
133 SizedBox(height: 34.sp),
134 SizedBox(
135 width: MediaQuery.of(context).size.width,
136 child: ElevatedButton(
137 onPressed: _isCheked ? _onSignInButtonClicked : null,
138 child: Text(
139 AppLocalizations.of(context).translate('LOG IN'),
140 ),
141 ),
142 ),
143 ],
144 ),
145 ),
146 ],
147 ),
148 ),
149 ),
150 );
151 }
152}
AppLocalizations(this.locale)
const SignInEvent({required this.reqEntity})
sealed class AuthenticationEvent extends Equatable reqEntity
String translate(String key)
static AppLocalizations of(BuildContext context)
static const String headerLogo
Definition assets.dart:12
const SignInFormView({super.key})
override State< SignInFormView > createState()
final Widget child
final EdgeInsets padding
override void initState()
final VoidCallback onTap
override Widget build(BuildContext context)
final _emailController
final double value
class SignInFormView extends StatefulWidget _isObscure
void _onSignInButtonClicked()
final _passwordController
bool _isCheked