当前位置: 首页 > 知识库问答 >
问题:

如何解决“Future”不是“FirebaseUser”错误类型的子类型

罗淮晨
2023-03-14

我有一个FirebaseActions类,它为我做注册和登录工作。我在其中添加了一个getCurrentUser方法。我从我的主屏幕小部件调用这个函数。我需要将返回值(type= FirebaseUser)放入主屏幕的一个变量中,以访问loggedInUser.email。我的问题;有什么方法可以将FirebaseUser类型数据转换成Future类型变量?当我在HomeScreen而不是FirebasAction类中编写这个函数时,它可以工作,但这是最佳实践吗?

FirebaseActions类

static getCurrentUser(context) async {
    final user = await _auth.currentUser().catchError((error) {
      Scaffold.of(context).showSnackBar(AppSnackBar.appSnackBar(error.message));
    });

    if (user != null) {
      return user;
    }
  }

主屏幕widget

class _HomeScreenState extends State<HomeScreen> {

  FirebaseUser loggedInUser;

  @override
  void initState() {
    super.initState();
    loggedInUser = FirebaseActions.getCurrentUser(context);
    print(loggedInUser.toString());
  }

共有3个答案

梁丘权
2023-03-14

下面是我如何在initstate中处理异步函数:

FirebaseActions.getCurrentUser(context).then((val){loggedInUser = val});

还要确保在异步函数中指定返回类型。

Future<FirebaseUser> getCurrentUser(context) async {...
沈琛
2023-03-14

您没有指定方法的返回类型,并且方法也是异步的,因此您必须在调用的位置放置 await。

 static Future<FirebaseUser> getCurrentUser(context) async {

另外,在呼叫位置添加等待。

loggedInUser = await FirebaseActions.getCurrentUser(context);

更新:

创建新函数并调用该函数。

callme() async{  
 loggedInUser = FirebaseActions.getCurrentUser(context);
    print(loggedInUser.toString());
}

initstate:

 @override
  void initState() {
    super.initState();
    callme();
  }
穆子琪
2023-03-14

出现此错误是因为您没有在< code>getCurrentUser()函数中指定返回类型。

将您的代码替换为下面的代码,一切都会正常工作。

要解决此问题:请检查下面的代码:它工作正常:

Firebase操作类

// give your function a return type
static Future<FirebaseUser> getCurrentUser(context) async {
    final user = await _auth.currentUser().catchError((error) {
      Scaffold.of(context).showSnackBar(AppSnackBar.appSnackBar(error.message));
    });

    if (user != null) {
      return user;
    }
  }

主屏幕小部件

class _HomeScreenState extends State<HomeScreen> {

  FirebaseUser loggedInUser;

  @override
  void initState() {
    super.initState();
    call the function here
    logInUser();
    print(loggedInUser.toString());
  }

我希望这有帮助

更新

// create a new function to log in user
void logInUser() async {
 // await the result because you are invoking a future method
    loggedInUser = await FirebaseActions.getCurrentUser(context);
}
 类似资料:
  • 我是个新手。当我运行代码时,我得到一个错误:“Future”类型不是“List”类型的子类型。如果我改变屏幕,我将得到错误:NoSuchMethodError:方法“map”被调用为null。我怎样才能解决它?谢谢你帮助我。

  • TS 的 vue 项目中,有如下代码块简化如下: 其中,render-extra 报错为: 项目地址:https://github.com/lingkai5wu/link-admin 问题代码位于这里 类型位于这里 MenuOptionWithEx 是我扩展 MenuOption 的类型,相关信息如下: 我尝试使用联合类型扩展 MenuOptionWithEx,使 MenuOptionWithEx

  • 当我运行我的代码时,它返回了错误:类型“Future”不是类型转换中“List”类型的子类型。我该如何修复它?它是在我从Firebase获取数据之前匹配引擎运行的?我试图将wait添加到List demoProfiles=getdata()作为wait List;但它返回错误。我真的是新手,这个问题已经困扰了我一整天。请帮帮我

  • //我正在尝试此代码,但它没有添加到firebase //它给出了这些错误 处理手势时引发了以下_TypeError:类型“List”不是类型“String”的子类型 抛出异常时,这是堆栈:#0个SharedReferences。getString(包:共享首选项/共享首选项。dart:98:35)#1 CheckItemInNot(包:e_shop/Store/storehome.dart:33

  • 我刚刚学会了如何在flutter中使用。在使用这个库之前,我用实现的webservice工作正常。 现在,在更改为使用后,出现了错误,无法解决此问题 错误是: _InternalLinkedHashMap不是“BuiltRegister”类型的子类型 我的服务器只获取移动电话号码,这是json响应结构: 我构建具有结构的寄存器: 终端返回中的命令成功,我没有任何问题,现在这是我的实现: 和拦截器实

  • 我有一个错误,当试图解析我的JSON并显示在文本中,而不是作为一个。 下面是我的JSON结构。 这是我的未来API异步。 这是我显示JSON的代码。 当我试图获取数据时,我得到了这样的错误。 我应该修复哪个代码?