TF-3408 Auto load more when user uses arrow down of keyboard
This commit is contained in:
@@ -8,6 +8,7 @@ class ComposerStyle {
|
||||
static const double radius = 28;
|
||||
static const double keyboardToolBarHeight = 200;
|
||||
static const double popupMenuRadius = 8;
|
||||
static const double suggestionItemHeight = 60;
|
||||
|
||||
static const Color borderColor = AppColor.colorLineComposer;
|
||||
static const Color backgroundEditorColor = Colors.white;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/styles/composer_style.dart';
|
||||
|
||||
class RecipientComposerWidgetStyle {
|
||||
static const double deleteRecipientFieldIconSize = 20;
|
||||
@@ -10,6 +11,7 @@ class RecipientComposerWidgetStyle {
|
||||
static const double suggestionsBoxRadius = 20;
|
||||
static const double suggestionsBoxMaxHeight = 300;
|
||||
static const double suggestionBoxWidth = 300;
|
||||
static const double suggestionBoxItemHeight = ComposerStyle.suggestionItemHeight;
|
||||
static const double minTextFieldWidth = 20;
|
||||
static const double tagSpacing = 8;
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@ class RecipientSuggestionItemWidgetStyle {
|
||||
static const double selectedIconSize = 24;
|
||||
|
||||
static const EdgeInsetsGeometry suggestionDuplicatedMargin = EdgeInsets.all(8.0);
|
||||
static const EdgeInsetsGeometry labelDuplicatedPadding = EdgeInsets.symmetric(horizontal: 8.0);
|
||||
static const EdgeInsetsGeometry labelPadding = EdgeInsets.symmetric(horizontal: 16.0);
|
||||
|
||||
static const TextStyle labelTextStyle = TextStyle(
|
||||
|
||||
@@ -180,6 +180,7 @@ class _RecipientComposerWidgetState extends State<RecipientComposerWidget> {
|
||||
suggestionsBoxBackgroundColor: RecipientComposerWidgetStyle.suggestionsBoxBackgroundColor,
|
||||
suggestionsBoxRadius: RecipientComposerWidgetStyle.suggestionsBoxRadius,
|
||||
suggestionsBoxMaxHeight: RecipientComposerWidgetStyle.suggestionsBoxMaxHeight,
|
||||
suggestionItemHeight: RecipientComposerWidgetStyle.suggestionBoxItemHeight,
|
||||
suggestionBoxWidth: _getSuggestionBoxWidth(widget.maxWidth),
|
||||
textStyle: RecipientComposerWidgetStyle.inputTextStyle,
|
||||
onFocusTagAction: (focused) => _handleFocusTagAction.call(focused, stateSetter),
|
||||
@@ -270,6 +271,7 @@ class _RecipientComposerWidgetState extends State<RecipientComposerWidget> {
|
||||
suggestionsBoxBackgroundColor: RecipientComposerWidgetStyle.suggestionsBoxBackgroundColor,
|
||||
suggestionsBoxRadius: RecipientComposerWidgetStyle.suggestionsBoxRadius,
|
||||
suggestionsBoxMaxHeight: RecipientComposerWidgetStyle.suggestionsBoxMaxHeight,
|
||||
suggestionItemHeight: RecipientComposerWidgetStyle.suggestionBoxItemHeight,
|
||||
suggestionBoxWidth: _getSuggestionBoxWidth(widget.maxWidth),
|
||||
textStyle: RecipientComposerWidgetStyle.inputTextStyle,
|
||||
onFocusTagAction: (focused) => _handleFocusTagAction.call(focused, stateSetter),
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/views/text/rich_text_builder.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
||||
import 'package:model/extensions/email_address_extension.dart';
|
||||
import 'package:super_tag_editor/widgets/rich_text_widget.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/model/suggestion_email_address.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/styles/composer_style.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/styles/recipient_suggestion_item_widget_style.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/advanced_search/avatar_suggestion_item_widget.dart';
|
||||
|
||||
@@ -38,59 +40,91 @@ class RecipientSuggestionItemWidget extends StatelessWidget {
|
||||
margin: RecipientSuggestionItemWidgetStyle.suggestionDuplicatedMargin,
|
||||
decoration: const BoxDecoration(
|
||||
color: AppColor.colorBgMenuItemDropDownSelected,
|
||||
borderRadius: BorderRadius.all(Radius.circular(RecipientSuggestionItemWidgetStyle.radius))
|
||||
borderRadius: BorderRadius.all(Radius.circular(RecipientSuggestionItemWidgetStyle.radius)),
|
||||
),
|
||||
height: ComposerStyle.suggestionItemHeight,
|
||||
child: Material(
|
||||
type: MaterialType.transparency,
|
||||
child: ListTile(
|
||||
contentPadding: RecipientSuggestionItemWidgetStyle.labelDuplicatedPadding,
|
||||
leading: AvatarSuggestionItemWidget(emailAddress: emailAddress),
|
||||
title: RichTextWidget(
|
||||
textOrigin: emailAddress.asString(),
|
||||
wordSearched: suggestionValid ?? '',
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
subtitle: emailAddress.displayName.isNotEmpty
|
||||
? RichTextWidget(
|
||||
textOrigin: emailAddress.emailAddress,
|
||||
wordSearched: suggestionValid ?? '',
|
||||
overflow: TextOverflow.ellipsis,
|
||||
styleTextOrigin: RecipientSuggestionItemWidgetStyle.labelTextStyle,
|
||||
styleWordSearched: RecipientSuggestionItemWidgetStyle.labelHighlightTextStyle
|
||||
)
|
||||
: null,
|
||||
trailing: SvgPicture.asset(
|
||||
imagePaths.icFilterSelected,
|
||||
width: RecipientSuggestionItemWidgetStyle.selectedIconSize,
|
||||
height: RecipientSuggestionItemWidgetStyle.selectedIconSize,
|
||||
fit: BoxFit.fill
|
||||
child: InkWell(
|
||||
onTap: () {},
|
||||
child: Padding(
|
||||
padding: RecipientSuggestionItemWidgetStyle.labelPadding,
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
AvatarSuggestionItemWidget(emailAddress: emailAddress),
|
||||
const SizedBox(width: 8),
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
RichTextWidget(
|
||||
textOrigin: emailAddress.asString(),
|
||||
wordSearched: suggestionValid ?? '',
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
if (emailAddress.displayName.isNotEmpty)
|
||||
RichTextBuilder(
|
||||
textOrigin: emailAddress.emailAddress,
|
||||
wordToStyle: suggestionValid ?? '',
|
||||
styleOrigin: RecipientSuggestionItemWidgetStyle.labelTextStyle,
|
||||
styleWord: RecipientSuggestionItemWidgetStyle.labelHighlightTextStyle,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
SvgPicture.asset(
|
||||
imagePaths.icFilterSelected,
|
||||
width: RecipientSuggestionItemWidgetStyle.selectedIconSize,
|
||||
height: RecipientSuggestionItemWidgetStyle.selectedIconSize,
|
||||
fit: BoxFit.fill,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
),
|
||||
);
|
||||
} else {
|
||||
return Container(
|
||||
color: highlight ? AppColor.colorItemSelected : Colors.white,
|
||||
height: ComposerStyle.suggestionItemHeight,
|
||||
child: Material(
|
||||
type: MaterialType.transparency,
|
||||
child: ListTile(
|
||||
contentPadding: RecipientSuggestionItemWidgetStyle.labelPadding,
|
||||
leading: AvatarSuggestionItemWidget(emailAddress: emailAddress),
|
||||
title: RichTextWidget(
|
||||
textOrigin: emailAddress.asString(),
|
||||
wordSearched: suggestionValid ?? '',
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
subtitle: emailAddress.displayName.isNotEmpty
|
||||
? RichTextWidget(
|
||||
textOrigin: emailAddress.emailAddress,
|
||||
wordSearched: suggestionValid ?? '',
|
||||
overflow: TextOverflow.ellipsis,
|
||||
styleTextOrigin: RecipientSuggestionItemWidgetStyle.labelTextStyle,
|
||||
styleWordSearched: RecipientSuggestionItemWidgetStyle.labelHighlightTextStyle
|
||||
)
|
||||
: null,
|
||||
child: InkWell(
|
||||
onTap: () => onSelectedAction?.call(emailAddress),
|
||||
child: Padding(
|
||||
padding: RecipientSuggestionItemWidgetStyle.labelPadding,
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
AvatarSuggestionItemWidget(emailAddress: emailAddress),
|
||||
const SizedBox(width: 8),
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
RichTextWidget(
|
||||
textOrigin: emailAddress.asString(),
|
||||
wordSearched: suggestionValid ?? '',
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
if (emailAddress.displayName.isNotEmpty)
|
||||
RichTextBuilder(
|
||||
textOrigin: emailAddress.emailAddress,
|
||||
wordToStyle: suggestionValid ?? '',
|
||||
styleOrigin: RecipientSuggestionItemWidgetStyle.labelTextStyle,
|
||||
styleWord: RecipientSuggestionItemWidgetStyle.labelHighlightTextStyle,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user