Flutter-Firebase自动登录和电子邮件身份验证错误

时间:2020-05-07 08:21:39

标签: firebase flutter dart firebase-authentication

我正在通过Firebase创建登录代码。我只想登录到通过电子邮件注册并认证的用户并进行设置,以便可以自动登录。使用streambuilder创建的代码可以自动登录。但是,当接收者为null时,会发生自动登录电子邮件身份验证错误。有没有办法将接收器放入?或者,如果您能告诉我解决方法,我将不胜感激。

import 'dart:io';

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:flutteridmemo/pages/log_in_page.dart';
import 'package:flutteridmemo/pages/memo_page.dart';
import 'package:hive/hive.dart';
import 'package:path_provider/path_provider.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  Directory document = await getApplicationDocumentsDirectory();
  Hive.init(document.path);
  await Hive.openBox<String>("DB");
  runApp(MyApp());
}

bool isFirstData = true;

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  FirebaseUser _firebaseUser;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.dark().copyWith(
        canvasColor: Colors.transparent,
      ),
      title: 'ID_Memo_Memo',
      home: StreamBuilder<FirebaseUser>(
        stream: FirebaseAuth.instance.onAuthStateChanged,
        builder: (context, snapshot) {
          if (isFirstData) {
            isFirstData = false;
            return Center(
              child: CircularProgressIndicator(),
            );
          } else {
            if (snapshot.hasData && _firebaseUser.isEmailVerified == true) {
              return MemoPage();
            } else {
              return LogInPage();
            }
          }
        },
      ),
    );
  }
}

这是错误。

I/flutter (14699): The following NoSuchMethodError was thrown building             
StreamBuilder<FirebaseUser>(dirty, state:
I/flutter (14699): _StreamBuilderBaseState<FirebaseUser,         
AsyncSnapshot<FirebaseUser>>#963d7):
I/flutter (14699): The getter 'isEmailVerified' was called on null.
I/flutter (14699): Receiver: null
I/flutter (14699): Tried calling: isEmailVerified
I/flutter (14699): 
I/flutter (14699): The relevant error-causing widget was:
I/flutter (14699):   StreamBuilder<FirebaseUser> enter code here

1 个答案:

答案 0 :(得分:1)

'isEmailVerified'被调用为null,表示_firebaseUser为null。您没有初始化_firebaseUser,因为您正在FirebaseAuth.instance.onAuthStateChanged中使用StreamBuilder,它应该返回Stream<FirebaseUser>,因此您应该使用类型为snapshot的变量AsyncSnapshot<FirebaseUser>检查电子邮件是否已验证。

 else {
            if (snapshot.hasData &&snapshot.data.isEmailVerified == true) {
              return MemoPage();
            } else {
              return LogInPage();
            }