为什么它展示了未来的实例?如何获取数据


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值的方法不是同步的。

因此,它不是在等待调用的结果。

你可以通过几种方式来实现这一点:

  1. 将then子句添加到getEmpId 的调用中

    @override
    void initState() {
    super.initState();
    getEmpId().then((result) {
    //your logic here
    )
    }
    
  2. 添加PostFrameCallback

    @override
    void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_){
    getEmpId();
    });
    }
    

最新更新