'Flutter : current user data
hello guys i get problem here when I used this method to get current user data firebase and there is 2 methods I got it after some search but all of them give me same error I think its come because nullsafety update
User? user = FirebaseAuth.instance.currentUser;
Future<DocumentSnapshot<Map<String, dynamic>>> snap = FirebaseFirestore.instance.collection('Users').doc(user?.uid).get();
String? currentpic = snap **[** 'pic']; << **Here I get red line **
String? currentUserName = snap **[** 'name']; << **Here I get red line**
String? currentUrlrole = snap **[** 'role']; << **Here I get red line**
this my versions :
get: ^4.6.1
firebase_core: ^1.12.0
firebase_auth: ^3.3.8
cloud_firestore: ^3.1.9
firebase_storage: ^10.2.8
Null safety
method 1 :
class Log extends StatefulWidget {
@override
_LogState createState() => _LogState();
}
class _LogState extends State<Log> {
UserModel? model;
bool _isLoading = false;
Stream<DocumentSnapshot> getData() async* {
User? user = await FirebaseAuth.instance.currentUser;
yield* FirebaseFirestore.instance.collection('/Users').doc(model?.email).snapshots();
}
@override
Widget build(BuildContext context) {
User? user = FirebaseAuth.instance.currentUser;
Future<DocumentSnapshot<Map<String, dynamic>>> snap = FirebaseFirestore.instance.collection('Users').doc(user?.uid).get();
String? currentpic = snap[ 'pic'];
String? currentUserName = snap['name'];
String? currentUrlrole = snap['role'];
Color color =Colors.green;
Widget buttonSection = Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
_buildButtonColumn(color= Color.fromRGBO(0, 131, 72, 1), Icons.person_add_alt_1_rounded, RegisterView(), 'register'),
_buildButtonColumn(color= Color.fromRGBO(0, 131, 72, 1), Icons.login, LoginView(), 'login'),
],
);
return StreamBuilder(
stream: getData(),
builder: (context, snapshot) {
return Container(
decoration: BoxDecoration(image: DecorationImage(image:AssetImage("assets/images/b.jpeg", ),fit: BoxFit.fitHeight,)),
child: Ink(
padding: EdgeInsets.only(top: 0, left: 0, right: 0),
child: Column(
children: [
Container(
padding: EdgeInsets.all(100),
),
buttonSection,
])));});
}
Column _buildButtonColumn(
Color color,
IconData icon,
Widget page,
String label,
) {
return Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(
width: 150,
height: 200,
child: FittedBox(
child: FloatingActionButton(
elevation: 0,
backgroundColor: Colors.transparent,
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => page),
);
},
child: Icon(icon, color: color),
),
),
),
Text(
label,
style: TextStyle(
fontSize: 24,
fontWeight: FontWeight.w400,
color: Color.fromRGBO(0, 131, 72, 1),
),
),
],
);
}
}
method 2 :
class _LogState extends State<Log> {
final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
String mypic = '';
String myUsername = '';
String myUrlrole= '';
void _getdata() async {
User? user = _firebaseAuth.currentUser;
FirebaseFirestore.instance
.collection('Users')
.doc(user?.uid)
.snapshots()
.listen((userData) {
setState(() {
mypic = userData.data()!['pic'];
myUsername = userData.data()!['name'];
myUrlrole = userData.data()!['role'];
});});
}
UserModel? model;
bool _isLoading = false;
Stream<DocumentSnapshot> getData() async* {
User? user = await FirebaseAuth.instance.currentUser;
yield* FirebaseFirestore.instance.collection('/Users').doc(model?.email).snapshots();
print("============================");
print(model?.email);
}
@override
Widget build(BuildContext context) {
Color color =Colors.green;
Widget buttonSection = Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
_buildButtonColumn(color= Color.fromRGBO(0, 131, 72, 1), Icons.person_add_alt_1_rounded, RegisterView(), 'register'),
_buildButtonColumn(color= Color.fromRGBO(0, 131, 72, 1), Icons.login, LoginView(), 'login'),
],
);
return StreamBuilder(
stream: getData(),
builder: (context, snapshot) {
return Container(
decoration: BoxDecoration(image: DecorationImage(image:AssetImage("assets/images/b.jpeg", ),fit: BoxFit.fitHeight,)),
child: Ink(
padding: EdgeInsets.only(top: 0, left: 0, right: 0),
child: Column(
children: [
Container(
padding: EdgeInsets.all(100),
),
buttonSection,
])));});
}
Column _buildButtonColumn(
Color color,
IconData icon,
Widget page,
String label,
) {
return Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(
width: 150,
height: 200,
child: FittedBox(
child: FloatingActionButton(
elevation: 0,
backgroundColor: Colors.transparent,
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => page),
);
},
child: Icon(icon, color: color),
),
),
),
Text(
label,
style: TextStyle(
fontSize: 24,
fontWeight: FontWeight.w400,
color: Color.fromRGBO(0, 131, 72, 1),
),
),
],
);
}
}
method 2 its work but doesn't display anything when I but it in Text(myUrlrole)! all error get in square brackets when I add dot "." before square brackets I get error on open square brackets
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
