Проверка подлинности Firebase : функции сборки никогда не должны возвращать значение null

# #flutter #firebase-authentication

Вопрос:

У меня небольшая проблема, у меня есть ошибка, которая начала возникать, когда я изменил фрагмент кода, я только добавил «попробуй, поймай».

Учетная запись, созданная со старым кодом, все еще работает, но не новая, у меня эта ошибка после регистрации (есть перенаправление на страницу участника), и при входе в систему, только на новой учетной записи пользователя.

Ошибка (первые две строки-это отпечатки):

 flutter: {nom: Toto, prenom: Tata, estAbonne: false, books: [], uid: xyDSRJ6o7ebgjnjzuoeK47ZrDId2}
flutter: User(displayName: null, email: toto@tatagdjg.fr, emailVerified: false, isAnonymous: false, metadata: UserMetadata(creationTime: 2021-08-22 00:54:47.946, lastSignInTime: 2021-08-22 00:54:47.946), phoneNumber: null, photoURL: null, providerData, [UserInfo(displayName: null, email: toto@tatagdjg.fr, phoneNumber: null, photoURL: null, providerId: password, uid: toto@tatagdjg.fr)], refreshToken: , tenantId: null, uid: xyDSRJ6o7ebgjnjzuoeK47ZrDId2)

════════ Exception caught by widgets library ═══════════════════════════════════
The following assertion was thrown building MainController(dirty, state: _MainControllerState#c1d7a):
A build function returned null.

The offending widget is: MainController
Build functions must never return null.

To return an empty space that causes the building widget to fill available room, return "Container()". To return an empty space that takes as little room as possible, return "Container(width: 0.0, height: 0.0)".
 

firebase_handler.dart (я думаю, что ошибка здесь):

 Future<User> createUser(String mail, String pwd, String nom, String prenom,
      BuildContext context) async {
    prenom = Gadgets().capitalize(prenom);
    nom = Gadgets().capitalize(nom);

    try {
      final userCredential = await authInstance.createUserWithEmailAndPassword(
          email: mail, password: pwd);
      final User user = userCredential.user;

      Map<String, dynamic> memberMap = {
        nomKey: nom,
        prenomKey: prenom,
        estAbonneKey: false,
        booksKey: [],
        uidKey: user.uid
      };
      //Add User
      await user.sendEmailVerification();
      addUserToFirebase(memberMap);
      print(memberMap);
      print(user);
      return user;
    } on FirebaseAuthException catch (e) {
      if (e.code == 'weak-password') {
        print('The password provided is too weak.');
        _show(context, "Mot de passe faible");
      } else if (e.code == 'email-already-in-use') {
        print('The account already exists for that email.');
        _show(context, "Email deja existant");
      }
    } catch (e) {
      print(e);
    }
  }
 

главный контроллер.дротик:

 class MainController extends StatefulWidget {
  String memberUid;
  User user;

  MainController({@required this.memberUid, this.user});

  @override
  _MainControllerState createState() => _MainControllerState(user: user);
}

class _MainControllerState extends State<MainController> {
  // ignore: cancel_subscriptions
  StreamSubscription streamSubscription;
  Member member;
  User user;

  _MainControllerState({this.user});

  @override
  void initState() {
    super.initState();
    streamSubscription = FirebaseHandler()
        .fireUser
        .doc(widget.memberUid)
        .snapshots()
        .listen((event) {
      setState(() {
        member = Member(event);
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    if (member == null) {
      return Loading();
    } else {
      if (user.emailVerified) {
        return HomePage(member: member);
      } else {
        VerifiedMailPage();
      }
    }
  }
}
 

Заранее благодарю вас за вашу помощь

Комментарии:

1. Ошибка указывает на то, что ваша build функция имеет путь к коду, который не возвращает значение, не являющееся null значением. VerifiedMailPage(); Линия должна быть return VerifiedMailPage(); такой .

2. Звучит как ответ @jamesdlin 🙂