Files
workavia-mail-front/lib/features/login/presentation/base_login_view.dart
T
DatDang 145f7c5e03 Fix focus problem when tab on Login Screen
Revert "fixup! Fix focus problem when tab on Login Screen"

This reverts commit c8df6ee66a8b9c55255bb1f30458e4b69664ac4f.

Revert "Fix focus problem when tab on Login Screen"

This reverts commit 30a14bfebe622dfd3f121f83798990e27239a6ba.

Fix focus problem when tab on Login Screen
2024-11-01 14:07:56 +07:00

103 lines
4.0 KiB
Dart

import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/views/text/type_ahead_form_field_builder.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/base/widget/recent_item_tile_widget.dart';
import 'package:tmail_ui_user/features/login/domain/model/recent_login_username.dart';
import 'package:tmail_ui_user/features/login/presentation/login_controller.dart';
import 'package:tmail_ui_user/features/login/presentation/widgets/login_input_decoration_builder.dart';
import 'package:tmail_ui_user/features/login/presentation/widgets/login_text_input_builder.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
abstract class BaseLoginView extends GetWidget<LoginController> {
const BaseLoginView({Key? key}) : super(key: key);
Widget buildLoginButton(BuildContext context) {
return Container(
margin: const EdgeInsetsDirectional.only(bottom: 16, start: 24, end: 24),
width: controller.responsiveUtils.getDeviceWidth(context),
height: 48,
child: ElevatedButton(
key: const Key('loginSubmitForm'),
style: ElevatedButton.styleFrom(
foregroundColor: Colors.white,
backgroundColor: AppColor.primaryColor,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
side: const BorderSide(width: 0, color: AppColor.primaryColor)
)
),
onPressed: controller.handleLoginPressed,
child: Text(
AppLocalizations.of(context).signIn,
style: const TextStyle(fontSize: 16, color: Colors.white)
)
)
);
}
Widget buildInputCredentialForm(BuildContext context) {
return AutofillGroup(
child: Padding(
padding: const EdgeInsetsDirectional.symmetric(horizontal: 24),
child: FocusTraversalGroup(
policy: WidgetOrderTraversalPolicy(),
child: Column(
children: [
buildUserNameInput(context),
const SizedBox(height: 24),
buildPasswordInput(context),
const SizedBox(height: 40),
],
),
),
),
);
}
Widget buildUserNameInput(BuildContext context) {
return TypeAheadFormFieldBuilder<RecentLoginUsername>(
key: const Key('login_username_input'),
controller: controller.usernameInputController,
onTextChange: controller.onUsernameChange,
focusNode: controller.userNameFocusNode,
textInputAction: TextInputAction.next,
autocorrect: false,
autofillHints: const [AutofillHints.email],
keyboardType: TextInputType.emailAddress,
decoration: (LoginInputDecorationBuilder()
..setLabelText(AppLocalizations.of(context).email)
..setHintText(AppLocalizations.of(context).email))
.build(),
debounceDuration: const Duration(milliseconds: 300),
suggestionsCallback: controller.getAllRecentLoginUsernameAction,
itemBuilder: (_, loginUsername) => RecentItemTileWidget(loginUsername),
onSuggestionSelected: controller.selectUsernameFromSuggestion,
noItemsFoundBuilder: (context) => const SizedBox(),
hideOnEmpty: true,
hideOnError: true,
hideOnLoading: true,
);
}
Widget buildPasswordInput(BuildContext context) {
return LoginTextInputBuilder(
key: const Key('login_password_input'),
controller: controller.passwordInputController,
autofillHints: const [AutofillHints.password],
textInputAction: TextInputAction.done,
hintText: AppLocalizations.of(context).password,
focusNode: controller.passFocusNode,
onTextChange: controller.onPasswordChange,
onSubmitted: (_) => controller.handleLoginPressed(),
);
}
Widget buildLoadingCircularProgress() {
return const SizedBox(
key: Key('login_loading_icon'),
width: 40,
height: 40,
child: CircularProgressIndicator(color: AppColor.primaryColor));
}
}