我想通过“共享首选项”呈现某些内容。
这是我的代码:
return FutureBuilder<ChildModel>(
future: sharedPreference.getData(),
builder: (context, snapshot) {
print("SNAPSHOT" + snapshot.data.toString());
if (snapshot.hasData &&
snapshot.data != null) {
return _render(snapshot,context);
} else if (snapshot.hasError) {
return Text("${snapshot.error}");
} else {
return Text('Select Vehicle');
}
},
);
我的共享首选项:
Future<ChildModel> getData() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
ChildModel singleObject ;
List<ChildModel> userVehicleList = [];
getSelectedVehicleID().then((onValue){
if(onValue!=null){
if (prefs.get(_kUserVehicles) != null) {
final List parsedList = json.decode(prefs.get(_kUserVehicles));
userVehicleList = parsedList.map<ChildModel>((val) => ChildModel.fromJson(val)).toList();
}
for (int i = 0; i < userVehicleList.length; i++) {
if (userVehicleList[i].id == onValue) {
singleObject = userVehicleList[i];
}
}
}
});
return singleObject ?? null;
}
问题是singleObject = userVehicleList[i]
已执行但没有返回任何内容。
在Future Builder中,snapshot.data
始终为空。
我想返回在该循环中找到的那个singleObject。
有人可以帮我吗?
答案 0 :(得分:1)
返回值之前,您不必等待将来完成。
所以
return singleObject ?? null;
将在
之前执行getSelectedVehicleID()
您需要的是
int _selectedVehicleId = await getSelectedVehicleID();
然后继续从共享的首选项中获取任何内容并将其返回。
希望会有所帮助:)