Sqlite 未来的建设者得到一个空列表
我对show ListView.Builder有问题 我创建了一个连接API的应用程序,用于检索我使用该提供商的人员列表 示例代码: api_provider.dart 创建连接Sqlite 未来的建设者得到一个空列表,sqlite,flutter,flutter-futurebuilder,Sqlite,Flutter,Flutter Futurebuilder,我对show ListView.Builder有问题 我创建了一个连接API的应用程序,用于检索我使用该提供商的人员列表 示例代码: api_provider.dart 创建连接 class ApiProvider { String _url = 'example.com'; Future<List<Directorio>> getPeople() async { final url = Uri.https(_url, 'app/v1/peoples
class ApiProvider {
String _url = 'example.com';
Future<List<Directorio>> getPeople() async {
final url = Uri.https(_url, 'app/v1/peoples.json');
final resp = await http.get(url);
final dataRaw = utf8.decode(resp.bodyBytes);
final decodedData = json.decode(dataRaw);
// this save the data retrieve in sqlite
return (decodedData as List).map((e) {
//print('Insert $e');
DBProvider.db.createDirectory(Directorio.fromJsonMap(e));
}).toList();
}
}
类API提供程序{
字符串_url='example.com';
Future getPeople()异步{
final url=Uri.https(_url,'app/v1/peoples.json');
final resp=wait http.get(url);
最终数据原始=utf8.解码(分别为bodyBytes);
final decodedData=json.decode(dataRaw);
//这将在sqlite中保存检索的数据
返回(解码数据为列表).map((e){
//打印(“插入$e”);
DBProvider.db.createDirectory(Directorio.fromJsonMap(e));
}).toList();
}
}
以上代码工作正常
在另一个文件名中,db_provider.dart是用于创建数据库的,也是用于保存数据的
当我把这个叫做文件但是
我需要在我使用FutureBuilder的listview中显示数据(future:DBProvider.db.getAllPeople())
这就是问题所在。当我需要热重启应用程序或关闭应用程序并再次打开时,请不要显示列表
这是我的主页
class HomePage extends StatefulWidget {
final List<Directory> directory;
HomePage({Key key, @required this.directory}) : super(key: key);
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
final title = "my title";
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: false,
title: Text(title),
backgroundColor: Colors.indigoAccent,
actions: [
IconButton(
icon: Icon(Icons.search),
onPressed: (){
print("nothing");
}
)
],
),
body: _createList()
);
}
Widget _createList() {
return FutureBuilder<List<Directory>>(
future: DBProvider.db.getAllPeople(),
builder: (BuildContext context, AsyncSnapshot<List> snapshot){
if ( snapshot.hasData == null ) {
return Center(child: CircularProgressIndicator());
}
return snapshot.hasData
? DirectorioList(directorios: snapshot.data)
: Center(child: CircularProgressIndicator());
}
);
}
}
类主页扩展StatefulWidget{
最终清单目录;
主页({Key Key,@required this.directory}):超级(Key:Key);
@凌驾
_HomePageState createState()=>\u HomePageState();
}
类_HomePageState扩展状态{
最终标题=“我的标题”;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:错误,
标题:文本(标题),
背景颜色:Colors.indigoAccent,
行动:[
图标按钮(
图标:图标(Icons.search),
已按下:(){
打印(“无”);
}
)
],
),
正文:_createList()
);
}
小部件_createList(){
回归未来建设者(
future:DBProvider.db.getAllPeople(),
生成器:(BuildContext上下文,异步快照){
if(snapshot.hasData==null){
返回中心(子项:CircularProgressIndicator());
}
返回snapshot.hasData
?目录列表(目录:snapshot.data)
:居中(子项:循环压缩机指示器());
}
);
}
}
DirectoryList是调用listView.builder的小部件
我的问题是,我在第一次安装应用程序或运行模拟器时没有看到这些信息。
我必须重新启动应用程序或关闭它,然后重新打开它
如何让它首先调用api_提供程序,然后填充数据库,然后调用FutereBuilder,这样它就不会第一次得到一个空列表
有人帮我,我已经把API信息带好了,我把它很好地保存在数据库中。我的问题是,它在第一次填充listview时就被看到了