mirror of
https://gitlab.com/mysocialportal/relatica
synced 2024-10-18 15:53:32 +00:00
Fix search screen not properly clearing results on profile swap
This commit is contained in:
parent
034343936e
commit
a536576a83
1 changed files with 25 additions and 12 deletions
|
@ -35,11 +35,12 @@ class SearchScreen extends StatefulWidget {
|
||||||
class _SearchScreenState extends State<SearchScreen> {
|
class _SearchScreenState extends State<SearchScreen> {
|
||||||
static const limit = 50;
|
static const limit = 50;
|
||||||
static final _logger = Logger('$SearchScreen');
|
static final _logger = Logger('$SearchScreen');
|
||||||
var searchText = '';
|
var searchTextController = TextEditingController();
|
||||||
var searchType = SearchTypes.statusesText;
|
var searchType = SearchTypes.statusesText;
|
||||||
var searching = false;
|
var searching = false;
|
||||||
PagingData nextPage = PagingData(limit: limit);
|
PagingData nextPage = PagingData(limit: limit);
|
||||||
var searchResult = SearchResults.empty();
|
var searchResult = SearchResults.empty();
|
||||||
|
Profile? profileOfSearchRequest;
|
||||||
|
|
||||||
PagingData genNextPageData() {
|
PagingData genNextPageData() {
|
||||||
late final int offset;
|
late final int offset;
|
||||||
|
@ -71,13 +72,14 @@ class _SearchScreenState extends State<SearchScreen> {
|
||||||
searching = true;
|
searching = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
print('Search $searchType on $searchText');
|
print('Search $searchType on ${searchTextController.text}');
|
||||||
final result =
|
final result = await SearchClient(profile)
|
||||||
await SearchClient(profile).search(searchType, searchText, nextPage);
|
.search(searchType, searchTextController.text, nextPage);
|
||||||
result.match(
|
result.match(
|
||||||
onSuccess: (result) {
|
onSuccess: (result) {
|
||||||
searchResult = reset ? result.data : searchResult.merge(result.data);
|
searchResult = reset ? result.data : searchResult.merge(result.data);
|
||||||
nextPage = result.next ?? genNextPageData();
|
nextPage = result.next ?? genNextPageData();
|
||||||
|
profileOfSearchRequest = profile;
|
||||||
},
|
},
|
||||||
onError: (error) =>
|
onError: (error) =>
|
||||||
buildSnackbar(context, 'Error getting search result: $error'),
|
buildSnackbar(context, 'Error getting search result: $error'),
|
||||||
|
@ -88,6 +90,15 @@ class _SearchScreenState extends State<SearchScreen> {
|
||||||
print('Ending update');
|
print('Ending update');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clearSearchResults() {
|
||||||
|
print('Clearing results');
|
||||||
|
setState(() {
|
||||||
|
searchResult = SearchResults.empty();
|
||||||
|
searchTextController.text = '';
|
||||||
|
searching = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
_logger.info('Build');
|
_logger.info('Build');
|
||||||
|
@ -96,13 +107,17 @@ class _SearchScreenState extends State<SearchScreen> {
|
||||||
final profile = profileService.currentProfile;
|
final profile = profileService.currentProfile;
|
||||||
late Widget body;
|
late Widget body;
|
||||||
|
|
||||||
|
if (profile != profileOfSearchRequest) {
|
||||||
|
clearSearchResults();
|
||||||
|
}
|
||||||
|
|
||||||
if (searchResult.isEmpty && searching) {
|
if (searchResult.isEmpty && searching) {
|
||||||
body = Center(
|
body = Center(
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
'Searching for ${searchType.toLabel()} on: $searchText',
|
'Searching for ${searchType.toLabel()} on: ${searchTextController.text}',
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
@ -112,7 +127,7 @@ class _SearchScreenState extends State<SearchScreen> {
|
||||||
}
|
}
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
drawer: const StandardAppDrawer(skipPopDismiss: true),
|
drawer: const StandardAppDrawer(skipPopDismiss: false),
|
||||||
body: SafeArea(
|
body: SafeArea(
|
||||||
child: RefreshIndicator(
|
child: RefreshIndicator(
|
||||||
onRefresh: () async {
|
onRefresh: () async {
|
||||||
|
@ -132,11 +147,9 @@ class _SearchScreenState extends State<SearchScreen> {
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.all(8.0),
|
padding: const EdgeInsets.all(8.0),
|
||||||
child: TextField(
|
child: TextField(
|
||||||
onChanged: (value) {
|
controller: searchTextController,
|
||||||
searchText = value;
|
|
||||||
},
|
|
||||||
onSubmitted: (value) {
|
onSubmitted: (value) {
|
||||||
searchText = value;
|
searchTextController.text = value;
|
||||||
updateSearchResults(profile);
|
updateSearchResults(profile);
|
||||||
},
|
},
|
||||||
onTapOutside: (event) {
|
onTapOutside: (event) {
|
||||||
|
@ -293,9 +306,9 @@ class _SearchScreenState extends State<SearchScreen> {
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
Text(searchText.isEmpty
|
Text(searchTextController.text.isEmpty
|
||||||
? 'Type search text to search'
|
? 'Type search text to search'
|
||||||
: 'No results for ${searchType.toLabel()} search on: $searchText'),
|
: 'No results for ${searchType.toLabel()} search on: ${searchTextController.text}'),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in a new issue