TF-2475 Replace TypeAheadFormField to TypeAheadField compatible flutter_typeahead version 0.5.2

Signed-off-by: dab246 <tdvu@linagora.com>
(cherry picked from commit 87d1a17ddd76c87d2c99cee46c54ef3541929fc6)
This commit is contained in:
dab246
2024-01-30 02:50:49 +07:00
committed by Dat H. Pham
parent 83ffc1b8bd
commit cd5c240401
6 changed files with 43 additions and 42 deletions
@@ -12,8 +12,8 @@ import 'package:flutter/services.dart';
import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart';
typedef SuggestionsCallback<T> = FutureOr<Iterable<T>> Function(String pattern);
typedef FetchRecentActionCallback<R> = FutureOr<Iterable<R>> Function(String pattern);
typedef SuggestionsCallback<T> = FutureOr<List<T>> Function(String pattern);
typedef FetchRecentActionCallback<R> = FutureOr<List<R>> Function(String pattern);
typedef ItemBuilder<T> = Widget Function(BuildContext context, T itemData);
typedef SuggestionSelectionCallback<T> = void Function(T suggestion);
typedef RecentSelectionCallback<R> = void Function(R recent);
@@ -1,4 +1,5 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/views/quick_search/quick_search_input_form.dart';
import 'package:core/utils/direction_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart';
@@ -10,7 +11,7 @@ class TypeAheadFormFieldBuilder<T> extends StatefulWidget {
final SuggestionsCallback<T> suggestionsCallback;
final ItemBuilder<T> itemBuilder;
final SuggestionSelectionCallback<T> onSuggestionSelected;
final SuggestionsBoxDecoration suggestionsBoxDecoration;
final Widget? suggestionsBoxDecoration;
final WidgetBuilder? noItemsFoundBuilder;
final bool hideOnEmpty;
final bool hideOnError;
@@ -31,7 +32,7 @@ class TypeAheadFormFieldBuilder<T> extends StatefulWidget {
required this.suggestionsCallback,
required this.itemBuilder,
required this.onSuggestionSelected,
this.suggestionsBoxDecoration = const SuggestionsBoxDecoration(),
this.suggestionsBoxDecoration,
this.textDirection = TextDirection.ltr,
this.debounceDuration = const Duration(milliseconds: 300),
this.decoration = const InputDecoration(),
@@ -68,37 +69,48 @@ class _TypeAheadFormFieldBuilderState<T> extends State<TypeAheadFormFieldBuilder
@override
Widget build(BuildContext context) {
return TypeAheadFormField<T>(
return TypeAheadField<T>(
key: widget.key,
textFieldConfiguration: TextFieldConfiguration(
controller: widget.controller,
textInputAction: widget.textInputAction,
autocorrect: widget.autocorrect,
autofillHints: widget.autofillHints,
keyboardType: widget.keyboardType,
decoration: widget.decoration,
focusNode: widget.focusNode,
textDirection: _textDirection,
cursorColor: widget.cursorColor,
onChanged: (value) {
widget.onTextChange?.call(value);
if (value.isNotEmpty) {
final directionByText = DirectionUtils.getDirectionByEndsText(value);
if (directionByText != _textDirection) {
setState(() {
_textDirection = directionByText;
});
controller: widget.controller,
focusNode: widget.focusNode,
builder: (context, controller, focusNode) {
return TextField(
controller: controller,
focusNode: focusNode,
textInputAction: widget.textInputAction,
autocorrect: widget.autocorrect,
autofillHints: widget.autofillHints,
keyboardType: widget.keyboardType,
decoration: widget.decoration,
textDirection: _textDirection,
cursorColor: widget.cursorColor,
onChanged: (value) {
widget.onTextChange?.call(value);
if (value.isNotEmpty) {
final directionByText = DirectionUtils.getDirectionByEndsText(value);
if (directionByText != _textDirection) {
setState(() {
_textDirection = directionByText;
});
}
}
}
},
onSubmitted: widget.onTextSubmitted
),
},
onSubmitted: widget.onTextSubmitted
);
},
debounceDuration: widget.debounceDuration,
suggestionsCallback: widget.suggestionsCallback,
itemBuilder: widget.itemBuilder,
onSuggestionSelected: widget.onSuggestionSelected,
suggestionsBoxDecoration: widget.suggestionsBoxDecoration,
noItemsFoundBuilder: widget.noItemsFoundBuilder,
onSelected: widget.onSuggestionSelected,
decorationBuilder: (context, child) {
return widget.suggestionsBoxDecoration ?? Material(
type: MaterialType.card,
elevation: 4,
borderRadius: BorderRadius.circular(14),
child: child,
);
},
emptyBuilder: widget.noItemsFoundBuilder,
hideOnEmpty: widget.hideOnEmpty,
hideOnError: widget.hideOnError,
hideOnLoading: widget.hideOnLoading,
@@ -3,7 +3,6 @@ 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';
import 'package:tmail_ui_user/features/identity_creator/presentation/widgets/identity_input_decoration_builder.dart';
@@ -78,9 +77,6 @@ class IdentityInputWithDropListFieldBuilder extends StatelessWidget {
onSelectedSuggestionAction!(emailSelected);
}
},
suggestionsBoxDecoration: SuggestionsBoxDecoration(
borderRadius: BorderRadius.circular(14)
),
noItemsFoundBuilder: (context) => const SizedBox(),
hideOnEmpty: true,
hideOnError: true,
@@ -1,7 +1,6 @@
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_typeahead/flutter_typeahead.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';
@@ -71,7 +70,6 @@ abstract class BaseLoginView extends GetWidget<LoginController> {
suggestionsCallback: controller.getAllRecentLoginUsernameAction,
itemBuilder: (_, loginUsername) => RecentItemTileWidget(loginUsername),
onSuggestionSelected: controller.selectUsernameFromSuggestion,
suggestionsBoxDecoration: const SuggestionsBoxDecoration(borderRadius: BorderRadius.all(Radius.circular(14))),
noItemsFoundBuilder: (context) => const SizedBox(),
hideOnEmpty: true,
hideOnError: true,
@@ -3,7 +3,6 @@ import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/utils/theme_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';
import 'package:tmail_ui_user/features/base/widget/recent_item_tile_widget.dart';
import 'package:tmail_ui_user/features/login/domain/model/recent_login_url.dart';
@@ -141,7 +140,6 @@ class LoginView extends BaseLoginView {
suggestionsCallback: controller.getAllRecentLoginUrlAction,
itemBuilder: (_, loginUrl) => RecentItemTileWidget(loginUrl),
onSuggestionSelected: (loginUrl) => controller.selectBaseUrlFromSuggestion(loginUrl.url),
suggestionsBoxDecoration: const SuggestionsBoxDecoration(borderRadius: BorderRadius.all(Radius.circular(14))),
noItemsFoundBuilder: (context) => const SizedBox(),
hideOnEmpty: true,
hideOnError: true,
@@ -1,7 +1,7 @@
import 'package:core/presentation/views/quick_search/quick_search_input_form.dart';
import 'package:core/presentation/views/text/type_ahead_form_field_builder.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_typeahead/flutter_typeahead.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/widgets/login_input_decoration_builder.dart';
@@ -44,9 +44,6 @@ class DNSLookupInputForm extends StatelessWidget {
suggestionsCallback: suggestionsCallback,
itemBuilder: (_, loginUsername) => RecentItemTileWidget(loginUsername),
onSuggestionSelected: onSuggestionSelected,
suggestionsBoxDecoration: const SuggestionsBoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(14))
),
noItemsFoundBuilder: (context) => const SizedBox(),
hideOnEmpty: true,
hideOnError: true,