首页 > 解决方案 > Flutter/Firebase 错误 - 未处理的异常:类型 '_CompactLinkedHashSet' 不是类型 'FutureOr 的子类型>>'

问题描述

我正在尝试允许用户注册以使用我的应用程序使用 firebase。我有一个“创建帐户”按钮,按下时我希望我的 submit() 函数被执行。这是我的提交功能:

  Future submit() async {
if (validate()) {
  _formKey.currentState.reset();
  await firebaseAuth
      .createUserWithEmailAndPassword(
          email: _emailController.text, password: _passwordController.text)
      .then(
        (user) => {
          FirebaseFirestore.instance
              .collection('users')
              .doc(user.user.uid)
              .set(
            {
              'id': user.user.uid,
              'displayName': _firstNameController.text.trim() +
                  " " +
                  _lastNameController.text.trim(),
              'email': _emailController.text.trim(),
              'createdat': DateTime.now(),
            },
          ),
        },
      )
      .catchError(
        (err) => {
          print(
            err.toString(),
          ),
        },
      );
}

}

然后我在这里调用它:

                          RaisedButton(
                          child: Text(
                            'Create an Account',
                            style: TextStyle(color: Colors.white),
                          ),
                          onPressed: () async {
                            await submit();
                          }),

但是,当我运行我的应用程序时,填写我的注册表单,然后按按钮提交,我收到以下消息:

    [VERBOSE-2:ui_dart_state.cc(177)] Unhandled Exception: type '_CompactLinkedHashSet<void>' is not a subtype of type 'FutureOr<Set<Future<void>>>'
#0      _FutureListener.handleError (dart:async/future_impl.dart:160:20)
#1      Future._propagateToListeners.handleError (dart:async/future_impl.dart:708:47)
#2      Future._propagateToListeners (dart:async/future_impl.dart:729:24)
#3      Future._completeError (dart:async/future_impl.dart:537:5)
#4      _AsyncAwaitCompleter.completeError (dart:async-patch/async_patch.dart:47:15)
#5      FirebaseAuth.createUserWithEmailAndPassword (package:firebase_auth/src/firebase_auth.dart)
<asynchronous suspension>
#6      _SignUpPageState.submit (package:consi/screens/SignUpPage.dart:68:12)
#7      _SignUpPageState.build.<anonymous closure> (package:consi/screens/SignUpPage.dart:242:39)
#8      _SignUpPageState.build.<anonymous closure> (package:consi/screens/SignUpPage.dart:241:42)
#9      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:993:19<…&gt;

有人可以帮我解决这个问题吗?谢谢

标签: firebaseflutter

解决方案


尝试删除 Future 类型的代码,如下所示,然后调用提交按钮。

如果不起作用;在注册期间调用的每个函数中删除它。

如果问题仍然存在,我建议您通过在此视图上放置断点来进行内联调试,以便您可以看到程序本身是如何执行每一行代码的。

submit() async {
if (validate()) {
  _formKey.currentState.reset();
  await firebaseAuth
      .createUserWithEmailAndPassword(
          email: _emailController.text, password: _passwordController.text)
      .then(
        (user) => {
          FirebaseFirestore.instance
              .collection('users')
              .doc(user.user.uid)
              .set(
            {
              'id': user.user.uid,
              'displayName': _firstNameController.text.trim() +
                  " " +
                  _lastNameController.text.trim(),
              'email': _emailController.text.trim(),
              'createdat': DateTime.now(),
            },
          ),
        },
      )
      .catchError(
        (err) => {
          print(
            err.toString(),
          ),
        },
      );
}

推荐阅读