首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >颤振未来& Sqflite

颤振未来& Sqflite
EN

Stack Overflow用户
提问于 2020-02-17 14:45:10
回答 1查看 304关注 0票数 0

我使用Sqflite保存数据(例如人名)。通过这个函数,我获得了DB的数据:

代码语言:javascript
复制
Future<List<Student>> getStudentList() async {
await openDb();
final List<Map<String, dynamic>> maps = await _database.query('student', orderBy: 'name ASC'); 
return List.generate(maps.length, (i) {
  return Student(
      id: maps[i]['id'], name: maps[i]['name']);
});
}

在开始时,我希望将DB中的名称添加到列表中。

代码语言:javascript
复制
  @override
void initState() {
foo();
//userList.add(User('Test1', 'Test, false));
//userList.add(User('test2', 'test', false));
userList
    .sort((a, b) => a.name.toLowerCase().compareTo(b.name.toLowerCase()));
filterList();
searchController.addListener(() {
  filterList();
});
super.initState();
}

我就是这样定义foo()的,我想从DB中获取数据:

代码语言:javascript
复制
Future foo() async{ 
studlist = await dbmanager.getStudentList();
 var tl = studlist.length;
  for (var i = 0; i < tl; i++) {
  userList.add(User(studlist[i].name, 'Test', false));
  // print('${studlist[i].name}');
 // print('$i');
}
}

问题是,这个函数没有保存列表中的任何内容。如果我在void initState()中使用这个测试代码而不是foo(),它可以工作:

代码语言:javascript
复制
userList.add(User('Test1', 'Test, false));
userList.add(User('test2', 'test', false));

所以foo()一定有问题。我还在for循环中添加了print('${studlist[i].name}'); print('$i');,以测试studlist[i]是否有效,并打印出每个名称。

谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-17 16:53:08

问题是您的foo方法是异步的,您没有等待它。因此,initState调用代码在等待被击中时和在userList添加之前立即返回。添加将最终发生,但您的initState逻辑在此之前正在运行。要使其工作,您需要等到foo完成。您不能只是去做initState异步并等待foo,但是您可以在Future完成之后使用then方法完成您的工作。

代码语言:javascript
复制
void initState() {
  foo().then((result) {
      userList
        .sort((a, b) => a.name.toLowerCase().compareTo(b.name.toLowerCase()));
    filterList();
    searchController.addListener(() {
      filterList();
    });
    setState(() => {});
  });

  super.initState();
}

现在,您的build需要处理还没有用户的加载情况,但是这段代码应该填充您的userList并使用用户重新构建您的视图。如果这变得更加复杂,您可能需要考虑使用StreamBuilder来处理这个异步行为。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60264893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档