@@ -8,6 +8,7 @@ import 'package:lichess_mobile/src/styles/styles.dart';
88import 'package:lichess_mobile/src/utils/navigation.dart' ;
99import 'package:lichess_mobile/src/widgets/adaptive_action_sheet.dart' ;
1010import 'package:lichess_mobile/src/widgets/haptic_refresh_indicator.dart' ;
11+ import 'package:lichess_mobile/src/widgets/platform_search_bar.dart' ;
1112
1213class HttpLogScreen extends ConsumerStatefulWidget {
1314 const HttpLogScreen ({super .key});
@@ -23,6 +24,8 @@ class HttpLogScreen extends ConsumerStatefulWidget {
2324class _HttpLogScreenState extends ConsumerState <HttpLogScreen > {
2425 final ScrollController _scrollController = ScrollController ();
2526 final GlobalKey <RefreshIndicatorState > _refreshIndicatorKey = GlobalKey <RefreshIndicatorState >();
27+ final TextEditingController _searchController = TextEditingController ();
28+ String ? _searchQuery;
2629
2730 @override
2831 void initState () {
@@ -34,26 +37,27 @@ class _HttpLogScreenState extends ConsumerState<HttpLogScreen> {
3437 void dispose () {
3538 _scrollController.removeListener (_scrollListener);
3639 _scrollController.dispose ();
40+ _searchController.dispose ();
3741 super .dispose ();
3842 }
3943
4044 void _scrollListener () {
4145 if (_scrollController.position.pixels >= _scrollController.position.maxScrollExtent - 300 ) {
42- final currentState = ref.read (httpLogPaginatorProvider);
46+ final currentState = ref.read (httpLogPaginatorProvider (_searchQuery) );
4347 if (currentState.hasValue && ! currentState.isLoading && currentState.requireValue.hasMore) {
44- ref.read (httpLogPaginatorProvider.notifier).next ();
48+ ref.read (httpLogPaginatorProvider (_searchQuery) .notifier).next ();
4549 }
4650 }
4751 }
4852
4953 Future <void > _onRefresh () async {
5054 await Future <void >.delayed (const Duration (milliseconds: 300 ));
51- return ref.read (httpLogPaginatorProvider.notifier).refresh ();
55+ return ref.read (httpLogPaginatorProvider (_searchQuery) .notifier).refresh ();
5256 }
5357
5458 @override
5559 Widget build (BuildContext context) {
56- final asyncState = ref.watch (httpLogPaginatorProvider);
60+ final asyncState = ref.watch (httpLogPaginatorProvider (_searchQuery) );
5761 return Scaffold (
5862 appBar: AppBar (
5963 title: const Text ('HTTP logs' ),
@@ -68,11 +72,29 @@ class _HttpLogScreenState extends ConsumerState<HttpLogScreen> {
6872 context,
6973 // TODO localize
7074 title: const Text ('Delete all logs' ),
71- onConfirm: () => ref.read (httpLogPaginatorProvider.notifier).deleteAll (),
75+ onConfirm: () =>
76+ ref.read (httpLogPaginatorProvider (_searchQuery).notifier).deleteAll (),
7277 );
7378 },
7479 ),
7580 ],
81+ bottom: PreferredSize (
82+ preferredSize: const Size .fromHeight (60.0 ),
83+ child: Padding (
84+ padding: const EdgeInsets .symmetric (horizontal: 16.0 , vertical: 8.0 ),
85+ child: PlatformSearchBar (
86+ controller: _searchController,
87+ hintText: 'Search logs...' ,
88+ onChanged: (value) => setState (() {
89+ _searchQuery = value.isEmpty ? null : value;
90+ }),
91+ onClear: () => setState (() {
92+ _searchQuery = null ;
93+ _searchController.clear ();
94+ }),
95+ ),
96+ ),
97+ ),
7698 ),
7799 body: _HttpLogList (
78100 scrollController: _scrollController,
0 commit comments