'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