我想创建一个配置文件页面,只显示来自用户的信息,但我很难访问数据。当我想使用变量用户时,它显示“未来示例〈Map〈字符串,动态〉〉”
如果我把'小部件构建'在异步我有一个错误消息谁告诉我:“ProfileScreen.build”(“未来函数(BuildContext)”)不是“StatelessWidget.build”(“小部件函数(BuildContext)”)的有效重写。
class ProfileScreen extends StatelessWidget {
ProfileScreen({super.key});
@override
Widget build(BuildContext context) {
final user = displayUser();
return Scaffold(
appBar: AppBar(
title: Text('Profile'),
),
body: Align(
alignment: Alignment.topLeft,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Align(
alignment: Alignment.topLeft,
child: Column(children: [
Text('Prénom :${user}\nNom :\nEmail :',
textWidthBasis: TextWidthBasis.longestLine),
]),
)
]),
),
persistentFooterButtons: [
SignOutButton(),
BottomNavBar(),
]);
}
// Get user informations
Future<Map<String, dynamic>> displayUser() async {
final User? currentUser = FirebaseAuth.instance.currentUser;
late final userUid = currentUser?.uid;
late final ref = FirebaseDatabase.instance.ref();
final resSnapshot = await ref.child('/utilisateur/' + userUid!).get();
final Map<String, dynamic> user = {};
if (resSnapshot.exists) {
user['id'] = userUid;
for (var value in resSnapshot.children) {
String key = value.key as String;
var val = value.value;
user[key] = val;
}
} else {
print('No data available.');
}
print(user); // This print display exactly the informations I want.
return user;
}
}
谢谢你的帮助。
3条答案
按热度按时间zvokhttg1#
你的
displayUser
是async
函数,你不能在build
方法中调用它,你需要像这样使用FutureBuilder
:您可以根据需要自定义加载和错误状态。
bmp9r5qi2#
您可以在
initstate
中加载user
,然后使用setstate
设置用户dldeef673#
将
StatelessWidget
更改为StatefulWidget
,因为userInteract
在配置文件屏幕上,UserInteraction
更改将显示在firebase上。