STBox
STBox

Reputation: 645

The getter 'email' was called on null-Flutter/Firebase

I am new to flutter and needs help in a small segment of code. Although my code works but it shows an error/red screen first(for milliseconds). When I get email of logged in user in this way: this._user?.email, it shows:

A non-null String must be provided to a Text widget. Failed assertion: 'data != null'

And when I get email in this way: _user.email, it shows:

The getter 'email' was called on null.

Receiver: null

Tried calling: email

Kindly suggest how to throw and catch this exception or fix this issue. Any kind of help would be highly appreciated and opinion is welcome. My full piece of code is here:

class MyAccountSetting extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: AccountSetting(),
    );
  }
}

class AccountSetting extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return new AccountSettings();
  }
}

class AccountSettings extends State<AccountSetting> {
  final FirebaseAuth _auth = FirebaseAuth.instance;
  FirebaseUser _user;

  @override
  void initState() {
    super.initState();
    initUser();
  }
  initUser() async {
    _user = await _auth.currentUser();
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SingleChildScrollView(
        child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              Container(
                margin: const EdgeInsets.only(top: 10.0),
              ),
              Row(
                mainAxisAlignment: MainAxisAlignment.start,
                children: <Widget>[
                  IconButton(
                    icon: Icon(Icons.mail),
                    iconSize: 30,
                    onPressed: () {},
                  ),
                  Text(
                    _user.email,
//                    this._user?.email,
                    style: TextStyle(fontSize: 18),
                  ),
                ],
              ),
            ]
        ),
      ),
    );
  }
}

Upvotes: 1

Views: 446

Answers (1)

Hossein Yousefi
Hossein Yousefi

Reputation: 994

What do you want to show while you're waiting for the user to be retrieved? For example if you want to show an empty string ('') you can write something like:

_user == null ? '' : _user.email

or even shorter:

_user?.email ?? ''

This way if the _user is null you will show an empty string.

Upvotes: 2

Related Questions