import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/modules/activities/providers/activity.provider.dart'; import 'package:immich_mobile/modules/album/providers/current_album.provider.dart'; import 'package:immich_mobile/modules/asset_viewer/providers/current_asset.provider.dart'; import 'package:immich_mobile/shared/providers/user.provider.dart'; import 'package:immich_mobile/shared/ui/user_circle_avatar.dart'; class ActivityTextField extends HookConsumerWidget { final bool isEnabled; final String? likeId; final Function(String) onSubmit; const ActivityTextField({ required this.onSubmit, this.isEnabled = true, this.likeId, super.key, }); @override Widget build(BuildContext context, WidgetRef ref) { final album = ref.watch(currentAlbumProvider)!; final asset = ref.watch(currentAssetProvider); final activityNotifier = ref .read(albumActivityProvider(album.remoteId!, asset?.remoteId).notifier); final user = ref.watch(currentUserProvider); final inputController = useTextEditingController(); final inputFocusNode = useFocusNode(); final liked = likeId != null; // Show keyboard immediately on activities open useEffect( () { inputFocusNode.requestFocus(); return null; }, [], ); // Pass text to callback and reset controller void onEditingComplete() { onSubmit(inputController.text); inputController.clear(); inputFocusNode.unfocus(); } Future addLike() async { await activityNotifier.addLike(); } Future removeLike() async { if (liked) { await activityNotifier.removeActivity(likeId!); } } return Padding( padding: const EdgeInsets.only(bottom: 10), child: TextField( controller: inputController, enabled: isEnabled, focusNode: inputFocusNode, textInputAction: TextInputAction.send, autofocus: false, decoration: InputDecoration( border: InputBorder.none, focusedBorder: InputBorder.none, prefixIcon: user != null ? Padding( padding: const EdgeInsets.symmetric(horizontal: 15), child: UserCircleAvatar( user: user, size: 30, radius: 15, ), ) : null, suffixIcon: Padding( padding: const EdgeInsets.only(right: 10), child: IconButton( icon: Icon( liked ? Icons.favorite_rounded : Icons.favorite_border_rounded, ), onPressed: liked ? removeLike : addLike, ), ), suffixIconColor: liked ? Colors.red[700] : null, hintText: !isEnabled ? 'shared_album_activities_input_disable'.tr() : 'shared_album_activities_input_hint'.tr(), hintStyle: TextStyle( fontWeight: FontWeight.normal, fontSize: 14, color: Colors.grey[600], ), ), onEditingComplete: onEditingComplete, onTapOutside: (_) => inputFocusNode.unfocus(), ), ); } }