#flutter
#ошибка
Вопрос:
Я хочу отобразить что-то из общих настроек.
Вот мой код :
return FutureBuilder<ChildModel>(
future: sharedPreference.getData(),
builder: (context, snapshot) {
print("SNAPSHOT" snapshot.data.toString());
if (snapshot.hasData amp;amp;
snapshot.data != null) {
return _render(snapshot,context);
} else if (snapshot.hasError) {
return Text("${snapshot.error}");
} else {
return Text('Select Vehicle');
}
},
);
Мой SharedPreferece:
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
равно null.
Я хочу вернуть тот singleObject, который я нашел в этом цикле.
Кто-нибудь, пожалуйста, может мне помочь с этим???
Комментарии:
1. где находится часть, в которой вы сохраняете общие настройки?
2. Я не сохраняю это, я просто получаю соответствующий объект из списка. Сохранение и возврат списка list работает нормально.
3. возможно, вы пытаетесь извлечь данные, но в них нет данных с ключом. добавить?? вот так и попробуйте. окончательный список parsedList = json.decode(prefs.get(_kUserVehicles) ?? 0);
Ответ №1:
Вы не ожидаете завершения future перед возвратом значения.
Итак
return singleObject ?? null;
будет выполняться до
getSelectedVehicleID()
Что вам нужно, так это
int _selectedVehicleId = await getSelectedVehicleID();
А затем продолжайте получать что-либо из общих настроек и возвращать это.
Надеюсь, это поможет 🙂