gpt4 book ai didi

Flutter 使用本地 sqlite 文件创建 ListView

转载 作者:行者123 更新时间:2023-12-04 17:33:07 24 4
gpt4 key购买 nike

使用 sqflite 从本地 sql 文件 (chinook.db) 创建一个 ListView 初始问题已解决:I/flutter(5084):“ future ”的实例引用编码:https://github.com/tekartik/sqflite/blob/master/sqflite/doc/opening_asset_db.md感谢@aakash 的帮助

main.dart
body: Container(
child: FutureBuilder(
future: getSQL("albums"),
builder: (BuildContext context, AsyncSnapshot snapshot) {
print(snapshot.data);
if (snapshot.data == null) {
return Container(child: Center(child: Text("Loading...")));
} else {
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int index) {
return ListTile(
title: Text(snapshot.data[index].title),
);
},
);
}
},
),
),

getSQL.dart
Future getSQL(String tableName) async {
var databasesPath = await getDatabasesPath();
var path = join(databasesPath, "chinook.db");
// Check if the database exists
var exists = await databaseExists(path);
if (!exists) {
// Should happen only the first time you launch your application
print("Creating new copy from asset");
// Make sure the parent directory exists
try {
await Directory(dirname(path)).create(recursive: true);
} catch (_) {}
// Copy from asset
ByteData data = await rootBundle.load(join("assets", "chinook.db"));
List<int> bytes =
data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
// Write and flush the bytes written
await File(path).writeAsBytes(bytes, flush: true);
} else {
print("Opening existing database");
}
// open the database
var db = await openDatabase(path, readOnly: true);

List<Map> list = await db.rawQuery('SELECT * FROM $tableName');
List theList = [];
for (var n in list) {
theList.add(MyCategoryFinal(n["Title"]));
}
return (theList);
}
class MyCategoryFinal {
final String title;
MyCategoryFinal(this.title);
}

最佳答案

我通过为 sqflite 表创建一个类解决了这个问题,在该 map 列表上运行一个循环并将这些 map 项转换为对象列表。

示例代码;

List<ItemBean> items = new List();
list.forEach((result) {
ItemBean story = ItemBean.fromJson(result);
items.add(story);
});

要创建对象,您可以使用 https://app.quicktype.io/ .这里可以传入json为其生成类。

之后你可以像这样使用 FutureBuilder 创建你的 ListView

       FutureBuilder(
future: MyService.getAllItems(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Center(child: CircularProgressIndicator());
}

return ListView.builder(
controller: listScrollController,
itemCount: snapshot.data.length,
reverse: true,
itemBuilder: (context, index) {
return Text(snapshot.data[index].itemName);
},
);
},
),

关于Flutter 使用本地 sqlite 文件创建 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57855558/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com