我有几个关于颤振的问题。我正在尝试获取通过他的id连接的用户名。
我是这样做的:
getUsername() async {
final user = supabase.auth.currentUser;
print(user!.id);
var response = await supabase
.from("profiles")
.select("username")
.eq("id", user!.id)
.execute();
print(response.data);
return response.data.toString();
}
print(response.data)返回me: [{username: test}]
当我尝试在我的应用程序上显示它时,这是我得到的[截图][1]
打印它的代码:
child: Text(
'$getUsername',
我想只有用户名(so "test")而不是[{username:…}]除了纠正的问题显示奇怪的代码在我的文本
谢谢![1]: https://i.stack.imgur.com/AEp5O.png
你给Text小部件一个函数引用本身,而不是函数结果。
编辑:预加载用户名
在类(主页)中创建一个变量,它需要是StatefulWidget
late Future<String> username;
@override
void initState() {
// now use this in the FutureBuilder
username = getUsername();
super.initState();
}
第一次更新getUsername
为:
Future<String> getUsername() async {
final user = supabase.auth.currentUser;
final response = await supabase.from("profiles")
.select("username")
.eq("id", user!.id)
.execute();
return response.data![0]['username'];
}
试试这个:
child: FutureBuilder<String>(
future: username,
builder: (context, snapshot) {
if (snapshot.ConnectionState != ConnectionState.done) {
return const CircularProgressIndicator();
} else if (!snapshot.hasError && snapshot.hasData) {
return Text(snapshot.data!);
} else {
return Text('error');
}
}
)