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:
@@ -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,
|
||||
|
||||
-4
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user