繁体   English   中英

Email 验证导致 flutter 错误? 为什么?

[英]Email verification cause error on flutter? why?

我正在为此开发一个食品订购应用程序,我想通过 email 验证用户。为此,我正在使用 email 验证。 我正在使用 firebase 电子邮件验证。 说到我的观点,我在验证 email 错误是基于 flutter 之后验证了 email。我是在 flutter 上开发应用程序的。请提供一些步骤以避免错误。 我在下面附上了错误消息

E/flutter ( 9906): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: Null check operator used on a null value
E/flutter ( 9906): #0      _verifiyState.checkmail (package:datafound/vvvv.dart:31:44)
E/flutter ( 9906): #1      _verifiyState.initState.<anonymous closure> (package:datafound/vvvv.dart:26:55)
E/flutter ( 9906): #2      _rootRunUnary (dart:async/zone.dart:1436:47)
E/flutter ( 9906): #3      _CustomZone.runUnary (dart:async/zone.dart:1335:19)
E/flutter ( 9906): #4      _CustomZone.runUnaryGuarded (dart:async/zone.dart:1244:7)
E/flutter ( 9906): #5      _CustomZone.bindUnaryCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1281:26)
E/flutter ( 9906): #6      _rootRunUnary (dart:async/zone.dart:1444:13)
E/flutter ( 9906): #7      _CustomZone.runUnary (dart:async/zone.dart:1335:19)
E/flutter ( 9906): #8      _CustomZone.bindUnaryCallback.<anonymous closure> (dart:async/zone.dart:1265:26)
E/flutter ( 9906): #9      _Timer._runTimers (dart:isolate-patch/timer_impl.dart:395:19)
E/flutter ( 9906): #10     _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:426:5)
E/flutter ( 9906): #11     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)
E/flutter ( 9906): 

这个错误是在 email 验证后显示的,这里是我的代码


import 'package:datafound/vvvv.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';

class Emailver extends StatefulWidget {
  const Emailver({Key? key}) : super(key: key);

  @override
  _EmailverState createState() => _EmailverState();
}

class _EmailverState extends State<Emailver> {
  TextEditingController emailCtrl = TextEditingController();
  TextEditingController passCtrl = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("email verification"),
      ),
      body: Center(
        child: Column(
          children: [
            const SizedBox(
              height: 10.0,
            ),
            TextFormField(
              controller: emailCtrl,
              keyboardType: TextInputType.emailAddress,
              decoration: InputDecoration(
                border:OutlineInputBorder(
                  borderSide: const BorderSide(width: 1, color: Colors.black),
                  borderRadius: BorderRadius.circular(10),
                ),
              ),
            ),
            const SizedBox(
              height: 10.0,
            ),
            TextFormField(
              controller: passCtrl,
              keyboardType: TextInputType.number,
              decoration: InputDecoration(
                border:OutlineInputBorder(
                  borderSide: const BorderSide(width: 1, color: Colors.black),
                  borderRadius: BorderRadius.circular(10),
                ),
              ),
            ),
            const SizedBox(
              height: 10.0,
            ),
            ElevatedButton(onPressed: (){
              signup();
            },
                child: const Text("Sign Up"))
          ],
        ),
      ),
    );
  }

  Future signup() async{
    await FirebaseAuth.instance.createUserWithEmailAndPassword(email: emailCtrl.text, password: passCtrl.text).then((_){
      Navigator.push(
        context,
        MaterialPageRoute(builder: (context) => const verifiy()),
      );
    });
  }

}

上面的代码用于从用户那里获取 email




import 'dart:async';

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';

class verifiy extends StatefulWidget {


  const verifiy({Key? key}) : super(key: key);

  @override
  _verifiyState createState() => _verifiyState();
}

class _verifiyState extends State<verifiy> {
  bool isvv = false;
  Timer? timer;

  @override
  void initState() {
    isvv = FirebaseAuth.instance.currentUser!.emailVerified;
    !isvv ? sendnotfy() : null;
    Timer.periodic(const Duration(seconds: 3), (_) => checkmail(),);
    super.initState();
  }

  Future checkmail() async{
    await FirebaseAuth.instance.currentUser!.reload();
      setState(() {
        isvv = FirebaseAuth.instance.currentUser!.emailVerified;
      });

      if(isvv) timer?.cancel();
  }

    Future sendnotfy() async{
       final user = FirebaseAuth.instance.currentUser!;
       await user.sendEmailVerification();
    }


    @override
  void dispose() {
    timer?.cancel();
    super.dispose();
  }


  @override
  Widget build(BuildContext context) {
    return Scaffold(
              appBar: AppBar(
                title: const Text("verify"),
              ),
              body:  isvv ? Column(
                children: [
                  const Text("verifiy your email"),
                  ElevatedButton(
                    onPressed: (){
                      FirebaseAuth.instance.signOut().then((_){
                        Navigator.pop(context);
                      });
                    },
                    child: const Text("sign out"),
                  )
                ],
              ) :  Center(
                child: Container(
                  color: Colors.red,
                  child: const Text("Check Your Mail and click it"),
                ),
              ) ,
            );
  }
}

以上为email验证请尽快提供解决方案。 谢谢

如果您的语句可为空,您应该检查 null。 可空表达式 "." 如果你使用它,你会得到这个错误。

import 'dart:async';

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';

class verifiy extends StatefulWidget {


  const verifiy({Key? key}) : super(key: key);

  @override
  _verifiyState createState() => _verifiyState();
}

class _verifiyState extends State<verifiy> {
  bool isvv = false;
  Timer? timer;

  @override
  void initState() {
  final currentUser = FirebaseAuth.instance.currentUser;
  if (currentUser != null) {
    final isEmailVerifed = currentUser!.emailVerified;
    if (!isEmailVerifed) {
      sendnotfy()
    }
  }
  Timer.periodic(const Duration(seconds: 3), (_) => checkmail(),);
  super.initState();
  }

Future checkmail() async {
  final currentUser = FirebaseAuth.instance.currentUser;
  var isvv = false;
  if (currentUser != null) {
    await currentUser.reload();
    setState(() {
      isvv = currentUser.emailVerified;
    });
  }

  if (isvv) timer?.cancel();
}

Future sendnotfy() async {
  final currentUser = FirebaseAuth.instance.currentUser;
  if (currentUser != null) {
    await currentUser.sendEmailVerification();
  }
}


    @override
  void dispose() {
    timer?.cancel();
    super.dispose();
  }


  @override
  Widget build(BuildContext context) {
    return Scaffold(
              appBar: AppBar(
                title: const Text("verify"),
              ),
              body:  isvv ? Column(
                children: [
                  const Text("verifiy your email"),
                  ElevatedButton(
                    onPressed: (){
                      FirebaseAuth.instance.signOut().then((_){
                        Navigator.pop(context);
                      });
                    },
                    child: const Text("sign out"),
                  )
                ],
              ) :  Center(
                child: Container(
                  color: Colors.red,
                  child: const Text("Check Your Mail and click it"),
                ),
              ) ,
            );
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM