3

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

我知道如何获取数据,也知道如何构建小部件。我很困惑,我不知道如何将从数据库中获取的数据转换为列表(我可以使用它来构建我的小部件)。

所以我得到 Future List 但我需要 List Drink

只是看看:

我的对象:

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

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

数据库:

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

我如何获得输出:

Future<List> raw() 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();
    return r;
  }
4

1 回答 1

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'], 
        );
    }
}

稍后,您可以将获取的数据库数据映射到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;
  }

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

我没有测试过这个。

于 2020-08-03T11:29:18.933 回答