Тип аргумента «Null» не может быть назначен типу параметра «FirebaseUser». dart (argument_type_not_assignable)

avatar
Perez Macdonald
1 июля 2021 в 20:47
403
2
0

Я работаю над приложением аутентификации флаттера, но при попытке выйти из системы я получаю сообщение об ошибке, тип 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)

avatar
gowsi gan
26 июля 2021 в 17:27
0

После FirebaseAuth.instance.signOut() получить текущего пользователя с возвращаемым типом User(Firebase) и передать в качестве аргумента..

Код образца:

FirebaseAuth.instance.signOut;
FirebaseAuth.instance.currentUser;
onSignOut(FirebaseAuth.instance.currentUser);
avatar
Pier Barocci
18 июля 2021 в 10:52
0

Столкнувшись с той же проблемой, я попытался немного изменить логику, используя user.uid как строку вместо всего класса User. Я знаю, что это не самое привлекательное решение, но в конце концов оно работает.

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(''),
      );
    }
  }
}