Fetch account data
This commit is contained in:
parent
26b8e99a90
commit
97f4bc78f0
4 changed files with 46 additions and 2 deletions
16
lib/controllers/account_data_controller.dart
Normal file
16
lib/controllers/account_data_controller.dart
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
import "package:fast_immutable_collections/fast_immutable_collections.dart";
|
||||||
|
import "package:flutter_riverpod/flutter_riverpod.dart";
|
||||||
|
import "package:nexus/models/account_data.dart";
|
||||||
|
|
||||||
|
class AccountDataController extends Notifier<IMap<String, AccountData>> {
|
||||||
|
@override
|
||||||
|
IMap<String, AccountData> build() => const IMap.empty();
|
||||||
|
|
||||||
|
void update(IMap<String, AccountData> newData) =>
|
||||||
|
state = IMap({...state.unlock, ...newData.unlock});
|
||||||
|
|
||||||
|
static final provider =
|
||||||
|
NotifierProvider<AccountDataController, IMap<String, AccountData>>(
|
||||||
|
AccountDataController.new,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
@ -5,6 +5,7 @@ import "package:collection/collection.dart";
|
||||||
import "package:fast_immutable_collections/fast_immutable_collections.dart";
|
import "package:fast_immutable_collections/fast_immutable_collections.dart";
|
||||||
import "package:ffi/ffi.dart";
|
import "package:ffi/ffi.dart";
|
||||||
import "package:flutter/foundation.dart";
|
import "package:flutter/foundation.dart";
|
||||||
|
import "package:nexus/controllers/account_data_controller.dart";
|
||||||
import "package:nexus/controllers/client_state_controller.dart";
|
import "package:nexus/controllers/client_state_controller.dart";
|
||||||
import "package:nexus/controllers/init_complete_controller.dart";
|
import "package:nexus/controllers/init_complete_controller.dart";
|
||||||
import "package:nexus/controllers/rooms_controller.dart";
|
import "package:nexus/controllers/rooms_controller.dart";
|
||||||
|
|
@ -66,16 +67,26 @@ class ClientController extends AsyncNotifier<int> {
|
||||||
case "sync_complete":
|
case "sync_complete":
|
||||||
final syncData = SyncData.fromJson(decodedMuksEvent);
|
final syncData = SyncData.fromJson(decodedMuksEvent);
|
||||||
final roomProvider = RoomsController.provider;
|
final roomProvider = RoomsController.provider;
|
||||||
|
final accountDataProvider = AccountDataController.provider;
|
||||||
|
|
||||||
|
if (syncData.clearState) {
|
||||||
|
ref.invalidate(roomProvider);
|
||||||
|
ref.invalidate(accountDataProvider);
|
||||||
|
}
|
||||||
|
|
||||||
if (syncData.clearState) ref.invalidate(roomProvider);
|
|
||||||
ref
|
ref
|
||||||
.watch(roomProvider.notifier)
|
.watch(roomProvider.notifier)
|
||||||
.update(syncData.rooms, syncData.leftRooms);
|
.update(syncData.rooms, syncData.leftRooms);
|
||||||
|
ref
|
||||||
|
.watch(accountDataProvider.notifier)
|
||||||
|
.update(syncData.accountData);
|
||||||
|
|
||||||
if (syncData.topLevelSpaces != null) {
|
if (syncData.topLevelSpaces != null) {
|
||||||
ref
|
ref
|
||||||
.watch(TopLevelSpacesController.provider.notifier)
|
.watch(TopLevelSpacesController.provider.notifier)
|
||||||
.set(syncData.topLevelSpaces!);
|
.set(syncData.topLevelSpaces!);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (syncData.spaceEdges != null) {
|
if (syncData.spaceEdges != null) {
|
||||||
ref
|
ref
|
||||||
.watch(SpaceEdgesController.provider.notifier)
|
.watch(SpaceEdgesController.provider.notifier)
|
||||||
|
|
|
||||||
16
lib/models/account_data.dart
Normal file
16
lib/models/account_data.dart
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
import "package:freezed_annotation/freezed_annotation.dart";
|
||||||
|
part "account_data.freezed.dart";
|
||||||
|
part "account_data.g.dart";
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
abstract class AccountData with _$AccountData {
|
||||||
|
const factory AccountData({
|
||||||
|
required String userId,
|
||||||
|
required String? roomId,
|
||||||
|
required String type,
|
||||||
|
required dynamic content,
|
||||||
|
}) = _AccountData;
|
||||||
|
|
||||||
|
factory AccountData.fromJson(Map<String, Object?> json) =>
|
||||||
|
_$AccountDataFromJson(json);
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
import "package:fast_immutable_collections/fast_immutable_collections.dart";
|
import "package:fast_immutable_collections/fast_immutable_collections.dart";
|
||||||
import "package:freezed_annotation/freezed_annotation.dart";
|
import "package:freezed_annotation/freezed_annotation.dart";
|
||||||
|
import "package:nexus/models/account_data.dart";
|
||||||
import "package:nexus/models/room.dart";
|
import "package:nexus/models/room.dart";
|
||||||
import "package:nexus/models/space_edge.dart";
|
import "package:nexus/models/space_edge.dart";
|
||||||
part "sync_data.freezed.dart";
|
part "sync_data.freezed.dart";
|
||||||
|
|
@ -9,7 +10,7 @@ part "sync_data.g.dart";
|
||||||
abstract class SyncData with _$SyncData {
|
abstract class SyncData with _$SyncData {
|
||||||
const factory SyncData({
|
const factory SyncData({
|
||||||
@Default(false) bool clearState,
|
@Default(false) bool clearState,
|
||||||
// required IMap<String, AccountData> accountData,
|
@Default(IMap.empty()) IMap<String, AccountData> accountData,
|
||||||
@Default(IMap.empty()) IMap<String, Room> rooms,
|
@Default(IMap.empty()) IMap<String, Room> rooms,
|
||||||
@Default(ISet.empty()) ISet<String> leftRooms,
|
@Default(ISet.empty()) ISet<String> leftRooms,
|
||||||
// required IList<InvitedRoom> invitedRooms,
|
// required IList<InvitedRoom> invitedRooms,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue