Future<void> setEmpId(String empId) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString(this.empId, empId);
}
Future<String> getEmpId() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String empId;
empId = await prefs.getString(this.empId) ?? '';
return empId;
}
Prefs().setEmpId(state.empVerifyEntity.employee.empId);//set empId from api
In Another Class:
class Page extends State<Page>{
Future<void> getEmpId() async {
String empId = await Prefs().getEmpId().toString();
print("----------->>>>>>>>$empId");
}
@override
void initState() {
super.initState();
getEmpId();
}
}
在这里我得到了future的实例,我尝试了每个方法,比如.然后(value(我得到的每个方法都是future的例子。如何正确数据?
您遇到的问题是由于initState方法是同步的,而您获取EmpId值的方法不是同步的。
因此,它不是在等待调用的结果。
你可以通过几种方式来实现这一点:
-
将then子句添加到getEmpId 的调用中
@override void initState() { super.initState(); getEmpId().then((result) { //your logic here ) }
-
添加PostFrameCallback
@override void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_){ getEmpId(); }); }