Files
Casha/lib/features/dashboard/widgets/search_bar.dart
T
2026-03-21 12:06:39 +03:00

70 lines
2.2 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../../core/l10n/app_strings.dart';
import '../provider.dart';
class SearchBar extends StatelessWidget {
final TextEditingController controller;
final FocusNode focusNode;
final VoidCallback onTap;
final WidgetRef ref;
final AppStrings strings;
const SearchBar({
super.key,
required this.controller,
required this.focusNode,
required this.onTap,
required this.ref,
required this.strings,
});
@override
Widget build(BuildContext context) {
final isDark = Theme.of(context).brightness == Brightness.dark;
return TextField(
controller: controller,
focusNode: focusNode,
onTap: onTap,
decoration: InputDecoration(
hintText: strings.searchHint,
prefixIcon: Icon(
Icons.search_rounded,
color: Theme.of(context).colorScheme.onSurface.withOpacity(0.6),
),
suffixIcon: controller.text.isNotEmpty
? IconButton(
icon: const Icon(Icons.clear_rounded, size: 20),
color: Theme.of(context).colorScheme.onSurface.withOpacity(0.6),
onPressed: () {
controller.clear();
ref.read(searchQueryProvider.notifier).state = '';
},
)
: null,
filled: true,
fillColor: Theme.of(context).inputDecorationTheme.fillColor,
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: BorderSide(
color: isDark ? Colors.transparent : const Color(0xFFCCCCDD),
width: 1,
),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: const BorderSide(color: Color(0xFF7C6DED), width: 1.5),
),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: BorderSide.none,
),
contentPadding: const EdgeInsets.symmetric(
horizontal: 16,
vertical: 12,
),
),
onChanged: (v) => ref.read(searchQueryProvider.notifier).state = v,
);
}
}