问题描述
如何在不处置的情况下关闭功能。我需要这个答案,因为当我注销时,需要关闭ChangeNotifier类中的函数。
这是我的ChangeNotifier类:
class ChatAndRequestProvider extends ChangeNotifier {
bool _areThereNewChatsAndRequests = false;
bool get areThereNewChatsAndRequests => _areThereNewChatsAndRequests;
set areThereNewChatsAndRequests(bool value) {
_areThereNewChatsAndRequests = value;
notifyListeners();
}
List _chatsList = [];
List get chatsList => _chatsList;
set chatsList(List list) {
_chatsList = list;
notifyListeners();
}
getChats() async {
var prefs = await SharedPreferences.getInstance();
print('The getChats Id is ${prefs.getString(kUserId)}');
FirebaseDatabase.instance
.reference()
.child('users')
.child(prefs.getString(kUserId))
.child('friendsArray')
.onValue
.listen((snapshot) {
Map list = snapshot.snapshot.value;
print('map is $list');
var newItems = [];
if (list != null) {
list.forEach((key,value) {
newItems.add(value);
});
chatsList = newItems;
var globalArray = [];
for (var item in newItems) {
if (item[kLastTimestamp] != item[kLastTimestampSeen]) {
areThereNewChatsAndRequests = true;
}
var status;
switch (item['friendsStatus']) {
case 'friends':
status = RequestStatus.alreadyAFriend;
break;
case 'notFriends':
status = RequestStatus.noRequest;
break;
case 'blocked':
status = RequestStatus.userThatBlockedMe;
break;
case 'unblocked':
status = RequestStatus.noRequest;
break;
}
globalArray.add({kUserId: item[kUserId],kTypeOfRequest: status});
}
valuesList = globalArray;
} else {
deleteFromList(null,RequestStatus.alreadyAFriend);
chatsList = [
{kUserId: 'null'}
];
}
});
}
例如,当我以user1身份登录并在LoadingScreen()中调用此函数时,我得到了所有的朋友,而我可以转到聊天屏幕列表并与朋友聊天。到目前为止,还没有问题。但是,当我注销并使用另一个帐户登录时,假设说user2并再次调用此函数,则由于两次调用此函数,我将收到错误消息和两个响应。我没有使用Auth Packet,我在MongoDB上拥有自己的数据库,用于存储用户信息,但是请求和聊天记录则存储在RealTime数据库中。 所以我的问题是: 当user1注销我的应用程序时,我无法在provider上调用dispose(),因为如果他想再次登录到另一个帐户,由于Provider被处置,他将收到一个错误消息,因此当用户使用user1时我如何停止监听数据库注销并再次调用此函数。非常感谢!!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)