没有为“用户”类型定义方法“fromDocument”。 (未定义方法)

Posted

技术标签:

【中文标题】没有为“用户”类型定义方法“fromDocument”。 (未定义方法)【英文标题】:The method 'fromDocument' isn't defined for the type 'User'. (undefined_method ) 【发布时间】:2021-08-02 17:17:18 【问题描述】:

我尝试使用下面的代码在 Document 快照中创建一个用户实例,但是当我导入 user.dart 并调用“user.fromDocument(docs)”时,它显示一个错误,即未为该类型定义方法 fromDocument用户

class user 
  final String id;
  final String username;
  final String occupation;
  final String email;
  final String description;


  user(
      this.id,
      this.username,
      this.occupation,
      this.email,
      this.description,
      );

  factory user.fromDocument(DocumentSnapshot doc) 
    return user(
        id: doc['id'],
        email: doc['email'],
        occupation: doc['occupation'],
        photourl: doc['photoUrl'],
        description: doc['description'],
        username: doc['displayName']);
  

createUserInFirestore() async 
final GoogleSignInAccount user = _googleSignIn.currentUser;
    DocumentSnapshot doc = await usersRef.doc(user.id).get();
if (!doc.exists) 
      final username = await Navigator.push(
          context, MaterialPageRoute(builder: (Context) => CreateAccount()));

usersRef.doc(user.id).set(
        "id": user.id,
        "Occupation": username,
        "photoUrl": user.photoUrl,
        "email": user.email,
        "displayName": user.displayName,
        "description": "",
        "timestamp": timestamp
      );
      Navigator.pushNamed(context, HomePage.id);
      usersRef.doc(user.id).get();
     else if (doc.exists) 
      Navigator.pushNamed(context, HomePage.id);
    

    **currentUser = user.fromDocument(doc);**
    print(currentUser);
    print(currentUser.username);
  

【问题讨论】:

【参考方案1】:

这是因为下面提到的用户是在顶部定义的 GoogleSignInAccount 的实例,而不是您的类用户的实例,请查看您的代码行:

final GoogleSignInAccount user = _googleSignIn.currentUser;

【讨论】:

【参考方案2】:

我的问题解决了 将类用户的名称更改为 GUser 或 UserG 或您想要的任何名称。 例如 Guser 类

【讨论】:

以上是关于没有为“用户”类型定义方法“fromDocument”。 (未定义方法)的主要内容,如果未能解决你的问题,请参考以下文章

没有为“地理定位器”类型定义方法“placemarkFromCoordinates”

没有为“ThemeProvider”类型定义“of”方法。在颤振中

为啥没有为不同的返回类型定义方法重载?

没有为“GoogleMapController”类型定义方法“addMarker”

有没有更简洁的方法将查询结果转换为类型?

没有为类型“type”定义方法“fromjson”