【问题标题】:Flutter The method was called on null. Receiver: nullFlutter 方法在 null 上被调用。接收方:空
【发布时间】:2020-06-13 03:13:01
【问题描述】:

我正在制作一个使用 firebase api 的带有颤振的登录页面。但是每当我点击登录或注册按钮时,它都会显示一个错误,即该方法在 null 上被调用。

这是 submitForm 方法的代码

AuthMode _authMode = AuthMode.Login;

User _user = User();
FirebaseApi _api;

void _submitForm() {
    if (!_formKey.currentState.validate()) {
      return;
    }

    _formKey.currentState.save();

    AuthNotifier authNotifier =
        Provider.of<AuthNotifier>(context, listen: false);

    if (_authMode == AuthMode.Login) {
      print('Email: ${_user.email}, Password: ${_user.password}');
      _api.login(_user, authNotifier);
    } else {
      _api.signup(_user, authNotifier);
    }
  }

这是我的用户类

class User {
  String username;
  String email;
  String password;

  User();
}

authNotifier 类: 导入“包:firebase_auth/firebase_auth.dart”; 导入'package:flutter/widgets.dart';

class AuthNotifier with ChangeNotifier {
  FirebaseUser _user;

  FirebaseUser get user => _user;

  void setUser(FirebaseUser user) {
    this._user = user;
    notifyListeners();
  }
}

还有 firebase_api 类:

class FirebaseApi {
  login(User user, AuthNotifier authNotifier) async {
    AuthResult authResult = await FirebaseAuth.instance
        .signInWithEmailAndPassword(email: user.email, password: user.password)
        .catchError((error) => print(error.code));

    if (authResult != null) {
      FirebaseUser firebaseUser = authResult.user;

      if (firebaseUser != null) {
        print("Log In: $firebaseUser");
        authNotifier.setUser(firebaseUser);
      }
    }
  }

  signup(User user, AuthNotifier authNotifier) async {
    AuthResult authResult = await FirebaseAuth.instance
        .createUserWithEmailAndPassword(
            email: user.email, password: user.password)
        .catchError((error) => print(error.code));

    if (authResult.user != null) {
      UserUpdateInfo updateInfo = UserUpdateInfo();
      updateInfo.displayName = user.username;

      FirebaseUser firebaseUser = authResult.user;

      if (firebaseUser != null) {
        await firebaseUser.updateProfile(updateInfo);
        await firebaseUser.reload();

        print("Sign up $firebaseUser");

        FirebaseUser currentUser = await FirebaseAuth.instance.currentUser();
        authNotifier.setUser(currentUser);
      }
    }
  }

  signout(AuthNotifier authNotifier) async {
    await FirebaseAuth.instance
        .signOut()
        .catchError((error) => print(error.code));

    authNotifier.setUser(null);
  }

  getCurrentUser(AuthNotifier authNotifier) async {
    FirebaseUser firebaseUser = await FirebaseAuth.instance.currentUser();

    if (firebaseUser != null) {
      authNotifier.setUser(firebaseUser);
    }
  }
}

【问题讨论】:

    标签: firebase authentication flutter dart null


    【解决方案1】:

    您必须构造_api 变量,否则它将是null

    FirebaseApi _api = FirebaseApi();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-11
      • 2021-07-31
      • 2020-07-03
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      相关资源
      最近更新 更多