嗨,我是 flutter 新手,我正在努力在 builder 方法中使用共享首选项,这是我的代码:
getId() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String sessionId = prefs.getString('sessionId');
return Text(sessionId);
}
这是我的构建方法的一部分:
ListTile(
title: Text(
'Welcome, $getId()',
style: TextStyle(color: Colors.white),
),
这是我尝试在文本小部件中使用共享首选项时得到的错误输出:
dynamic function closure flutter
答案 0 :(得分:0)
您可以使用 FutureBuilder
小部件
示例:
FutureBuilder(
future: getId(),
builder: (context, snapshot) {
if (snapshot.hasData){
return ListTile(
title: Text(
'Welcome, ${snapshot.data}',
style: TextStyle(color: Colors.white),
),
}else if (snapshot.hasError){
return Container(); //Error getting data
}else{
return Container(); //show Loading
}
},);
并且在您的 getId()
中返回 String 而不是 Text Widget
示例:
getId() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String sessionId = prefs.getString('sessionId');
return sessionId;
}
答案 1 :(得分:0)
调用 initState 中的 getId 函数为变量“id”赋值。
@override
void initState() {
super.initState();
getId.then((value) => setState(() {
id = value;
}));
}
在你的构建方法中
ListTile(
title: Text(
'Welcome, $id',
style: TextStyle(color: Colors.white),
),
您的 getId 函数将返回字符串
getId() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String sessionId = prefs.getString('sessionId');
return sessionId;
}