import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/constants/assets.dart'; class CustomSearchBar extends StatefulWidget { final TextEditingController? controller; final String hintText; final String? searchQuery; final Function(String)? onSearchChanged; // Callback for search input changes const CustomSearchBar({ super.key, this.controller, this.searchQuery = '', this.hintText = 'Search', this.onSearchChanged, }); @override State createState() => _CustomSearchBarState(); } class _CustomSearchBarState extends State { @override void dispose() { if (widget.controller != null) { widget.controller!.dispose(); } super.dispose(); } @override Widget build(BuildContext context) { return Container( decoration: BoxDecoration( color: ColorsManager.whiteColors, boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.2), spreadRadius: 0, blurRadius: 8, offset: const Offset(0, 4), ), ], ), padding: const EdgeInsets.symmetric(horizontal: 16.0), child: Container( padding: const EdgeInsets.symmetric(vertical: 20.0), width: double.infinity, decoration: BoxDecoration( borderRadius: BorderRadius.circular(12), ), child: TextFormField( controller: widget.controller, initialValue: widget.searchQuery, style: const TextStyle( color: Colors.black, ), onChanged: widget.onSearchChanged, // Call the callback on text change decoration: InputDecoration( filled: true, fillColor: ColorsManager.textFieldGreyColor, hintText: widget.hintText, hintStyle: Theme.of(context).textTheme.bodyLarge!.copyWith( color: ColorsManager.lightGrayColor, fontSize: 12, fontWeight: FontWeight.w400, height: 0, letterSpacing: -0.24, ), suffixIcon: Padding( padding: const EdgeInsets.only(right: 16), child: SvgPicture.asset( Assets.textFieldSearch, width: 24, height: 24, ), ), border: OutlineInputBorder( borderSide: BorderSide.none, borderRadius: BorderRadius.circular(12), ), contentPadding: const EdgeInsets.symmetric( vertical: 14, horizontal: 16, ), ), ), ), ); } }