firebase 错误:参数类型“Future< dynamic>”无法分配给参数类型“void Function()?”

pjngdqdw  于 2023-01-09  发布在  其他
关注(0)|答案(2)|浏览(228)

在使用Firebase Auth制作密码重置页面时。我已经使用Firebase制作了几个页面,但从未遇到过这种错误,请提出解决方案。
显示错误:-

Error: The argument type 'Future<dynamic>' can't be assigned to the parameter type 'void Function()?'.
lib/pages/forgot_pw_page.dart:82
 - 'Future' is from 'dart:async'.
                  onPressed: passwordReset(),

我做错了什么?
代码:
(我已经修剪了代码,因为它不允许发布整个)

class ForgotPasswordPage extends StatefulWidget {
  const ForgotPasswordPage({super.key});

  @override
  State<ForgotPasswordPage> createState() => _ForgotPasswordPageState();
}

class _ForgotPasswordPageState extends State<ForgotPasswordPage> {
  final _emailController = TextEditingController();

  @override
  void dispose() {
    _emailController.dispose();
    super.dispose();
  }

  Future passwordReset() async {
    await FirebaseAuth.instance.sendPasswordResetEmail(email: _emailController.text.trim());
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.grey[300],
      body: SafeArea(
        child: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Padding(
                padding: const EdgeInsets.symmetric(horizontal: 25),
                child: MaterialButton(
                  onPressed: passwordReset(),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
a11xaf1n

a11xaf1n1#

  • 也许这里出了什么问题
Future<void> passwordReset() async {}
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: MaterialButton(
        // onPressed: () => passwordReset(),
        onPressed: passwordReset,  
      ),
    );
  }
6uxekuva

6uxekuva2#

Material Button和flutter中的所有按钮都只接受void函数。那些只是触发而不返回任何东西的按钮。在本例中,resetPassword是一个Future函数。在本例中,您需要将它 Package 在一个void函数() => resetPassword()中。对于任何声明为非void的函数,都使用此模式。这是每个人偶尔会遇到的一个非常常见的错误

相关问题