mirror of
https://gitlab.com/mysocialportal/relatica
synced 2024-10-18 12:23:31 +00:00
Change Contacts update to live update
This commit is contained in:
parent
a536576a83
commit
5c54726ebb
2 changed files with 39 additions and 10 deletions
|
@ -13,9 +13,11 @@ import '../controls/status_and_refresh_button.dart';
|
|||
import '../globals.dart';
|
||||
import '../models/connection.dart';
|
||||
import '../routes.dart';
|
||||
import '../services/auth_service.dart';
|
||||
import '../services/connections_manager.dart';
|
||||
import '../services/network_status_service.dart';
|
||||
import '../utils/active_profile_selector.dart';
|
||||
import '../utils/snackbar_builder.dart';
|
||||
|
||||
class ContactsScreen extends StatefulWidget {
|
||||
const ContactsScreen({super.key});
|
||||
|
@ -27,9 +29,11 @@ class ContactsScreen extends StatefulWidget {
|
|||
class _ContactsScreenState extends State<ContactsScreen> {
|
||||
static final _logger = Logger('$ContactsScreen');
|
||||
var filterText = '';
|
||||
var updateBeingProcessed = false;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
context.watch<AccountsService>();
|
||||
final nss = getIt<NetworkStatusService>();
|
||||
final manager = context
|
||||
.watch<ActiveProfileSelector<ConnectionsManager>>()
|
||||
|
@ -87,15 +91,11 @@ class _ContactsScreenState extends State<ContactsScreen> {
|
|||
}
|
||||
|
||||
return Scaffold(
|
||||
drawer: const StandardAppDrawer(skipPopDismiss: true),
|
||||
drawer: const StandardAppDrawer(skipPopDismiss: false),
|
||||
body: SafeArea(
|
||||
child: RefreshIndicator(
|
||||
onRefresh: () async {
|
||||
if (nss.connectionUpdateStatus.value) {
|
||||
return;
|
||||
}
|
||||
manager.updateAllContacts(false);
|
||||
return;
|
||||
await performFullUpdate(nss, manager);
|
||||
},
|
||||
child: Column(
|
||||
children: [
|
||||
|
@ -128,10 +128,10 @@ class _ContactsScreenState extends State<ContactsScreen> {
|
|||
Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: StatusAndRefreshButton(
|
||||
valueListenable: nss.connectionUpdateStatus,
|
||||
refreshFunction: () async =>
|
||||
manager.updateAllContacts(false),
|
||||
),
|
||||
valueListenable: nss.connectionUpdateStatus,
|
||||
refreshFunction: () async {
|
||||
await performFullUpdate(nss, manager);
|
||||
}),
|
||||
)
|
||||
],
|
||||
),
|
||||
|
@ -147,4 +147,29 @@ class _ContactsScreenState extends State<ContactsScreen> {
|
|||
),
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> performFullUpdate(
|
||||
NetworkStatusService nss,
|
||||
ConnectionsManager manager,
|
||||
) async {
|
||||
if (nss.connectionUpdateStatus.value) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (updateBeingProcessed) {
|
||||
buildSnackbar(
|
||||
context,
|
||||
'Update already underway and cannot be requested again.',
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
buildSnackbar(
|
||||
context,
|
||||
'Beginning updating contact list which takes some time...',
|
||||
);
|
||||
updateBeingProcessed = true;
|
||||
await manager.updateAllContacts(false);
|
||||
updateBeingProcessed = false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -189,6 +189,8 @@ class ConnectionsManager extends ChangeNotifier {
|
|||
}, onError: (error) {
|
||||
_logger.severe('Error getting followers data: $error');
|
||||
});
|
||||
upsertAllConnections(results.values);
|
||||
notifyListeners();
|
||||
await Future.delayed(delay);
|
||||
}
|
||||
|
||||
|
@ -210,6 +212,8 @@ class ConnectionsManager extends ChangeNotifier {
|
|||
currentPage = following.next!;
|
||||
}
|
||||
moreResults = following.next != null;
|
||||
upsertAllConnections(results.values);
|
||||
notifyListeners();
|
||||
}, onError: (error) {
|
||||
_logger.severe('Error getting followers data: $error');
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue