0

This is my home.dart

import 'package:flutter/material.dart';
import 'package:taxiapp/models/user.dart';
import 'package:taxiapp/pages/auth/auth_page.dart';
import 'package:taxiapp/repositories/user_repository.dart';
    
    class HomePage extends StatelessWidget {
      const HomePage({Key? key}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return SafeArea(
          child: Scaffold(
            resizeToAvoidBottomInset: true,
            body: ValueListenableBuilder<User?>(
              valueListenable: UserRepository.instance!.userNotifier,
              builder: (context, value, child) {
                if (value != null) {
                  return Builder(
                    builder: (context) {
                      if (!value.isVerified!) {
                        return AuthPage(page: 2, uid: value.uid);
                      } else {
                        return Container(
                          height: MediaQuery.of(context).size.height,
                          width: MediaQuery.of(context).size.width,
                          color: Colors.white,
                          child: Center(
                            child: Text(
                                'Successfully Logged In \n\n${UserRepository.instance!.userNotifier.value!.email}'),
                          ),
                        );
                      }
                    },
                  );
                } else {
                  return const AuthPage();
                }
              },
            ),
          ),
        );
      }
    }

//////////////////////////////////////////////////////////////////////////

This is where I am getting error

//////////////////////////////////////////////////////////////////////////

valueListenable: UserRepository.instance!.userNotifier,

//////////////////////////////////////////////////////////////////////////

And This my user_repositary.dart

//////////////////////////////////////////////////////////////////////////

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart' as auth;
import 'package:flutter/material.dart';
import 'package:taxiapp/models/user.dart';

class UserRepository {
  UserRepository._();
  static UserRepository? _instance;

  static UserRepository? get instance {
    _instance ??= UserRepository._();
    return _instance;
  }

  ValueNotifier<User?> userNotifier = ValueNotifier<User?>(null);

  User? get currentUser {
    return userNotifier.value;
  }

  Future<User?> setUpAccount(
      String? uid, String email, String firstname, String lastname) async {
    await FirebaseFirestore.instance.collection('users').doc(uid).update({
      'email': email,
      'firstname': firstname,
      'lastname': lastname,
      'role': '0',
      'isVerified': true,
    });
    userNotifier.value = await UserRepository.instance!.getUser(uid);
    return userNotifier.value;
  }

  Future<User?> getUser(String? uid) async {
    userNotifier.value = null;
    DocumentSnapshot userSnapshot =
        await FirebaseFirestore.instance.collection('users').doc(uid).get();
    if (!userSnapshot.exists) {
      return null;
    } else {
      Map<String, dynamic> data = userSnapshot.data() as Map<String, dynamic>;
      print(data['email']);
      userNotifier.value = User.fromJson(uid, data);
    }

    return userNotifier.value;
  }

  Future<void> signInCurrentUser() async {
    if (UserRepository.instance!.currentUser == null) {
      auth.User? authUser = auth.FirebaseAuth.instance.currentUser;
      if (authUser == null) {
        print("no current user");
        try {
          authUser = await auth.FirebaseAuth.instance.authStateChanges().first;
        } catch (_) {}
      }
      if (authUser == null) {
        print("no state change user");
      } else {
        await UserRepository.instance!.getUser(authUser.uid);
      }
    }
  }
}

//////////////////////////////////////////////////////////////////////////

Where I am initializing userNotifier as

//////////////////////////////////////////////////////////////////////////

ValueNotifier<User?> userNotifier = ValueNotifier<User?>(null);
Sachin V
  • 1
  • 2

1 Answers1

0

This can happen if you are using the ! operator after a nullable variable that is null. Based on the name I'd say it's from the UserRespository.instance! in valueListenable but it can be any of the other nullable values that you haven't checked for null values.

Dorrin-sot
  • 309
  • 1
  • 3