From 84241d44e53cb4c107e5a931f6008371e7f40dcd Mon Sep 17 00:00:00 2001 From: Ray Jasson <48130098+rayjasson98@users.noreply.github.com> Date: Wed, 6 Jan 2021 16:35:39 +0800 Subject: [PATCH] Fix adding message token error when creating new account - Set an empty token field and update the field 1 second later - A quick and dirty solution that works after delaying the update by 1 second --- .../user/repositories/user_repository.dart | 18 +++++++++++++++--- lib/ui/profile/user_profile_page.dart | 10 +++++++--- lib/utils/message_handler.dart | 9 +++++++-- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/lib/data/user/repositories/user_repository.dart b/lib/data/user/repositories/user_repository.dart index 86660c9..5bcc9e8 100644 --- a/lib/data/user/repositories/user_repository.dart +++ b/lib/data/user/repositories/user_repository.dart @@ -19,13 +19,25 @@ class UserRepository { String get displayName => FirebaseAuth.instance.currentUser.displayName; Future saveToken(String token) async { - await _userDoc.update({ + await _userDoc.set({ 'tokens': FieldValue.arrayUnion([token]), + }, SetOptions(merge: true)); + // Quick and dirty solution, it just works. + Future.delayed(Duration(seconds: 1), () { + _userDoc.update({ + 'tokens': FieldValue.arrayUnion([token]), + }); }); } - Future update(AppUser appUser) async { - await _userDoc.update(appUser.toMap()); + Future deleteToken(String token) { + return _userDoc.update({ + 'tokens': FieldValue.arrayRemove([token]), + }); + } + + Future update(AppUser appUser) { + return _userDoc.update(appUser.toMap()); } Future delete() => _userDoc.delete(); diff --git a/lib/ui/profile/user_profile_page.dart b/lib/ui/profile/user_profile_page.dart index 6ce8795..6554a96 100644 --- a/lib/ui/profile/user_profile_page.dart +++ b/lib/ui/profile/user_profile_page.dart @@ -3,6 +3,7 @@ import 'package:farmassist/bloc/authentication/authentication.dart'; import 'package:farmassist/ui/profile/avatar.dart'; import 'package:farmassist/ui/profile/user_info_field.dart'; import 'package:farmassist/ui/widgets/tab_page.dart'; +import 'package:farmassist/utils/message_handler.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -51,9 +52,12 @@ class _LogOutButton extends StatelessWidget { borderRadius: BorderRadius.circular(30.0), ), color: const Color(0xFFFFD600), - onPressed: () => context - .read() - .add(AuthenticationLogoutRequested()), + onPressed: () async { + await context.read().deleteToken(); + context + .read() + .add(AuthenticationLogoutRequested()); + }, ), ), ), diff --git a/lib/utils/message_handler.dart b/lib/utils/message_handler.dart index 693fb81..1deab24 100644 --- a/lib/utils/message_handler.dart +++ b/lib/utils/message_handler.dart @@ -9,10 +9,15 @@ class MessageHandler { FirebaseMessaging _messaging; UserRepository _userRepository; + String _token; Future generateToken() async { - String token = await _messaging.getToken(); - await _userRepository.saveToken(token); + _token = await _messaging.getToken(); + await _userRepository.saveToken(_token); _messaging.onTokenRefresh.listen(_userRepository.saveToken); } + + Future deleteToken() { + return _userRepository.deleteToken(_token); + } }