Advertisement
TimmyChannel

Untitled

May 14th, 2024 (edited)
808
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 2.43 KB | None | 0 0
  1. class SearchWidget extends StatefulWidget {
  2.   const SearchWidget({super.key});
  3.  
  4.   @override
  5.   State<SearchWidget> createState() => _SearchWidgetState();
  6. }
  7.  
  8. class _SearchWidgetState extends State<SearchWidget> {
  9.   final TextEditingController controller = TextEditingController();
  10.  
  11.   @override
  12.   void initState() {
  13.     super.initState();
  14.     SchedulerBinding.instance.addPostFrameCallback((timeStamp) {
  15.       final bloc = Provider.of<MainBloc>(context, listen: false);
  16.       controller.addListener(() => bloc.updateText(controller.text));
  17.       controller.addListener(() => setState(() {}));
  18.     });
  19.   }
  20.  
  21.   @override
  22.   void didChangeDependencies() {
  23.     super.didChangeDependencies();
  24.   }
  25.  
  26.   BorderSide _getBorderSideByText() {
  27.     return controller.text.isNotEmpty
  28.         ? const BorderSide(
  29.             color: SuperheroesColors.textWhite,
  30.             width: 2,
  31.           )
  32.         : const BorderSide(color: SuperheroesColors.white24, width: 2);
  33.   }
  34.  
  35.   @override
  36.   Widget build(BuildContext context) {
  37.     final MainBloc bloc = Provider.of<MainBloc>(context, listen: false);
  38.     return TextField(
  39.       controller: controller,
  40.       cursorColor: SuperheroesColors.textWhite,
  41.       textInputAction: TextInputAction.search,
  42.       textCapitalization: TextCapitalization.words,
  43.       style: const TextStyle(
  44.           fontWeight: FontWeight.w400,
  45.           fontSize: 20,
  46.           color: SuperheroesColors.textWhite),
  47.       decoration: InputDecoration(
  48.         focusedBorder: OutlineInputBorder(
  49.           borderRadius: BorderRadius.circular(8),
  50.           borderSide: const BorderSide(
  51.             color: SuperheroesColors.textWhite,
  52.             width: 2,
  53.           ),
  54.         ),
  55.         filled: true,
  56.         fillColor: SuperheroesColors.backgroundSecondary75,
  57.         isDense: true,
  58.         border: OutlineInputBorder(
  59.           borderRadius: BorderRadius.circular(8),
  60.         ),
  61.         prefixIcon: const Icon(
  62.           Icons.search,
  63.           color: SuperheroesColors.white54,
  64.           size: 24,
  65.         ),
  66.         suffix: GestureDetector(
  67.           onTap: () => controller.clear(),
  68.           child: const Icon(
  69.             Icons.clear,
  70.             color: SuperheroesColors.textWhite,
  71.             size: 24,
  72.           ),
  73.         ),
  74.         enabledBorder: OutlineInputBorder(
  75.           borderRadius: BorderRadius.circular(8),
  76.           borderSide: _getBorderSideByText(),
  77.         ),
  78.       ),
  79.     );
  80.   }
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement