异常:类型'Future <User>'不是类型'String'的子类型

时间:2020-11-09 20:02:59

标签: firebase flutter firebase-authentication

我前不久发布了这个问题,我给出了一些非常好的答案,但是我现在遇到了这个错误 [VERBOSE-2:ui_dart_state.cc(177)]未处理的异常:NoSuchMethodError:在null上调用了setter'receiverId ='。 接收者:null 尝试调用:receiverId =“ null-Rxe7459XVwM4chzI6AP5XkixTql1”

 readLocal() async {
 FirebaseUser user =  await _authMethods.getCurrentUser();
senderId = user.uid ?? ''; 
if ( senderId.hashCode <=  receiverId.hashCode) {
  message.senderId = '$senderId-$receiverId';
} else {
  message.receiverId = '$receiverId-$senderId';
}

Firestore.instance.collection(USERS_COLLECTION).document(senderId).updateData({'chattingWith': receiverId});

  setState(() {});
  }

这是我的未来

 Future<FirebaseUser> getCurrentUser() async {
FirebaseUser currentUser;
currentUser = await _auth.currentUser();
return currentUser;

 }

请帮助我,我真的很陌生,正在尝试完成我的第一个申请。

2 个答案:

答案 0 :(得分:2)

这里似乎有多个错误。

您正在尝试将Future函数归因于senderId变量,但是Future是异步的,因此您要等待该值。

但这仅会导致另一个错误,因为getCurrentUser将返回FirebaseUser,并且您需要用户ID字符串。因此,您可能需要这样做:

FirebaseUser user = await _authMethods.getCurrentUser();
senderId = user.uid ?? '';

答案 1 :(得分:1)

您在代码中遇到的相同问题,让我们一个接一个地修复主题:

  1. getCurrentUserasync函数,因此您必须await _authMethods.getCurrentUser()
  2. getCurrentUser将返回FirebaseUser,这意味着这是一个object,但是通过写_authMethods.getCurrentUser() ?? ''来表示如果_authMethods.getCurrentUser()的结果不为空,则分配该值值分配给senderId,否则分配'',即String,因此无法将String分配给senderId,而可以分配null。 / li>