【发布时间】:2018-07-19 14:17:07
【问题描述】:
我收到一条错误消息,指出方法 .length 正在调用空对象 _genreList。
我正在使用异步方法从本地资产 sqlite 数据库中获取数据,该数据库是流派列表。然后我使用 ListView.builder 在屏幕上显示该列表。这是获取数据的代码...
Future getGenreData() async {
Directory documentsDirectory = await getApplicationDocumentsDirectory();
String path = join(documentsDirectory.path, "asset_sample_sqlite.db");
ByteData data = await rootBundle.load(join("assets", "sample_sqlite.db"));
List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
await new File(path).writeAsBytes(bytes);
Database db = await openDatabase(path);
_genreList = await db.rawQuery('SELECT genre_name[] FROM tbl_genres');
print(_genreList);
await db.close();
}
如何在 build Widget 方法中使用此方法,以便在使用 ListView.builder 时可以访问 _genreList?像这样..
@override
Widget build(BuildContext context) {
return Scaffold(
body: new ListView.builder(
itemCount: _genreList.length, //need to access the genreList here
itemBuilder: (BuildContext context, int index) {
return new Card(
child: new ListTile(
title: new Text("${_genreList[index]}"),
onTap: () {
Navigator.push(context,
MaterialPageRoute(
builder: (context) => BookPage(id: index),
),
);
}
),
);
}
),
);
}
这里的最终目标是显示一个流派列表(来自我的 sqlite 数据库中的 tbl_genres),它能够将数据传递到下一页以显示书籍列表(来自我的 sqlite 数据库中的 tbl_books)与该类型有关。
【问题讨论】:
标签: sqlite asynchronous dart flutter