creek

The AI Image Editor of 2030

lib/ui/widgets/search_bar.dart (1737B)


 1import 'package:flutter/material.dart';
 2import 'package:creekui/ui/styles/variables.dart';
 3
 4class CommonSearchBar extends StatelessWidget {
 5  final TextEditingController controller;
 6  final ValueChanged<String>? onChanged;
 7  final String hintText;
 8  final Color? backgroundColor;
 9
10  const CommonSearchBar({
11    super.key,
12    required this.controller,
13    this.onChanged,
14    this.hintText = 'Search',
15    this.backgroundColor,
16  });
17
18  @override
19  Widget build(BuildContext context) {
20    return TextField(
21      controller: controller,
22      onChanged: onChanged,
23      style: Variables.bodyStyle,
24      decoration: InputDecoration(
25        hintText: hintText,
26        hintStyle: Variables.bodyStyle.copyWith(
27          color: Variables.textSecondary.withOpacity(0.5),
28        ),
29        prefixIcon: Icon(
30          Icons.search,
31          size: 18,
32          color: Variables.textSecondary.withOpacity(0.5),
33        ),
34        prefixIconConstraints: const BoxConstraints(
35          minWidth: 50,
36          minHeight: 18,
37        ),
38        filled: true,
39        fillColor: backgroundColor ?? Variables.surfaceSubtle,
40        border: OutlineInputBorder(
41          borderRadius: BorderRadius.circular(Variables.radiusSmall),
42          borderSide: BorderSide.none,
43        ),
44        enabledBorder: OutlineInputBorder(
45          borderRadius: BorderRadius.circular(Variables.radiusSmall),
46          borderSide: BorderSide.none,
47        ),
48        focusedBorder: OutlineInputBorder(
49          borderRadius: BorderRadius.circular(Variables.radiusSmall),
50          borderSide: BorderSide.none,
51        ),
52        contentPadding: const EdgeInsets.symmetric(
53          horizontal: 16,
54          vertical: 12,
55        ),
56      ),
57    );
58  }
59}