Add Function sendPushMessage and fix error UserService
continuous-integration/drone/push Build is passing Details

pull/42/head
Emre KARTAL 2 years ago
parent e4364cfb1e
commit 5ef83b3340

@ -3,6 +3,7 @@ import 'package:audioplayers/audioplayers.dart';
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
@ -16,7 +17,6 @@ import 'package:justmusic/screens/post_screen.dart';
import 'package:justmusic/screens/profile_screen.dart'; import 'package:justmusic/screens/profile_screen.dart';
import 'package:justmusic/screens/registration_screen.dart'; import 'package:justmusic/screens/registration_screen.dart';
import 'package:justmusic/screens/welcome_screen.dart'; import 'package:justmusic/screens/welcome_screen.dart';
import 'package:justmusic/services/NotificationService.dart';
import 'package:justmusic/values/constants.dart'; import 'package:justmusic/values/constants.dart';
import 'package:justmusic/view_model/MusicViewModel.dart'; import 'package:justmusic/view_model/MusicViewModel.dart';
import 'package:justmusic/view_model/PostViewModel.dart'; import 'package:justmusic/view_model/PostViewModel.dart';
@ -29,7 +29,7 @@ Future<void> main() async {
await Firebase.initializeApp( await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform, options: DefaultFirebaseOptions.currentPlatform,
); );
await NotificationService().initNotifications(); await FirebaseMessaging.instance.requestPermission(sound: true);
runApp(const MyApp()); runApp(const MyApp());
} }
@ -63,7 +63,8 @@ class _MyAppState extends State<MyApp> {
print('User is currently signed out!'); print('User is currently signed out!');
return null; return null;
} else { } else {
MyApp.userViewModel.userCurrent = (await (MyApp.userViewModel.getUser(user.uid)))!; MyApp.userViewModel.userCurrent =
(await (MyApp.userViewModel.getUser(user.uid)))!;
userCurrent = Stream.value(MyApp.userViewModel.userCurrent); userCurrent = Stream.value(MyApp.userViewModel.userCurrent);
print('User is signed in!'); print('User is signed in!');
} }
@ -121,7 +122,8 @@ class _MyAppState extends State<MyApp> {
return AnimatedSwitcher( return AnimatedSwitcher(
duration: Duration(milliseconds: 1000), duration: Duration(milliseconds: 1000),
transitionBuilder: (child, animation) { transitionBuilder: (child, animation) {
return FadeTransition(opacity: animation, child: child); return FadeTransition(
opacity: animation, child: child);
}, },
child: FeedScreen(), child: FeedScreen(),
); );

@ -4,13 +4,14 @@ class User {
String _uniquePseudo; String _uniquePseudo;
String _mail; String _mail;
String _pp; String _pp;
String _token;
List<String> _followers; List<String> _followers;
int _capsules; int _capsules;
List<String> _followed; List<String> _followed;
// Constructor // Constructor
User(this._id, this._pseudo, this._uniquePseudo, this._mail, User(this._id, this._pseudo, this._uniquePseudo, this._mail, this._pp,
this._pp, this._followers, this._capsules, this._followed); this._token, this._followers, this._capsules, this._followed);
//Getters and setters //Getters and setters
String get id => _id; String get id => _id;
@ -39,6 +40,12 @@ class User {
_pp = value; _pp = value;
} }
String get token => _token;
set token(String value) {
_token = value;
}
int get capsules => _capsules; int get capsules => _capsules;
set capsules(int value) { set capsules(int value) {

@ -10,6 +10,7 @@ class UserMapper {
data?["unique_id"], data?["unique_id"],
data?["mail"], data?["mail"],
data?["picture"], data?["picture"],
data?["token_notify"],
List<String>.from(data?["followers"] as List), List<String>.from(data?["followers"] as List),
data?["nbCapsules"] ?? 0, data?["nbCapsules"] ?? 0,
List<String>.from(data?["followed"] as List)); List<String>.from(data?["followed"] as List));

@ -1,15 +1,24 @@
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/foundation.dart';
import '../main.dart'; import '../main.dart';
class AuthService { class AuthService {
register(String pseudo, String email, String password) async { register(String pseudo, String email, String password) async {
try { try {
var token;
final data = await FirebaseAuth.instance.createUserWithEmailAndPassword( final data = await FirebaseAuth.instance.createUserWithEmailAndPassword(
email: email, email: email,
password: password, password: password,
); );
if (kIsWeb) {
token = "empty";
} else {
token = await FirebaseMessaging.instance.getToken();
}
String uniqueId = await generateUniqueId(pseudo); String uniqueId = await generateUniqueId(pseudo);
final user = <String, dynamic>{ final user = <String, dynamic>{
@ -19,6 +28,7 @@ class AuthService {
"followed": [], "followed": [],
"nbCapsules": 0, "nbCapsules": 0,
"followers": [], "followers": [],
"token_notify": token,
"picture": "picture":
"https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/justMusicDefaultImage.png?alt=media&token=020d0fcb-b7df-4d4d-b380-e99597293fcc" "https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/justMusicDefaultImage.png?alt=media&token=020d0fcb-b7df-4d4d-b380-e99597293fcc"
}; };

@ -1,18 +1,30 @@
import 'package:firebase_messaging/firebase_messaging.dart'; import 'dart:convert';
import 'package:http/http.dart' as http;
class NotificationService { class NotificationService {
final _firebaseMessaging = FirebaseMessaging.instance; sendPushMessage(String token, String title, String body) async {
try {
Future<void> handleBackgroundMessage(RemoteMessage message) async { await http.post(Uri.parse('https://fcm.googleapis.com/fcm/send'),
print('Title: ${message.notification?.title}'); headers: <String, String>{
print('Body: ${message.notification?.body}'); 'Content-Type': 'application/json',
print('Payload: ${message.data}'); 'Authorization': 'key='
},
body: jsonEncode(<String, dynamic>{
'priority': 'high',
'data': <String, dynamic>{
'click_action': 'FLUTTER_NOTIFICATION_CLICK',
'status': 'done',
'body': body,
'title': title
},
"notification": <String, dynamic>{
"title": title,
"body": body,
},
"to": token,
}));
} catch (e) {
print("error push notification");
} }
Future<void> initNotifications() async {
await _firebaseMessaging.requestPermission();
final token = await _firebaseMessaging.getToken();
print("Grrrpaw:"+token!);
//FirebaseMessaging.onBackgroundMessage(handleBackgroundMessage);
} }
} }

@ -56,7 +56,7 @@ class PostService {
.get(); .get();
var filteredPosts = response.docs.where((doc) { var filteredPosts = response.docs.where((doc) {
String user = doc["user_id"]; // Assuming the field name is "date" String user = doc["user_id"];
return user != MyApp.userViewModel.userCurrent.id; return user != MyApp.userViewModel.userCurrent.id;
}).toList(); }).toList();
return filteredPosts; return filteredPosts;

@ -3,11 +3,14 @@ import 'package:cloud_firestore/cloud_firestore.dart';
import '../main.dart'; import '../main.dart';
class UserService { class UserService {
Future<List<QueryDocumentSnapshot<Map<String, dynamic>>>> getUsersByIdUnique(String uniqueId) async { Future<List<QueryDocumentSnapshot<Map<String, dynamic>>>> getUsersByIdUnique(
QuerySnapshot<Map<String, dynamic>> response = await FirebaseFirestore.instance String uniqueId) async {
QuerySnapshot<Map<String, dynamic>> response = await FirebaseFirestore
.instance
.collection("users") .collection("users")
.where("unique_id", isGreaterThanOrEqualTo: uniqueId) .where("unique_id", isGreaterThanOrEqualTo: uniqueId)
.where("unique_id", isLessThanOrEqualTo: uniqueId + "zzzzzzzzzzzzzzzzzzzzzzzzzzzz") .where("unique_id",
isLessThanOrEqualTo: uniqueId + "zzzzzzzzzzzzzzzzzzzzzzzzzzzz")
.limit(20) .limit(20)
.get(); .get();
var users = response.docs.where((doc) { var users = response.docs.where((doc) {
@ -18,8 +21,20 @@ class UserService {
return users; return users;
} }
updateTokenNotify(String idUser, String token) {
FirebaseFirestore.instance
.collection('users')
.doc(idUser)
.update({'token_notify': token}).then((_) {
print("Mise à jour réussie !");
}).catchError((error) {
print("Erreur lors de la mise à jour : $error");
});
}
addOrDeleteFriend(String id) async { addOrDeleteFriend(String id) async {
var userRef = MyApp.db.collection("users").doc(MyApp.userViewModel.userCurrent.id); var userRef =
MyApp.db.collection("users").doc(MyApp.userViewModel.userCurrent.id);
var actionUserRef = MyApp.db.collection("users").doc(id); var actionUserRef = MyApp.db.collection("users").doc(id);
if (MyApp.userViewModel.isFriend(id)) { if (MyApp.userViewModel.isFriend(id)) {
@ -28,7 +43,7 @@ class UserService {
'followed': FieldValue.arrayRemove([id]) 'followed': FieldValue.arrayRemove([id])
}); });
transaction.update(actionUserRef, { transaction.update(actionUserRef, {
'followers': FieldValue.arrayRemove([id]) 'followers': FieldValue.arrayRemove([userRef.id])
}); });
}); });
MyApp.userViewModel.userCurrent.followed.remove(id); MyApp.userViewModel.userCurrent.followed.remove(id);
@ -38,7 +53,7 @@ class UserService {
'followed': FieldValue.arrayUnion([id]) 'followed': FieldValue.arrayUnion([id])
}); });
transaction.update(actionUserRef, { transaction.update(actionUserRef, {
'followers': FieldValue.arrayUnion([id]) 'followers': FieldValue.arrayUnion([userRef.id])
}); });
}); });
MyApp.userViewModel.userCurrent.followed.add(id); MyApp.userViewModel.userCurrent.followed.add(id);

@ -1,4 +1,6 @@
import 'package:firebase_auth/firebase_auth.dart' as firebase_auth; import 'package:firebase_auth/firebase_auth.dart' as firebase_auth;
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/foundation.dart';
import 'package:justmusic/services/AuthService.dart'; import 'package:justmusic/services/AuthService.dart';
import 'package:justmusic/services/UserService.dart'; import 'package:justmusic/services/UserService.dart';
@ -27,8 +29,20 @@ class UserViewModel {
login(String pseudo, String password) async { login(String pseudo, String password) async {
try { try {
var token;
await authService.login(pseudo, password); await authService.login(pseudo, password);
final user = await MyApp.db.collection("users").doc(firebase_auth.FirebaseAuth.instance.currentUser?.uid).get(); final user = await MyApp.db
.collection("users")
.doc(firebase_auth.FirebaseAuth.instance.currentUser?.uid)
.get();
if (!kIsWeb) {
token = await FirebaseMessaging.instance.getToken();
if (MyApp.userViewModel.userCurrent.token != token) {
_userService.updateTokenNotify(
MyApp.userViewModel.userCurrent.id, token);
MyApp.userViewModel.userCurrent.token = token;
}
}
User data = UserMapper.toModel(user); User data = UserMapper.toModel(user);
_userCurrent = data; _userCurrent = data;
} catch (e) { } catch (e) {
@ -43,7 +57,10 @@ class UserViewModel {
updateUserCurrent() async { updateUserCurrent() async {
try { try {
final user = await MyApp.db.collection("users").doc(firebase_auth.FirebaseAuth.instance.currentUser?.uid).get(); final user = await MyApp.db
.collection("users")
.doc(firebase_auth.FirebaseAuth.instance.currentUser?.uid)
.get();
User data = UserMapper.toModel(user); User data = UserMapper.toModel(user);
_userCurrent = data; _userCurrent = data;
} catch (e) { } catch (e) {
@ -58,7 +75,10 @@ class UserViewModel {
try { try {
await authService.register(pseudo.toLowerCase(), email, password); await authService.register(pseudo.toLowerCase(), email, password);
final user = await MyApp.db.collection("users").doc(firebase_auth.FirebaseAuth.instance.currentUser?.uid).get(); final user = await MyApp.db
.collection("users")
.doc(firebase_auth.FirebaseAuth.instance.currentUser?.uid)
.get();
User data = UserMapper.toModel(user); User data = UserMapper.toModel(user);
_userCurrent = data; _userCurrent = data;
} catch (e) { } catch (e) {
@ -68,7 +88,8 @@ class UserViewModel {
Future<List<User>> getUsersByUniqueId(String uniqueId) async { Future<List<User>> getUsersByUniqueId(String uniqueId) async {
try { try {
var response = await _userService.getUsersByIdUnique(uniqueId.toLowerCase()); var response =
await _userService.getUsersByIdUnique(uniqueId.toLowerCase());
var users = response.map((value) { var users = response.map((value) {
return UserMapper.toModel(value); return UserMapper.toModel(value);
}).toList(); }).toList();

Loading…
Cancel
Save