searchFieldWidgetFileContent constant

String const searchFieldWidgetFileContent

Implementation

static const String searchFieldWidgetFileContent = """import 'dart:async';
import 'package:flutter/material.dart';

class SearchField extends StatefulWidget {
const SearchField({super.key, required this.searchController, this.onTextChange});
final TextEditingController searchController;
final Function(String text)? onTextChange;

@override
State<SearchField> createState() => _SearchFieldState();
}

class _SearchFieldState extends State<SearchField> {
double height = 40;
bool showClearIcon = false;
Timer? _timer;

@override
void initState() {
  showClearIcon = widget.searchController.text.trim().isNotEmpty;
  super.initState();
}

void onTextChange(String text) {
  if (text.isEmpty && showClearIcon) {
    showClearIcon = false;
    setState(() {});
  } else if (text.isNotEmpty && !showClearIcon) {
    showClearIcon = true;
    setState(() {});
  }
  _timer?.cancel();
  _timer = Timer(const Duration(milliseconds: 300), () => widget.onTextChange?.call(text));
}

@override
Widget build(BuildContext context) {
  return SizedBox(
    height: height,
    width: double.maxFinite,
    child: TextField(
      controller: widget.searchController,
      textAlignVertical: TextAlignVertical.center,
      decoration: InputDecoration(
        filled: true,
        fillColor: Colors.grey.shade300,
        suffixIconConstraints: BoxConstraints(maxWidth: height, minWidth: height, maxHeight: height, minHeight: height),
        constraints: BoxConstraints(minWidth: double.maxFinite, maxWidth: double.maxFinite, maxHeight: height, minHeight: height),
        contentPadding: const EdgeInsets.only(left: 10, right: 10),
        hintText: "Search...",
        prefixIcon: const Icon(Icons.search_outlined),
        suffixIcon: showClearIcon
            ? InkWell(
                onTap: () {
                  widget.searchController.clear();
                  onTextChange("");
                },
                borderRadius: BorderRadius.circular(20),
                child: Center(
                  child: Container(
                    width: 20,
                    height: 20,
                    alignment: Alignment.center,
                    decoration: const BoxDecoration(shape: BoxShape.circle),
                    child: const Icon(Icons.close_outlined, size: 15),
                  ),
                ),
              )
            : null,
        border: OutlineInputBorder(borderRadius: BorderRadius.circular(10), borderSide: BorderSide.none),
        enabledBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(10), borderSide: BorderSide.none),
        focusedBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(10), borderSide: BorderSide.none),
        disabledBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(10), borderSide: BorderSide.none),
      ),
      onChanged: (value) {
        onTextChange(value.trim());
      },
    ),
  );
}
}""";