You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

874 lines
29 KiB

import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';
import 'dart:ui';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:connectivity/connectivity.dart';
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
import 'package:flutter_upchunk/flutter_upchunk.dart';
import 'package:path_provider/path_provider.dart';
import 'package:share_plus/share_plus.dart';
import 'package:tapioca/tapioca.dart';
import 'package:teso/Classes/API%20Clasess/PostUpload.dart';
import 'package:teso/Classes/Connection.dart';
import 'package:teso/Classes/Firebase/Posts.dart';
import 'package:teso/Classes/ReportedContent.dart';
import 'package:teso/Classes/Uploading.dart';
import 'package:teso/Pages/Sub_Pages/@Generic/SuccessRedeem.dart';
import 'package:teso/Pages/Sub_Pages/@Generic/ErrorRedeem.dart';
import 'package:teso/Classes/API%20Clasess/CommentsPost.dart';
import 'package:teso/Classes/API%20Clasess/CouponDetails.dart';
import 'package:teso/Classes/API%20Clasess/Post.dart';
import 'package:teso/Classes/API%20Clasess/PostFav.dart';
import 'package:teso/providers/pageAnimations.dart';
import 'package:teso/util/SizeConfig.dart';
import 'package:teso/util/consts.dart';
import 'package:http/http.dart' as http;
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:teso/Classes/TesoUser.dart';
import 'package:teso/Classes/API Clasess/UserFavCategory.dart';
import 'package:teso/Classes/API Clasess/CouponHead.dart';
import 'package:teso/Notifications/NotificationPlugin.dart';
import 'package:teso/Classes/Payload.dart';
class UserProvider extends ChangeNotifier {
UserProvider() {
getCurrentUser();
}
TesoUser currentUser;
List<String> interest = <String>[];
List<FBPosts> posts = <FBPosts>[];
List<TesoUser> friends = <TesoUser>[];
List<CouponDetails> mycoupons = <CouponDetails>[];
List<Uploading> pending = <Uploading>[];
List<UpChunkOptions> uploadOperation = <UpChunkOptions>[];
bool wifi = false;
bool firstTime = true;
bool saving = false;
List<String> blockedContent = <String>[];
List<String> blockedUsers = <String>[];
List<TesoUser> blockUserList = <TesoUser>[];
void updateUser(user) async {
currentUser = await update(user);
SharedPreferences.getInstance().then((prefs) {
prefs.setString("currentUser", currentUser.toString());
});
notifyListeners();
}
void setUser(user) {
currentUser = user;
SharedPreferences.getInstance().then((prefs) {
prefs.setString("currentUser", currentUser.toString());
});
notifyListeners();
}
getPending() {
return pending;
}
getCurrentUser() async {
String currentSaveUser;
SharedPreferences.getInstance().then((prefs) async {
currentSaveUser = prefs.getString("currentUser");
if (currentSaveUser == null) {
} else {
Map<String, dynamic> user =
jsonDecode(currentSaveUser) as Map<String, dynamic>;
TesoUser olduser = TesoUser.fromJSON(user);
currentUser = olduser;
prefs.setString("currentUser", currentUser.toString());
}
});
Future.delayed(Duration(seconds: 5), () => notifyListeners());
return currentUser;
}
setFavs(List<String> categories) {
interest = categories;
SharedPreferences.getInstance().then((prefs) {
prefs.setStringList("favoriteCats", categories);
});
notifyListeners();
}
getFavs() async {
try {
await pullFavoriteCategories();
} catch (e) {
SharedPreferences.getInstance().then((prefs) {
interest = prefs.getStringList("favoriteCats");
if (interest != null) if (interest.isEmpty) {
interest = <String>[];
}
});
}
}
Future<TesoUser> update(TesoUser user) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': prefs.getString('tokensTeso')
};
var register2 = serverLocation + 'users/updateUser';
var client1 = await http.post(Uri.parse(register2),
body: json.encode(user), headers: requestHeaders);
if (client1.statusCode == 200) {
Map handler = jsonDecode(client1.body);
TesoUser tokenHandler = TesoUser.fromJSON(handler);
return tokenHandler;
} else {
return null;
}
}
Future<List<String>> pullFavoriteCategories() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
List<UserFavCategory> favs;
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': prefs.getString('tokensTeso')
};
var register2 = serverLocation + 'favoriteCategories/pullUser';
var client1 = await http.post(Uri.parse(register2),
body: json.encode(prefs.getString("id")), headers: requestHeaders);
if (client1.statusCode == 200) {
var handler = jsonDecode(client1.body);
favs = List<UserFavCategory>.from(
handler.map((model) => UserFavCategory.fromJSON(model)).toList());
setFavs(favs.map((e) => e.categoryCode).toList());
return interest = favs.map((e) => e.categoryCode).toList();
} else {
return null;
}
}
updateFavoriteCategories(List<String> catF) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String id = prefs.getString("id");
List<UserFavCategory> favs = <UserFavCategory>[];
catF.forEach((element) async {
UserFavCategory category = new UserFavCategory();
category.userGuid = id;
category.categoryCode = element;
category.countID = DateTime.now().toString() + id;
favs.add(category);
});
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': prefs.getString('tokensTeso')
};
var register2 = serverLocation + 'favoriteCategories/updateFavorites';
var client1 = await http.post(Uri.parse(register2),
body: json.encode(favs), headers: requestHeaders);
if (client1.statusCode == 200) {
setFavs(catF);
} else {
return null;
}
}
Future<void> getMonthlyStatus() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': prefs.getString('tokensTeso')
};
try {
var register2 = serverLocation + 'monthly-desires/check-status';
var client1 =
await http.get(Uri.parse(register2), headers: requestHeaders);
if (client1.statusCode == 200) {
if (client1.body == "not submitted") {
Payload payload = new Payload();
payload.loadID = "TESN002";
payload.load1 = "DesireComeTrue";
await notificationPlugin.showNotification(
"Desire Come True",
"You haven't set up your Desire Come True list for next month",
payload.toString(),
);
}
}
} catch (e) {
print(e);
}
}
void updatePosted(FBPosts postNow) {
posts.add(postNow);
notifyListeners();
// predownloadAds(posts.map((e) => e.playbackID).toList());
}
Future<void> pullAds() async {
SharedPreferences.getInstance().then((prefs) async {
String id = prefs.getString("id");
FirebaseFirestore.instance
.collection("posts")
.where("publisher", isEqualTo: id)
.snapshots()
.listen((snap) async {
this.posts = snap.docs.map((e) => FBPosts.fromJSON(e.data())).toList();
if (this.posts != null)
this.posts.sort((b, a) => a.timestamp.compareTo(b.timestamp));
});
notifyListeners();
});
//predownloadAds(this.posts.map((e) => e.playbackID).toList());
}
Future<void> commentPost(CommentsPost comment) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String token = prefs.getString("tokensTeso");
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': token
};
var register = serverLocation + 'posts/add-comment';
var client = await http.post(Uri.parse(register),
body: json.encode(comment), headers: requestHeaders);
if (client.statusCode == 200) {
print(client.body);
}
}
void unCommentPost(CommentsPost comment) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String token = prefs.getString("tokensTeso");
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': token
};
var register = serverLocation + 'posts/delete-comment';
var client = await http.post(Uri.parse(register),
body: json.encode(comment), headers: requestHeaders);
if (client.statusCode == 200) {
print(client.body);
}
}
void addLike(PostFav like) async {
try {
SharedPreferences prefs = await SharedPreferences.getInstance();
String token = prefs.getString("tokensTeso");
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': token
};
var register = serverLocation + 'posts/add-like';
var client = await http.post(Uri.parse(register),
body: json.encode(like), headers: requestHeaders);
if (client.statusCode == 200) {
print(client.body);
}
} catch (e) {
print(e.toString());
}
}
void deleteLike(String like) async {
try {
SharedPreferences prefs = await SharedPreferences.getInstance();
String token = prefs.getString("tokensTeso");
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': token
};
var register = serverLocation + 'posts/remove-like';
var client = await http.post(Uri.parse(register),
body: json.encode(like), headers: requestHeaders);
if (client.statusCode == 200) {
print(client.body);
}
} catch (e) {
print(e);
}
}
void deletePost(Post post) async {
try {
SharedPreferences prefs = await SharedPreferences.getInstance();
String token = prefs.getString("tokensTeso");
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': token
};
Map<String, String> muxHeaders = {'Authorization': token};
var register = serverLocation + 'posts/delete-post';
var client = await http.post(Uri.parse(register),
body: json.encode(post), headers: requestHeaders);
print(client.body);
if (client.statusCode == 200) {
http.get(
Uri.parse(
tesoStreaming + "api/mobile/upload/delete/" + post.playbackID),
headers: muxHeaders);
this.posts.removeWhere((element) => element.postID == post.postID);
notifyListeners();
}
} catch (e) {
print(e);
}
}
void viewPost(Post post) async {
try {
SharedPreferences prefs = await SharedPreferences.getInstance();
String token = prefs.getString("tokensTeso");
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': token
};
var register = serverLocation + 'posts/view-post';
await http.post(Uri.parse(register),
body: json.encode(post.postID), headers: requestHeaders);
} catch (e) {
print(e);
}
}
// coupons
Future<int> viewCoupon(CouponsHead coupon) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': prefs.getString('tokensTeso')
};
try {
var register2 = serverLocation + 'coupons/viewCoupon';
var client1 = await http.post(Uri.parse(register2),
body: json.encode(coupon), headers: requestHeaders);
if (client1.statusCode == 200) {
return 200;
} else {
return 400;
}
} catch (e) {
return 400;
}
}
Future<void> loadFriends() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String token = prefs.getString("tokensTeso");
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': token
};
var register = serverLocation + 'relationships/friends';
var client = await http.get(Uri.parse(register), headers: requestHeaders);
if (client.statusCode == 200) {
var people = jsonDecode(client.body);
friends = List<TesoUser>.from(
people.map((model) => TesoUser.fromJSON(model)).toList());
notifyListeners();
}
}
Future<void> getUserInformation() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String token = prefs.getString("tokensTeso");
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': token
};
var register = serverLocation + 'user_details/pullInformation';
var client = await http.get(Uri.parse(register), headers: requestHeaders);
if (client.statusCode == 200) {
var people = jsonDecode(client.body);
TesoUser user = TesoUser.fromJSON(people);
setUser(user);
}
}
Future<void> getCoupons() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String token = prefs.getString("tokensTeso");
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': token
};
var register = serverLocation + 'coupons/acquiredcoupons';
var client = await http.get(Uri.parse(register), headers: requestHeaders);
if (client.statusCode == 200) {
var details = jsonDecode(client.body);
mycoupons = List<CouponDetails>.from(
details.map((model) => CouponDetails.fromJSON(model)).toList());
notifyListeners();
}
}
Future<void> redeemCoupon(CouponDetails coupon, context) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': prefs.getString('tokensTeso')
};
try {
var register2 = serverLocation + 'coupons/redeemCoupon';
var client1 = await http.post(Uri.parse(register2),
body: json.encode(coupon), headers: requestHeaders);
print(client1.body);
if (client1.statusCode == 200) {
var data = client1.body;
int coins = int.tryParse(data);
Payload payload = new Payload();
payload.loadID = "TESN003";
payload.load1 = "CouponRedemption";
await notificationPlugin.showNotification(
"Coupon Redeem",
"You have successfully redeem a " +
coupon.issuer.businessName +
" " +
coupon.type +
" coupon",
payload.toString(),
);
getCoupons();
await Navigator.pushReplacement(
context,
PageTransition(
child: SuccessfullyRedeemed(
couponDetails: coupon,
returns: coins,
),
type: PageTransitionType.fade,
),
);
Navigator.pop(context);
} else {
Navigator.pushReplacement(
context,
PageTransition(
child: ErrorRedeem(),
type: PageTransitionType.fade,
),
);
}
} catch (e) {
print(e);
Navigator.pushReplacement(
context,
PageTransition(
child: ErrorRedeem(),
type: PageTransitionType.fade,
),
);
}
}
predownloadAds(List paths) {
try {
// if (wifi)
// paths.forEach((path) async {
// final fileInfo = await DefaultCacheManager()
// .getFileFromCache(tesoStreaming + path);
// if (fileInfo == null || fileInfo.file == null) {
// unawaited(DefaultCacheManager()
// .downloadFile(tesoStreaming + "pd/" + path));
// }
// });
} catch (e) {
print(e);
}
}
Future<void> uploadPost(Uploading uploads) async {
try {
Payload payload = new Payload();
payload.loadID = "TESN003";
payload.load1 = "Posted";
SharedPreferences prefs = await SharedPreferences.getInstance();
String token = prefs.getString("tokensTeso");
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': token
};
Map<String, String> muxHeaders = {'Authorization': token};
var uploadOptions = UpChunkOptions()
..endPoint = uploads.muxuploadURL
..file = File(uploads.path)
..onProgress = (progress) {
print('Upload progress: ${progress.ceil()}%');
pending.forEach((element) {
if (element.id == uploads.id) {
uploads.pending = progress.ceil() / 100;
uploads.isProcessing = false;
}
});
notifyListeners();
}
..onError = (String message, int chunk, int attempts) {
print('UpChunk error 💥 🙀:');
print(' - Message: $message');
print(' - Chunk: $chunk');
print(' - Attempts: $attempts');
pending.removeWhere((element) => element.id == uploads.id);
notifyListeners();
}
..onSuccess = () async {
var client1 = await http.get(
Uri.parse(
"${tesoStreaming}api/mobile/upload/playback/${uploads.muxuploadID}"),
headers: muxHeaders);
print('Upload complete! 👋');
if (client1.statusCode == 200) {
var details = jsonDecode(client1.body);
var details1 = details[0];
var data = details1["0"];
PostUpload videoUpload = new PostUpload();
videoUpload.aspect = uploads.aspect;
videoUpload.campaignID = uploads.campaignID;
videoUpload.title = uploads.title;
videoUpload.path = data["data"]["id"];
videoUpload.thumbnail = details1["asset_id"];
var register2 = serverLocation + "posts/upload-post";
var client2 = await http.post(Uri.parse(register2),
body: json.encode(videoUpload), headers: requestHeaders);
if (client2.statusCode == 200) {
pending.removeWhere((element) => element.id == uploads.id);
notifyListeners();
} else {
pending.removeWhere((element) => element.id == uploads.id);
notifyListeners();
}
} else {
pending.removeWhere((element) => element.id == uploads.id);
// print(e);
notifyListeners();
}
};
var uploadChunk = UpChunk.createUpload(uploadOptions);
uploads.token = uploadChunk;
pending.add(uploads);
notifyListeners();
} catch (e) {
pending.removeWhere((element) => element.id == uploads.id);
print(e);
}
}
Future<void> cancelUpload(Uploading uploads) async {
try {
// uploader.cancel(taskId: uploads.id);
uploads.token.stop();
pending.remove(uploads);
notifyListeners();
} catch (e) {
print(e);
}
}
connectionToServer(context) {
MyConnectivity _connectivity = MyConnectivity.instance;
_connectivity.initialise();
_connectivity.myStream.listen((source) {
if (source.keys.toList()[0] == ConnectivityResult.wifi &&
source.values.toList()[0]) {
final snackBar = SnackBar(
content: Text(
'Connected',
textAlign: TextAlign.center,
style: TextStyle(color: Colors.white),
),
behavior: SnackBarBehavior.floating,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
backgroundColor: Colors.green,
duration: Duration(
seconds: 3,
),
);
if (!firstTime) ScaffoldMessenger.of(context).showSnackBar(snackBar);
firstTime = false;
wifi = true;
notifyListeners();
} else if (source.keys.toList()[0] == ConnectivityResult.mobile &&
source.values.toList()[0]) {
final snackBar = SnackBar(
content: Text(
'Connected',
textAlign: TextAlign.center,
style: TextStyle(color: Colors.white),
),
behavior: SnackBarBehavior.floating,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
backgroundColor: Colors.green,
duration: Duration(
seconds: 3,
),
);
if (!firstTime) ScaffoldMessenger.of(context).showSnackBar(snackBar);
firstTime = false;
wifi = false;
notifyListeners();
} else {
final snackBar = SnackBar(
content: Text(
'No Internet Connection Available',
textAlign: TextAlign.center,
style: TextStyle(color: Colors.white),
),
action: SnackBarAction(
label: 'Retry',
textColor: Colors.white,
onPressed: () => connectionToServer(context),
),
behavior: SnackBarBehavior.floating,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
backgroundColor: Colors.red,
duration: Duration(
seconds: 3,
),
);
ScaffoldMessenger.of(context).showSnackBar(snackBar);
firstTime = false;
wifi = false;
notifyListeners();
}
});
}
Future<void> downloadVideo(String postID, String playbackID, String rendition,
Uint8List imageBitmap, context) async {
if (!saving) {
saving = true;
final snackBar = SnackBar(
content: Text(
"Processing",
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.white,
fontSize: SizeConfig.blockSizeHorizontal * 3.5),
),
behavior: SnackBarBehavior.floating,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
backgroundColor: Color.fromRGBO(0, 0, 0, 0.5),
duration: Duration(
seconds: 3,
),
);
ScaffoldMessenger.of(context).showSnackBar(snackBar);
try {
if (rendition == null) {
SharedPreferences prefs = await SharedPreferences.getInstance();
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': prefs.getString('tokensTeso')
};
var register2 = serverLocation + 'posts/getrendition';
var client1 = await http
.post(Uri.parse(register2),
body: json.encode(postID), headers: requestHeaders)
.timeout(
Duration(
seconds: 5,
),
);
if (client1.statusCode == 200) {
rendition = client1.body;
} else {
saving = false;
final snackBar = SnackBar(
content: Text(
"An error occurred while saving ad try again",
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.white,
fontSize: SizeConfig.blockSizeHorizontal * 3.5),
),
behavior: SnackBarBehavior.floating,
margin: EdgeInsets.only(
left: 10,
right: 10,
bottom: MediaQuery.of(context).size.height * 0.80),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
backgroundColor: Color(0XFF800000),
duration: Duration(
seconds: 2,
),
);
ScaffoldMessenger.of(context).showSnackBar(snackBar);
}
}
var fileInfo = await DefaultCacheManager()
.getSingleFile(tesoStreamMux + playbackID + "/$rendition?download");
String location = await getTemporaryDirectory().then((value) =>
value.path +
"/" +
DateTime.now().millisecondsSinceEpoch.toString() +
".mp4");
final tapiocaBalls = [
TapiocaBall.imageOverlay(imageBitmap, 0, 50),
];
final cup = Cup(Content(fileInfo.path), tapiocaBalls);
await cup.suckUp(location);
Share.shareFiles([location]);
} catch (e) {
saving = false;
final snackBar = SnackBar(
content: Text(
"An error occurred while saving ad try again",
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.white,
fontSize: SizeConfig.blockSizeHorizontal * 3.5),
),
behavior: SnackBarBehavior.floating,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
backgroundColor: Color(0XFF800000),
duration: Duration(
seconds: 3,
),
);
ScaffoldMessenger.of(context).showSnackBar(snackBar);
}
saving = false;
} else {
final snackBar = SnackBar(
content: Text(
"Try sharing after saving is complete",
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.white,
fontSize: SizeConfig.blockSizeHorizontal * 3.5),
),
behavior: SnackBarBehavior.floating,
margin:
EdgeInsets.only(bottom: MediaQuery.of(context).size.height * 0.80),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
backgroundColor: Colors.grey[800],
duration: Duration(
seconds: 5,
),
);
ScaffoldMessenger.of(context).showSnackBar(snackBar);
}
notifyListeners();
}
checkRelationship(String id) {
return friends.any((element) => element.userGUID == id);
}
Future<void> flagPost(Post post, int reportID) async {
try {
SharedPreferences prefs = await SharedPreferences.getInstance();
String token = prefs.getString("tokensTeso");
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': token
};
ReportedContent report = new ReportedContent();
report.postID = post.postID;
report.publisherID = post.publisherID;
report.report = reportID;
var register = serverLocation + 'posts/flag-post';
var client = await http.post(Uri.parse(register),
body: json.encode(report), headers: requestHeaders);
if (client.statusCode == 200) {
blockedContent.add(post.postID);
notifyListeners();
}
} catch (_) {}
}
checkBlockedUsers() async {
try {
SharedPreferences prefs = await SharedPreferences.getInstance();
String token = prefs.getString("tokensTeso");
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': token
};
var register = serverLocation + 'users/blocked-users';
var client = await http.get(Uri.parse(register), headers: requestHeaders);
if (client.statusCode == 200) {
var people = jsonDecode(client.body);
blockUserList = List<TesoUser>.from(
people.map((model) => TesoUser.fromJSON(model)).toList());
blockedUsers = blockUserList.map((b) => b.userGUID).toList();
}
notifyListeners();
} catch (e) {
print(e);
}
}
checkBlockedContent() async {}
Future<void> blockUser(TesoUser user) async {
try {
SharedPreferences prefs = await SharedPreferences.getInstance();
String token = prefs.getString("tokensTeso");
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': token
};
var register = serverLocation + 'relationships/block';
var client = await http.post(Uri.parse(register),
body: json.encode(user.userGUID), headers: requestHeaders);
if (client.statusCode == 200) {
blockedUsers.add(user.userGUID);
blockUserList.add(user);
notifyListeners();
}
} catch (_) {}
}
Future<void> unblockUser(TesoUser user) async {
try {
SharedPreferences prefs = await SharedPreferences.getInstance();
String token = prefs.getString("tokensTeso");
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': token
};
var register = serverLocation + 'relationships/unblock';
var client = await http.post(Uri.parse(register),
body: json.encode(user.userGUID), headers: requestHeaders);
if (client.statusCode == 200) {
blockedUsers.remove(user.userGUID);
blockUserList.remove(user);
notifyListeners();
}
} catch (_) {}
}
}