【问题标题】:Exception: type 'Future<User>' is not a subtype of type 'String'例外:类型 'Future<User>' 不是类型 'String' 的子类型
【发布时间】:2020-11-09 20:02:59
【问题描述】:

我不久前发布了这个问题,我得到了一些非常好的答案,但我现在收到了这个错误 [VERBOSE-2:ui_dart_state.cc(177)] 未处理的异常:NoSuchMethodError: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;

 }

请帮帮我,我真的是 Flutter 新手,正在尝试完成我的第一个应用程序。

【问题讨论】:

    标签: firebase flutter firebase-authentication


    【解决方案1】:

    这里似乎不止一个错误。

    您试图将 Future 函数归因于 senderId 变量,但 Future 是异步的,因此您希望等待该值。

    但仅此一项可能会导致另一个错误,因为 getCurrentUser 将返回一个 FirebaseUser,而您需要用户 ID 字符串。所以你可能需要这个:

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

    【讨论】:

    • 你好 George,谢谢你的回答,但我收到一个关于 'uid' 的错误 没有为类型 'Future' 定义 getter 'uid'。请再次帮助我
    • @AliMuloway 我已经编辑了代码,看看它现在是否有效。我还发现您使用的 Firebase 版本可能有问题。他们在以后的版本中更改了一些方法名称。
    【解决方案2】:

    代码中的相同问题让我们一一修复主题:

    1. getCurrentUserasync 函数所以你必须 await _authMethods.getCurrentUser()
    2. getCurrentUser 将返回FirebaseUser,这意味着这是一个object,但是通过编写_authMethods.getCurrentUser() ?? '',您说如果_authMethods.getCurrentUser() 的结果不为空,则将此值分配给senderId,否则分配'',这是一个String,所以String不能分配给senderId,你可以分配null代替。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-24
      • 2021-07-18
      • 2020-12-09
      • 1970-01-01
      • 1970-01-01
      • 2019-06-26
      • 2020-09-24
      相关资源
      最近更新 更多