【发布时间】:2021-09-22 09:08:15
【问题描述】:
我从 ListString 中提取多个数据,然后用 For 循环将它们分开,创建一个对象,然后将其添加到列表中,然后将此列表添加到另一个列表中,然后 DropDownList 在该列表中添加元素。但问题是当我尝试将列表(对象列表)添加到另一个列表(DropDownList 列表)时,我无法添加元素。
代码:
late String selectedValue = '';
List<String> dropDownItemValue = [];
List<NotePages> notePages = [];
final List<NotePages> pages = [];
Future<NotePages?> read() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
var keys = prefs.getKeys();
for (var key in keys) {
var pageList = prefs.getStringList(key);
if (pageList?[0] == 'page') {
NotePages page = new NotePages(
type: pageList![0],
pageName: pageList[1],
createdTime: DateTime.parse(pageList[2]));
pages.add(page);
await addInTheList();
}
}
}
addInTheList() {
for (var i = 0; i < pages.length; i++) {
notePages.add(pages[i]);
print(pages[i]);
}
}
@override
void initState() {
super.initState();
read();
for (var i = 0; i < notePages.length; i++) {
dropDownItemValue.add(notePages[i].pageName);
}
dropDownItemValue.add('');
dropDownItemValue.add('Add Page');
print(dropDownItemValue);
// selected value must be contain at dropDownItemValue
selectedValue = dropDownItemValue[0];
}
当我在 initState 中使用 Then() 时,该列表将元素添加到另一个列表中,我的意思是它正在工作(我可以在打印最后一个列表时看到)但我无法打开 DropDownList 它的行为就像他没有元素。像这样的代码:
@override
void initState() {
super.initState();
read().then((_) => {
for (var i = 0; i < pages.length; i++) {notePages.add(pages[i])},
for (var i = 0; i < notePages.length; i++)
{dropDownItemValue.add(notePages[i].pageName)},
dropDownItemValue.add(''),
dropDownItemValue.add('Add Page'),
print(dropDownItemValue),
// selected value must be contain at dropDownItemValue
selectedValue = dropDownItemValue[0],
});
}
我该如何解决这个问题?
【问题讨论】:
-
你需要在
then回调中调用setState来重建你的小部件,或者如果你有一些Future附带的数据,则只需使用FutureBuilder -
谢谢你,我累了
setState但没用我会检查FutureBuilder或GetStorage。