import 'package:flutter/material.dart'; import "package:photos/generated/l10n.dart"; import "package:photos/models/api/collection/user.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/components/captioned_text_widget.dart"; import "package:photos/ui/components/divider_widget.dart"; import "package:photos/ui/components/menu_item_widget/menu_item_widget.dart"; import "package:photos/ui/sharing/user_avator_widget.dart"; class EmailInputField extends StatelessWidget { final List suggestions; final ValueChanged? onChanged; final ValueChanged? onSelected; final String? initialValue; const EmailInputField({ super.key, required this.suggestions, this.onChanged, this.onSelected, this.initialValue, }); @override Widget build(BuildContext context) { return Autocomplete( initialValue: initialValue != null ? TextEditingValue(text: initialValue!) : null, optionsBuilder: (TextEditingValue textEditingValue) { if (textEditingValue.text == '') { return const Iterable.empty(); } return suggestions.where((String option) { return option .toLowerCase() .contains(textEditingValue.text.toLowerCase()); }); }, onSelected: onSelected, fieldViewBuilder: ( BuildContext context, TextEditingController controller, FocusNode focusNode, VoidCallback onFieldSubmitted, ) { return TextFormField( controller: controller, focusNode: focusNode, onChanged: onChanged, decoration: InputDecoration( focusedBorder: OutlineInputBorder( borderRadius: const BorderRadius.all(Radius.circular(8.0)), borderSide: BorderSide(color: getEnteColorScheme(context).strokeMuted), ), fillColor: getEnteColorScheme(context).fillFaint, filled: true, hintText: S.of(context).enterEmail, contentPadding: const EdgeInsets.symmetric( horizontal: 16, vertical: 14, ), border: UnderlineInputBorder( borderSide: BorderSide.none, borderRadius: BorderRadius.circular(8), ), ), ); }, optionsViewBuilder: ( BuildContext context, AutocompleteOnSelected onSelected, Iterable options, ) { return Align( alignment: Alignment.topLeft, child: Padding( padding: const EdgeInsets.only(top: 8.0), child: Material( elevation: 4, borderRadius: BorderRadius.circular(8), child: Container( constraints: const BoxConstraints(maxHeight: 160), width: MediaQuery.of(context).size.width - 16, // Adjust padding as needed child: ListView.builder( padding: EdgeInsets.zero, physics: const ClampingScrollPhysics(), shrinkWrap: true, itemCount: options.length, itemBuilder: (BuildContext context, int index) { final String option = options.elementAt(index); return Column( children: [ MenuItemWidget( captionedTextWidget: CaptionedTextWidget( title: option, ), leadingIconSize: 24.0, leadingIconWidget: UserAvatarWidget( User(email: option, id: option.hashCode), ), menuItemColor: getEnteColorScheme(context).fillFaint, pressedColor: getEnteColorScheme(context).fillFaint, trailingIcon: null, onTap: () async { onSelected(option); }, isTopBorderRadiusRemoved: index > 0, isBottomBorderRadiusRemoved: index < (options.length), ), (index == (options.length - 1)) ? const SizedBox.shrink() : DividerWidget( dividerType: DividerType.menu, bgColor: getEnteColorScheme(context).fillFaint, ), ], ); }, ), ), ), ), ); }, ); } }