Вы можете использовать FutureBuilder
для отображения имени пользователя, но также вам нужно получить текущего пользователя, поэтому, если вы не получаете текущего пользователя где-то еще, вы можете использовать вложенный FutureBuilder
s
И вы можете проверить текущее состояние этого будущего с помощью свойства connectionState
и показать CircularProgressIndicator()
во время ожидания connectionState;
Widget DisplayUserName() {
return FutureBuilder(
future: FirebaseAuth.instance.currentUser(),
builder: (BuildContext context, AsyncSnapshot<FirebaseUser> snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
return Text('Press button to start.');
case ConnectionState.active:
case ConnectionState.waiting:
return Text('Awaiting result...');
case ConnectionState.done:
if (snapshot.hasError)
return Text('Error: ${snapshot.error}');
return FutureBuilder(
future: Firestore.instance.collection('users').document(snapshot.data.uid).get(),
builder: (BuildContext context,
AsyncSnapshot<DocumentSnapshot> user) {
switch (user.connectionState) {
case ConnectionState.none:
return Text('Press button to start.');
case ConnectionState.active:
case ConnectionState.waiting:
return CircularProgressIndicator();
case ConnectionState.done:
if (user.hasError)
return Text('Error: ${user.error}');
return Padding(
padding:
const EdgeInsets.only(left: 20.0, right: 20.0, top: 10.0),
child: Text(
user.data['name'],// Im assuming in CloudFirestore your field name is name.
style: TextStyle(
fontFamily: 'Montserrat',
fontWeight: FontWeight.bold,
fontSize: 17.0),
),
);
}
return null; // unreachable
},
);
}
return null; // unreachable
},
);
}
если у вас есть текущий пользователь в глобальном
Future<FirebaseUser> user;
// you may get it in initState
@override
void initState() {
user = FirebaseAuth.instance.currentUser();
super.initState();
}
Этого будет достаточно,
return FutureBuilder(
future: Firestore.instance.collection('users').document(user.uid).get(),
builder: (BuildContext context,
AsyncSnapshot<DocumentSnapshot> user) {
switch (user.connectionState) {
case ConnectionState.none:
return Text('Press button to start.');
case ConnectionState.active:
case ConnectionState.waiting:
return Text('Awaiting result...');
case ConnectionState.done:
if (user.hasError)
return Text('Error: ${user.error}');
return Padding(
padding:
const EdgeInsets.only(left: 20.0, right: 20.0, top: 10.0),
child: Text(
user.data['name'],
style: TextStyle(
fontFamily: 'Montserrat',
fontWeight: FontWeight.bold,
fontSize: 17.0),
),
);
}
return null; // unreachable
},
);