kopia lustrzana https://gitlab.com/mysocialportal/relatica
Rework notifications refresh initial page algorithm to make more robust
rodzic
951f50ee7a
commit
119fe9ca16
|
@ -80,32 +80,52 @@ class NotificationsManager extends ChangeNotifier {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
final page = _pm.pages[i];
|
final page = _pm.pages[i];
|
||||||
PagingData? pd;
|
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
if (page.next == null) {
|
PagingData? pd;
|
||||||
_logger.severe(
|
bool initializedFirstPage = false;
|
||||||
"Expected first page to have a next page so can query on this page of data but doesn't exist.");
|
if (page.next != null) {
|
||||||
continue;
|
final response = await _clientGetNotificationsRequest(page.next!);
|
||||||
}
|
|
||||||
final response = await _clientGetNotificationsRequest(page.next!);
|
|
||||||
response.match(
|
|
||||||
onSuccess: (response) => pd = response.previous,
|
|
||||||
onError: (error) =>
|
|
||||||
_logger.severe('Error getting previous page: $error'));
|
|
||||||
if (pd == null && page.previous == null) {
|
|
||||||
_logger.severe(
|
|
||||||
'Next page returned no results and no previous page so need to re-initalize');
|
|
||||||
} else {
|
|
||||||
final response = await _clientGetNotificationsRequest(pd!);
|
|
||||||
response.match(
|
response.match(
|
||||||
onSuccess: (response) => pd = response.next,
|
onSuccess: (response) => pd = response.previous,
|
||||||
onError: (error) =>
|
onError: (error) =>
|
||||||
_logger.severe('Error getting previous page: $error'));
|
_logger.severe('Error getting previous page: $error'));
|
||||||
|
if (pd != null) {
|
||||||
|
final response = await _clientGetNotificationsRequest(pd!);
|
||||||
|
response.match(
|
||||||
|
onSuccess: (response) {
|
||||||
|
initializedFirstPage = true;
|
||||||
|
notificationsFromRefresh.addAll(response.data);
|
||||||
|
},
|
||||||
|
onError: (error) =>
|
||||||
|
_logger.severe('Error getting previous page: $error'));
|
||||||
|
} else if (pd == null && page.previous != null) {
|
||||||
|
final response = await _clientGetNotificationsRequest(
|
||||||
|
page.previous!)
|
||||||
|
.andThenAsync((previousData) async => previousData.next !=
|
||||||
|
null
|
||||||
|
? await _clientGetNotificationsRequest(previousData.next!)
|
||||||
|
: buildErrorResult(
|
||||||
|
type: ErrorType.rangeError,
|
||||||
|
message: 'No "next" page from previous data either'));
|
||||||
|
response.match(
|
||||||
|
onSuccess: (response) {
|
||||||
|
initializedFirstPage = true;
|
||||||
|
notificationsFromRefresh.addAll(response.data);
|
||||||
|
},
|
||||||
|
onError: (error) =>
|
||||||
|
_logger.severe('Error getting previous page: $error'));
|
||||||
|
} else if (pd == null && page.previous == null) {
|
||||||
|
_logger.severe(
|
||||||
|
'Next page returned no results and no previous page so will need to re-initalize');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
_logger.severe(
|
||||||
|
'There is no next page to query so will be forced to reset');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pd == null) {
|
if (!initializedFirstPage) {
|
||||||
_logger.severe(
|
_logger.severe(
|
||||||
'Previous and next page both returned nulls so need to reinitialize');
|
'Unable to determine call to rebuild initial page so resetting');
|
||||||
_pm.clear();
|
_pm.clear();
|
||||||
final result = await _pm.initialize(initialPull);
|
final result = await _pm.initialize(initialPull);
|
||||||
result.andThenSuccess(
|
result.andThenSuccess(
|
||||||
|
@ -126,7 +146,7 @@ class NotificationsManager extends ChangeNotifier {
|
||||||
onSuccess: (response) =>
|
onSuccess: (response) =>
|
||||||
notificationsFromRefresh.addAll(response.data),
|
notificationsFromRefresh.addAll(response.data),
|
||||||
onError: (error) =>
|
onError: (error) =>
|
||||||
_logger.severe('Error getting previous page: $error'));
|
_logger.severe('Error getting next page: $error'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue