feat: HOME-007 — server-side event title/description search (q param)
This commit is contained in:
@@ -302,7 +302,9 @@ class _HomeScreenState extends State<HomeScreen> with SingleTickerProviderStateM
|
||||
builder: (context, scrollController) {
|
||||
String query = '';
|
||||
List<EventModel> results = List.from(_events);
|
||||
bool searching = false;
|
||||
return StatefulBuilder(builder: (context, setModalState) {
|
||||
// Instant client-side filter while typing
|
||||
void _onQueryChanged(String v) {
|
||||
query = v.trim().toLowerCase();
|
||||
final r = _events.where((e) {
|
||||
@@ -314,6 +316,22 @@ class _HomeScreenState extends State<HomeScreen> with SingleTickerProviderStateM
|
||||
});
|
||||
}
|
||||
|
||||
// Server-side search on submit (keyboard action / enter)
|
||||
Future<void> _onSubmitted(String v) async {
|
||||
final q = v.trim();
|
||||
if (q.isEmpty) return;
|
||||
setModalState(() => searching = true);
|
||||
try {
|
||||
final serverResults = await _eventsService.getEventsByPincode(_pincode, q: q);
|
||||
setModalState(() {
|
||||
results = serverResults;
|
||||
searching = false;
|
||||
});
|
||||
} catch (_) {
|
||||
setModalState(() => searching = false);
|
||||
}
|
||||
}
|
||||
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
color: theme.cardColor,
|
||||
@@ -357,7 +375,7 @@ class _HomeScreenState extends State<HomeScreen> with SingleTickerProviderStateM
|
||||
autofocus: true,
|
||||
onChanged: _onQueryChanged,
|
||||
textInputAction: TextInputAction.search,
|
||||
onSubmitted: (v) => _onQueryChanged(v),
|
||||
onSubmitted: _onSubmitted,
|
||||
),
|
||||
)
|
||||
],
|
||||
@@ -372,7 +390,7 @@ class _HomeScreenState extends State<HomeScreen> with SingleTickerProviderStateM
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
if (_loading)
|
||||
if (_loading || searching)
|
||||
Center(child: CircularProgressIndicator(color: theme.colorScheme.primary))
|
||||
else if (results.isEmpty)
|
||||
Padding(
|
||||
|
||||
Reference in New Issue
Block a user