Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 26 additions & 50 deletions sama_chat_client/lib/src/features/login/view/login_form.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import 'package:go_router/go_router.dart';

import '../../../navigation/constants.dart';
import '../../../shared/ui/colors.dart';
import '../../../shared/ui/view/text_field_form.dart';
import '../../../shared/ui/view/text_button_forms.dart';
import '../bloc/login_bloc.dart';
import '../models/models.dart';

Expand Down Expand Up @@ -193,21 +193,18 @@ class _PasswordInputState extends State<_PasswordInput> {
context.read<LoginBloc>().add(LoginPasswordChanged(password)),
iconData: Icons.lock_outline,
obscureText: isPasswordInvisible,
suffix: Padding(
padding: const EdgeInsets.only(right: 8),
child: IconButton(
onPressed: () {
setState(() {
isPasswordInvisible = !isPasswordInvisible;
});
},
icon: Icon(
isPasswordInvisible
? Icons.visibility_off_outlined
: Icons.visibility_outlined,
color: dullGray,
size: 20,
),
suffix: IconButton(
onPressed: () {
setState(() {
isPasswordInvisible = !isPasswordInvisible;
});
},
icon: Icon(
isPasswordInvisible
? Icons.visibility_off_outlined
: Icons.visibility_outlined,
color: dullGray,
size: 22,
),
),
hint: 'Password',
Expand Down Expand Up @@ -265,40 +262,19 @@ class _LoginButton extends StatelessWidget {
var isSignUpValid = state.isValidSignup && isSignup;
return state.status.isInProgress
? const CircularProgressIndicator()
: Container(
decoration: const BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(12),
),
),
height: 46,
width: double.infinity,
child: FilledButton(
style: ButtonStyle(
backgroundColor: WidgetStatePropertyAll(
isSignInValid || isSignUpValid
? slateBlue
: whiteAluminum),
foregroundColor: WidgetStatePropertyAll(
isSignInValid || isSignUpValid ? white : gainsborough),
shape: WidgetStatePropertyAll<RoundedRectangleBorder>(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(22),
),
),
),
key: const Key('loginForm_continue_raisedButton'),
onPressed: isSignInValid || isSignUpValid
? () {
context.read<LoginBloc>().add(
LoginSubmitted(isSignup, isSighupWithLogin),
);
}
: null,
child: Text(isSignup ? 'Create account' : 'Login',
style: const TextStyle(fontSize: 16)),
),
);
: ButtonForm(
onPressed: isSignInValid || isSignUpValid
? () {
context.read<LoginBloc>().add(
LoginSubmitted(isSignup, isSighupWithLogin),
);
}
: null,
backgroundColor: WidgetStatePropertyAll(
isSignInValid || isSignUpValid ? slateBlue : whiteAluminum),
foregroundColor: WidgetStatePropertyAll(
isSignInValid || isSignUpValid ? white : gainsborough),
hint: isSignup ? 'Create account' : 'Login');
},
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,16 +54,24 @@ class ResetPasswordPage extends StatelessWidget {
context.read<ResetPasswordBloc>().add(const OnBackCurrentForm());
}
}),
body: Container(
alignment: Alignment.topCenter,
padding: const EdgeInsets.symmetric(horizontal: 28),
child: ConstrainedBox(
constraints: const BoxConstraints(maxWidth: 400),
child: SingleChildScrollView(
child: forms[state.currentForm],
body: LayoutBuilder(builder: (context, constraint) {
return Container(
alignment: Alignment.topCenter,
padding: const EdgeInsets.symmetric(horizontal: 28),
child: ConstrainedBox(
constraints: const BoxConstraints(maxWidth: 400),
child: SingleChildScrollView(
child: ConstrainedBox(
constraints:
BoxConstraints(minHeight: constraint.maxHeight),
child: IntrinsicHeight(
child: forms[state.currentForm],
),
),
),
),
),
),
);
}),
bottomNavigationBar: SafeArea(
child: SizedBox(
height: 18,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:formz/formz.dart';
import '../../../shared/ui/view/text_button_forms.dart';
import '../../../shared/utils/date_utils.dart';
import '../bloc/timer_bloc/timer_bloc.dart';
import '../models/models.dart';
Expand Down Expand Up @@ -37,7 +38,9 @@ class SendEmailForm extends StatelessWidget {
const Padding(padding: EdgeInsets.all(8)),
_EmailInput(),
const Padding(padding: EdgeInsets.all(8)),
_ContinueButton()
const Spacer(),
_ContinueButton(),
const Padding(padding: EdgeInsets.all(16))
],
),
);
Expand All @@ -50,46 +53,19 @@ class _EmailInput extends StatelessWidget {
return BlocBuilder<ResetPasswordBloc, ResetPasswordState>(
buildWhen: (previous, current) => previous.email != current.email,
builder: (context, state) {
return Container(
padding: const EdgeInsets.all(8),
decoration: const BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(12),
),
color: gainsborough,
),
child: TextField(
keyboardType: TextInputType.emailAddress,
return TextFieldForm(
onChanged: (email) =>
context.read<ResetPasswordBloc>().add(EmailChanged(email)),
enableSuggestions: false,
autocorrect: false,
decoration: InputDecoration(
border: InputBorder.none,
label: const Row(
children: [
Icon(
Icons.email_outlined,
size: 16,
color: dullGray,
),
Padding(padding: EdgeInsets.all(4)),
Text(
'Email',
style: TextStyle(color: dullGray, fontSize: 16),
)
],
),
errorText: state.email.displayError != null
? state.email.displayError == EmailValidationError.empty
? 'Email is too short'
: state.email.displayError ==
EmailValidationError.incorrect
? 'The format of the email address is incorrect'
: null
: null),
),
);
iconData: Icons.email_outlined,
keyboardType: TextInputType.emailAddress,
hint: 'Email',
error: state.email.displayError != null
? state.email.displayError == EmailValidationError.empty
? 'Email is too short'
: state.email.displayError == EmailValidationError.incorrect
? 'The format of the email address is incorrect'
: null
: null);
},
);
}
Expand All @@ -107,53 +83,37 @@ class _ContinueButton extends StatelessWidget {
builder: (context, state) {
return state.status.isInProgress
? const CircularProgressIndicator()
: Container(
decoration: const BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(12),
),
),
height: 46,
width: double.infinity,
child: FilledButton(
style: ButtonStyle(
backgroundColor: WidgetStatePropertyAll(
state.isEmailValid ? slateBlue : whiteAluminum),
foregroundColor: WidgetStatePropertyAll(
state.isEmailValid ? white : gainsborough),
shape: WidgetStatePropertyAll<RoundedRectangleBorder>(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12.0),
),
),
),
onPressed: state.isEmailValid
? () {
hideKeyboard();
var time = context.read<TimerBloc>().state.duration;
if (time != 0) {
ScaffoldMessenger.of(context)
..hideCurrentSnackBar()
..showSnackBar(
SnackBar(
content: ValueListenableBuilder<String>(
valueListenable: snackBarText,
builder: (context, currentText, child) {
return Text(currentText,
textAlign: TextAlign.center);
},
),
: ButtonForm(
onPressed: state.isEmailValid
? () {
hideKeyboard();
var time = context.read<TimerBloc>().state.duration;
if (time != 0) {
ScaffoldMessenger.of(context)
..hideCurrentSnackBar()
..showSnackBar(
SnackBar(
content: ValueListenableBuilder<String>(
valueListenable: snackBarText,
builder: (context, currentText, child) {
return Text(currentText,
textAlign: TextAlign.center);
},
),
);
} else {
context
.read<ResetPasswordBloc>()
.add(const EmailSubmitted());
}
),
);
} else {
context
.read<ResetPasswordBloc>()
.add(const EmailSubmitted());
}
: null,
child: const Text('Continue'),
));
}
: null,
backgroundColor: WidgetStatePropertyAll(
state.isEmailValid ? slateBlue : whiteAluminum),
foregroundColor: WidgetStatePropertyAll(
state.isEmailValid ? white : gainsborough),
hint: 'Continue');
},
));
}
Expand Down
Loading