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);