Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 41 additions & 27 deletions lib/controllers/auth_state_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -39,19 +39,19 @@ class AuthStateController extends GetxController {
account = account ?? AppwriteService.getAccount(),
databases = databases ?? AppwriteService.getDatabases(),
messaging = messaging ?? FirebaseMessaging.instance;
late String? uid;
late String? profileImageID;
late String? displayName;
late String? email;
late String? profileImageUrl;
late String? userName;
late bool? isUserProfileComplete;
late bool? isEmailVerified;
late double ratingTotal;
late int ratingCount;
String? uid;
String? profileImageID;
String? displayName;
String? email;
String? profileImageUrl;
String? userName;
bool? isUserProfileComplete;
bool? isEmailVerified;
double ratingTotal = 5.0;
int ratingCount = 1;
late User appwriteUser;
late List<FollowerUserModel> followerDocuments;
late int reportsCount;
List<FollowerUserModel> followerDocuments = [];
int reportsCount = 0;

FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
Expand Down Expand Up @@ -201,23 +201,25 @@ class AuthStateController extends GetxController {
isEmailVerified = appwriteUser.emailVerification;
uid = appwriteUser.$id;
isUserProfileComplete =
appwriteUser.prefs.data["isUserProfileComplete"] ?? false;
appwriteUser.prefs?.data?['isUserProfileComplete'] ?? false;
if (isUserProfileComplete == true) {
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Document userDataDoc = await databases.getDocument(
databaseId: userDatabaseID,
collectionId: usersCollectionID,
documentId: appwriteUser.$id,
);
profileImageUrl = userDataDoc.data["profileImageUrl"];
profileImageID = userDataDoc.data["profileImageID"];
userName = userDataDoc.data["username"] ?? "unavailable";
ratingTotal = userDataDoc.data["ratingTotal"].toDouble() ?? 5;
ratingCount = userDataDoc.data["ratingCount"] ?? 1;
profileImageUrl = userDataDoc.data['profileImageUrl'];
profileImageID = userDataDoc.data['profileImageID'];
userName = userDataDoc.data['username'] ?? 'unavailable';
ratingTotal = userDataDoc.data['ratingTotal'] is num
? (userDataDoc.data['ratingTotal'] as num).toDouble()
: 5.0;
ratingCount = userDataDoc.data['ratingCount'] ?? 1;
followerDocuments =
(userDataDoc.data["followers"] as List<dynamic>?)?.map((e) {
return FollowerUserModel.fromJson(e);
}).toList() ??
[];
(userDataDoc.data['followers'] as List<dynamic>?)?.map((e) {
return FollowerUserModel.fromJson(e);
}).toList() ??
[];
reportsCount =
(userDataDoc.data['userReports'] as List<dynamic>?)?.length ?? 0;
}
Expand Down Expand Up @@ -266,11 +268,19 @@ class AuthStateController extends GetxController {
Future<void> login(String email, String password) async {
await account.createEmailPasswordSession(email: email, password: password);
await isUserLoggedIn();
await addRegistrationTokentoSubscribedandCreatedUpcomingRooms();
try {
await addRegistrationTokentoSubscribedandCreatedUpcomingRooms();
} catch (e, stack) {
log('Failed to update FCM tokens after login: $e\n$stack');
}
}

Future<void> addRegistrationTokentoSubscribedandCreatedUpcomingRooms() async {
final fcmToken = await messaging.getToken();
if (fcmToken == null || fcmToken.isEmpty) {
log('FCM token unavailable. Skipping token registration updates.');
return;
}

//subscribed Upcoming Rooms
List<Document> subscribedUpcomingRooms = await databases
Expand All @@ -285,7 +295,7 @@ class AuthStateController extends GetxController {
for (var subscription in subscribedUpcomingRooms) {
List<dynamic> registrationTokens =
subscription.data['registrationTokens'];
registrationTokens.add(fcmToken!);
registrationTokens.add(fcmToken);
databases.updateDocument(
databaseId: upcomingRoomsDatabaseId,
collectionId: subscribedUserCollectionId,
Expand All @@ -306,7 +316,7 @@ class AuthStateController extends GetxController {
.then((value) => value.documents);
for (var upcomingRoom in createdUpcomingRooms) {
List<dynamic> creatorFcmTokens = upcomingRoom.data['creator_fcm_tokens'];
creatorFcmTokens.add(fcmToken!);
creatorFcmTokens.add(fcmToken);
databases.updateDocument(
databaseId: upcomingRoomsDatabaseId,
collectionId: upcomingRoomsCollectionId,
Expand All @@ -318,6 +328,10 @@ class AuthStateController extends GetxController {

Future<void> removeRegistrationTokenFromSubscribedUpcomingRooms() async {
final fcmToken = await messaging.getToken();
if (fcmToken == null || fcmToken.isEmpty) {
log('FCM token unavailable. Skipping token removal updates.');
return;
}

//subscribed Upcoming Rooms
List<Document> subscribedUpcomingRooms = await databases
Expand All @@ -332,7 +346,7 @@ class AuthStateController extends GetxController {
for (var subscription in subscribedUpcomingRooms) {
List<dynamic> registrationTokens =
subscription.data['registrationTokens'];
registrationTokens.remove(fcmToken!);
registrationTokens.remove(fcmToken);
databases.updateDocument(
databaseId: upcomingRoomsDatabaseId,
collectionId: subscribedUserCollectionId,
Expand All @@ -353,7 +367,7 @@ class AuthStateController extends GetxController {
.then((value) => value.documents);
for (var upcomingRoom in createdUpcomingRooms) {
List<dynamic> creatorFcmTokens = upcomingRoom.data['creator_fcm_tokens'];
creatorFcmTokens.remove(fcmToken!);
creatorFcmTokens.remove(fcmToken);
databases.updateDocument(
databaseId: upcomingRoomsDatabaseId,
collectionId: upcomingRoomsCollectionId,
Expand Down
6 changes: 0 additions & 6 deletions lib/routes/app_pages.dart
Original file line number Diff line number Diff line change
Expand Up @@ -84,11 +84,6 @@ class AppPages {
page: () => const ResetPasswordScreen(),
binding: ProfileBinding(),
),
GetPage(
name: AppRoutes.resetPassword,
page: () => const ResetPasswordScreen(),
binding: ProfileBinding(),
),
GetPage(
name: AppRoutes.tabview,
page: () => TabViewScreen(),
Expand Down Expand Up @@ -116,7 +111,6 @@ class AppPages {
GetPage(name: AppRoutes.changeEmail, page: () => ChangeEmailScreen()),
GetPage(name: AppRoutes.welcomeScreen, page: () => WelcomeScreen()),
// New Screens
GetPage(name: AppRoutes.loginScreen, page: () => const LoginScreen()),
GetPage(name: AppRoutes.homeScreen, page: () => const HomeScreen()),
GetPage(name: AppRoutes.themeScreen, page: () => ThemeScreen()),
GetPage(
Expand Down
1 change: 1 addition & 0 deletions lib/services/appwrite_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ class AppwriteService {
}

static Account getAccount() {
_client ??= getClient();
_account ??= Account(_client!);
return _account!;
}
Expand Down
10 changes: 2 additions & 8 deletions lib/views/screens/splash_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -55,26 +55,20 @@ class _SplashScreenState extends State<SplashScreen>
Timer(const Duration(milliseconds: 3000), () async {
final result = await Get.find<AboutAppScreenController>().checkForUpdate(
onIgnore: () {
authController.isUserLoggedIn();
Get.offNamed(AppRoutes.landing);
return true;
},
onLater: () {
authController.isUserLoggedIn();
Get.offNamed(AppRoutes.landing);
return true;
},
onUpdate: () {
authController.isUserLoggedIn();
Get.offNamed(AppRoutes.landing);
return true;
},
isManualCheck: false,
);
await authController.isUserLoggedIn();
if (result == UpdateCheckResult.noUpdateAvailable ||
result == UpdateCheckResult.checkFailed) {
authController.isUserLoggedIn();
Get.offNamed(AppRoutes.landing);
return;
}
});
}
Expand Down
Loading