TF-1884 Support RTL mode for TypeAheadFormField
(cherry picked from commit e375d87d5d485ecb717b1a8afee2b7bf741fbeac)
This commit is contained in:
+13
-13
@@ -1,5 +1,7 @@
|
||||
|
||||
import 'package:core/core.dart';
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/presentation/views/text/type_ahead_form_field_builder.dart';
|
||||
import 'package:core/utils/platform_info.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_typeahead/flutter_typeahead.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
||||
@@ -40,18 +42,16 @@ class IdentityInputWithDropListFieldBuilder extends StatelessWidget {
|
||||
fontWeight: FontWeight.normal,
|
||||
color: AppColor.colorContentEmail)),
|
||||
const SizedBox(height: 8),
|
||||
TypeAheadFormField<EmailAddress>(
|
||||
textFieldConfiguration: TextFieldConfiguration(
|
||||
focusNode: focusNode,
|
||||
controller: editingController,
|
||||
textInputAction: TextInputAction.done,
|
||||
decoration: (IdentityInputDecorationBuilder()
|
||||
..setContentPadding(const EdgeInsets.symmetric(
|
||||
vertical: BuildUtils.isWeb ? 16 : 12,
|
||||
horizontal: 12))
|
||||
..setErrorText(_error))
|
||||
.build()
|
||||
),
|
||||
TypeAheadFormFieldBuilder<EmailAddress>(
|
||||
focusNode: focusNode,
|
||||
controller: editingController,
|
||||
textInputAction: TextInputAction.done,
|
||||
decoration: (IdentityInputDecorationBuilder()
|
||||
..setContentPadding(const EdgeInsets.symmetric(
|
||||
vertical: PlatformInfo.isWeb ? 16 : 12,
|
||||
horizontal: 12))
|
||||
..setErrorText(_error))
|
||||
.build(),
|
||||
debounceDuration: const Duration(milliseconds: 500),
|
||||
suggestionsCallback: (pattern) async {
|
||||
if (onChangeInputSuggestionAction != null) {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||
import 'package:core/presentation/views/text/type_ahead_form_field_builder.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_typeahead/flutter_typeahead.dart';
|
||||
import 'package:get/get.dart';
|
||||
@@ -106,32 +107,26 @@ abstract class BaseLoginView extends GetWidget<LoginController> {
|
||||
Widget buildUserNameInput(BuildContext context) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.only(bottom: 24, right: 24, left: 24),
|
||||
child: TypeAheadFormField<RecentLoginUsername>(
|
||||
child: TypeAheadFormFieldBuilder<RecentLoginUsername>(
|
||||
key: const Key('login_username_input'),
|
||||
textFieldConfiguration: TextFieldConfiguration(
|
||||
controller: loginController.usernameInputController,
|
||||
onChanged: (value) => loginController.setUserNameText(value),
|
||||
textInputAction: TextInputAction.next,
|
||||
autocorrect: false,
|
||||
autofillHints: [AutofillHints.email],
|
||||
keyboardType: TextInputType.emailAddress,
|
||||
decoration: (LoginInputDecorationBuilder()
|
||||
..setLabelText(AppLocalizations.of(context).email)
|
||||
..setHintText(AppLocalizations.of(context).email))
|
||||
.build(),
|
||||
),
|
||||
controller: loginController.usernameInputController,
|
||||
onTextChange: loginController.setUserNameText,
|
||||
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: (pattern) async {
|
||||
return await loginController.getAllRecentLoginUsernameAction(pattern);
|
||||
},
|
||||
itemBuilder: (context, loginUsername) =>
|
||||
RecentItemTileWidget(loginUsername, imagePath: imagePaths),
|
||||
suggestionsCallback: loginController.getAllRecentLoginUsernameAction,
|
||||
itemBuilder: (context, loginUsername) => RecentItemTileWidget(loginUsername, imagePath: imagePaths),
|
||||
onSuggestionSelected: (recentUsername) {
|
||||
loginController.setUsername(recentUsername.username);
|
||||
passFocusNode.requestFocus();
|
||||
},
|
||||
suggestionsBoxDecoration: const SuggestionsBoxDecoration(
|
||||
borderRadius: BorderRadius.all(Radius.circular(14))),
|
||||
suggestionsBoxDecoration: const SuggestionsBoxDecoration(borderRadius: BorderRadius.all(Radius.circular(14))),
|
||||
noItemsFoundBuilder: (context) => const SizedBox(),
|
||||
hideOnEmpty: true,
|
||||
hideOnError: true,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
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:flutter_svg/flutter_svg.dart';
|
||||
import 'package:flutter_typeahead/flutter_typeahead.dart';
|
||||
@@ -135,27 +136,23 @@ class LoginView extends BaseLoginView {
|
||||
Widget _buildUrlInput(BuildContext context) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.only(right: 24, left: 24, bottom: 24),
|
||||
child: TypeAheadFormField<RecentLoginUrl>(
|
||||
textFieldConfiguration: TextFieldConfiguration(
|
||||
controller: loginController.urlInputController,
|
||||
textInputAction: TextInputAction.next,
|
||||
keyboardType: TextInputType.url,
|
||||
onSubmitted: (value) => controller.handleNextInUrlInputFormPress(),
|
||||
decoration: (LoginInputDecorationBuilder()
|
||||
..setLabelText(AppLocalizations.of(context).prefix_https)
|
||||
..setPrefixText(AppLocalizations.of(context).prefix_https))
|
||||
.build()
|
||||
),
|
||||
child: TypeAheadFormFieldBuilder<RecentLoginUrl>(
|
||||
controller: loginController.urlInputController,
|
||||
textInputAction: TextInputAction.next,
|
||||
keyboardType: TextInputType.url,
|
||||
onTextSubmitted: (value) => controller.handleNextInUrlInputFormPress(),
|
||||
decoration: (LoginInputDecorationBuilder()
|
||||
..setLabelText(AppLocalizations.of(context).prefix_https)
|
||||
..setPrefixText(AppLocalizations.of(context).prefix_https))
|
||||
.build(),
|
||||
debounceDuration: const Duration(milliseconds: 300),
|
||||
suggestionsCallback: (pattern) async {
|
||||
loginController.formatUrl(pattern);
|
||||
return loginController.getAllRecentLoginUrlAction(pattern);
|
||||
},
|
||||
itemBuilder: (context, loginUrl) =>
|
||||
RecentItemTileWidget(loginUrl, imagePath: imagePaths),
|
||||
itemBuilder: (context, loginUrl) => RecentItemTileWidget(loginUrl, imagePath: imagePaths),
|
||||
onSuggestionSelected: (loginUrl) => controller.formatUrl(loginUrl.url),
|
||||
suggestionsBoxDecoration: const SuggestionsBoxDecoration(
|
||||
borderRadius: BorderRadius.all(Radius.circular(14))),
|
||||
suggestionsBoxDecoration: const SuggestionsBoxDecoration(borderRadius: BorderRadius.all(Radius.circular(14))),
|
||||
noItemsFoundBuilder: (context) => const SizedBox(),
|
||||
hideOnEmpty: true,
|
||||
hideOnError: true,
|
||||
|
||||
Reference in New Issue
Block a user