Future<List> 在 Flutter 中列出对象

mar*_*EBR 3 dart flutter sqflite

我最近开始使用 Flutter。\n我的应用程序运行 sqflite 数据库,我想从中获取所有数据并将其显示在我的应用程序中的行小部件中。

\n

我知道如何获取数据,并且知道如何构建小部件。\n我\xc2\xb4m 很困惑,我不知道如何将从数据库获取的数据转换为列表(用它我可以构建我的列表)小部件)。

\n

所以我得到了未来清单,但我需要清单饮料

\n

只是看看:

\n

我的对象:

\n
class Drink {\n  int id;\n  String time;\n  int amount;\n\n  Drink({this.id, this.time, this.amount});\n}\n
Run Code Online (Sandbox Code Playgroud)\n

数据库:

\n
Future _onCreate(Database db, int version) async {\n    await db.execute('''\n          CREATE TABLE $table (\n            $columnId INTEGER PRIMARY KEY,\n            $columnTime TEXT NOT NULL,\n            $columnAmount INTEGER NOT NULL\n          )\n          ''');\n  }\n
Run Code Online (Sandbox Code Playgroud)\n

我如何获得输出:

\n
Future<List> raw() async {\n    Database db = await instance.database;\n    var dbClient = await db;\n    var result = await dbClient.rawQuery("SELECT * FROM $table");\n    List<Map<String, dynamic>> r = result.toList();\n    return r;\n  }\n
Run Code Online (Sandbox Code Playgroud)\n

art*_*mal 6

在您的中创建一个工厂构造函数model

class Drink {
  int id;
  String time;
  int amount;

  Drink({this.id, this.time, this.amount});

  factory Drink.fromJson(Map<String, dynamic> json) {
        return Drink(
            id: json['columnId'],
            time: json['columnTime'], 
            amount: json['columnAmount'], 
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

稍后,您可以将获取的数据库数据映射为Drink这样

Future<List<Drink>> fetchDrinks() async {
    Database db = await instance.database;
    var dbClient = await db;
    var result = await dbClient.rawQuery("SELECT * FROM $table");
    List<Map<String, dynamic>> r = result.toList().map((data) => Drink.fromJson(data));
    return r;
  }
Run Code Online (Sandbox Code Playgroud)

您可以使用awaitonfetchDrinks方法来获取对象列表Drink

我没有测试过这个。