import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:lba/gen/assets.gen.dart'; import 'package:lba/res/colors.dart'; class ChatTextInputField extends StatelessWidget { final TextEditingController textController; final VoidCallback onSendMessage; final VoidCallback onShowAttachmentOptions; final VoidCallback onStartRecording; final VoidCallback onStopRecording; final bool isRecording; final Animation micPulseAnimation; final GlobalKey attachIconKey; final String hintText; const ChatTextInputField({ super.key, required this.textController, required this.onSendMessage, required this.onShowAttachmentOptions, required this.onStartRecording, required this.onStopRecording, required this.isRecording, required this.micPulseAnimation, required this.attachIconKey, this.hintText = "Type your request here and let's plan it!", }); @override Widget build(BuildContext context) { return SafeArea( top: false, child: Padding( padding: const EdgeInsets.fromLTRB(16, 12, 16, 12), child: Container( padding: const EdgeInsets.symmetric(horizontal: 4), decoration: BoxDecoration( color: AppColors.nearbyPopup, borderRadius: BorderRadius.circular(35), border: Border.all(color: AppColors.divider), ), child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ IconButton( key: attachIconKey, onPressed: onShowAttachmentOptions, icon: SvgPicture.asset(Assets.icons.link2.path,color: AppColors.isDarkMode?Colors.grey:null,), ), Expanded( child: TextField( controller: textController, decoration: InputDecoration( hintText: hintText, hintStyle: TextStyle(color: AppColors.textSecondary, fontSize: 14), border: InputBorder.none, focusedBorder: InputBorder.none, enabledBorder: InputBorder.none, contentPadding: const EdgeInsets.symmetric(vertical: 0, horizontal: 3), ), onSubmitted: (_) => onSendMessage(), ), ), GestureDetector( onLongPressStart: (_) => onStartRecording(), onLongPressEnd: (_) => onStopRecording(), child: AnimatedBuilder( animation: micPulseAnimation, builder: (context, child) { return Transform.scale( scale: isRecording ? micPulseAnimation.value : 1.0, child: Container( padding: const EdgeInsets.all(12), decoration: BoxDecoration( color: isRecording ? AppColors.errorColor : Colors.transparent, shape: BoxShape.circle, boxShadow: isRecording ? [ BoxShadow( color: AppColors.errorColor.withOpacity(0.3), blurRadius: 8, spreadRadius: 2, ), ] : null, ), child: SvgPicture.asset( Assets.icons.microphone2.path, color: AppColors.isDarkMode?Colors.grey:null, colorFilter: isRecording ? ColorFilter.mode( AppColors.surface, BlendMode.srcIn) : null, ), ), ); }), ), IconButton( icon: SvgPicture.asset(Assets.icons.arrowUp.path,color: AppColors.isDarkMode?const Color.fromARGB(255, 47, 122, 184):null), onPressed: onSendMessage, ), ], ), ), ), ); } }