Solution 1:

Since your getCurrentUserEmail returns a Future, you'll need to use a FutureBuilder to use it in your build method.

accountEmail: FutureBuilder<String>(
  future: AuthProvider.of(context).auth.getCurrentUserEmail(),
  builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
    if (snapshot.hasData) {
      return Text(snapshot.data)
    }
    else {
      return Text("Loading user data...")
    }

  }
)

Solution 2:

The best thing to do is to upgrade to firebase_auth:0.18.0, after upgrade you can get the currentUser synchronously!

dependencies:
  flutter:
    sdk: flutter
  firebase_core : ^0.5.0
  firebase_auth : ^0.18.0

initialize Firebase:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

Then in UsersAccountDrawerHeader:

   UserAccountsDrawerHeader(
      accountName: Text('Brad Pitt'),
      accountEmail: Text('${auth.instance.currentUser.email}'),

Also check:

Undefined class 'FirebaseUser'

No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp() in Flutter and Firebase

Solution 3:

You need to add ~await~ in front of the function as it's a function that returns a ~Future~

await AuthProvider.of(context).auth.getCurrentUserEmail()