参数类型 'Null' 不能分配给参数类型 'FirebaseUser'.dart(argument_type_not_assignable)

时间:2021-07-01 20:47:56

标签: firebase flutter dart firebase-authentication

我正在开发一个 flutter auth 应用程序,同时尝试注销我收到一个错误,类型 null 不能分配给参数类型。

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:time_tracker_app/app/home_page.dart';
import 'package:time_tracker_app/app/sign_in/sign_in_page.dart';

class LandingPage extends StatefulWidget {

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

class _LandingPageState extends State<LandingPage> {
  FirebaseUser? _user;

  void _updateUser(FirebaseUser user) {
    setState(() {
      _user = user;
    });
  }

  @override
  Widget build(BuildContext context) {
    if (_user == null) {
      return SignInPage(onSignIn: _updateUser);
    }
    return HomePage(
      //error
      onSignOut: () => _updateUser(null),
    );
  }
}

2 个答案:

答案 0 :(得分:0)

遇到同样的问题,我尝试稍微改变逻辑,使用 user.uid 作为 String 而不是所有 User 类(我知道这不是最“性感”的解决方案,但它有效到底...)。 我是 Flutter 的新手,所以我相信会有更好的解决方案。希望能帮到你。

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

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

class _LandingPageState extends State<LandingPage> {
  String? _userId = '';

  void _updateUser(String userId) {
    print('User id: $userId');
    setState(() {
      _userId = userId;
    });
  }

  @override
  Widget build(BuildContext context) {
    if (_userId == '') {
      return SignInPage(
        onSignIn: (user) => _updateUser(user.uid),
      );
    } else {
      return HomePage(
        onSignOut: () => _updateUser(''),
      );
    }
  }
}

答案 1 :(得分:0)

在 FirebaseAuth.instance.signOut() 之后获取具有 User(Firebase) 返回类型的当前用户并作为参数传递..

//示例代码
FirebaseAuth.instance.signOut;
FirebaseAuth.instance.currentUser;
onSignOut(FirebaseAuth.instance.currentUser);