flatter从sqlite获取数据到对象/模型中

raogr8fs  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(285)

我有一个项目,我必须在一个列表视图中显示一些食谱。我想从sqlite数据库中获取这些配方。我尝试了一些不同的方法,我能够获得数据,但不知道如何将其放入模型中。当我将所有配方硬编码到我的模型(recipe.dart)中时,一切都正常工作:

import './ingredient.dart';

/// Represents a Recipe.
class Recipe {
  final int id;
  final String name;
  final String imagePath;
  final String preperation;
  final List<Ingredient> ingredients;

  Recipe(
      this.id, this.name, this.preperation, this.imagePath, this.ingredients);

  static List<Recipe> fetchAll() {
    int id = 0;
    String title = "Spaghettti";
    return [
      Recipe(
          id,
          title,
          "Das Hackfleisch für die Burger vorbereiten. Mit Salz und Pfeffer würzen und in die Form von Burgerpatties bringen. Von beiden Seiten scharf anbraten. Kurz vor Ende den Käse auf die Hackfleischteile legen und schmelzen lassen. Den Speck kross braten und die Hälfte der Zwiebelscheiben leicht glasig dünsten. Die Eier als Spiegeleier auf einer Seite braten. Das Eigelb muss noch flüssig sein. In der Zwischenzeit die Burgerbrötchen halbieren und im Ofen bei ca. 180 °C ungefähr 5 Minuten vorwärmen. Wenn alles fertig ist, den Burger in der folgenden Reihenfolge belegen: Auf der Brötchenunterseite Ketchup, Mayonnaise und Senf verteilen. Das Salatblatt Tomaten, rohe Zwiebelringe, Hackfleisch mit dem Käse, Speckscheiben, Spiegelei, angedünstete Zwiebeln, Ananas und die Rote Beete auftürmen und mit dem Brötchenoberteil abschließen. Alles mit einem Holzsticker fixieren und servieren",
          'assets/images/spaghetti2.jpg', [
        Ingredient('Tomaten Soße', '50 ml '),
        Ingredient('Nudeln', '200 g '),
      ]),
      Recipe(
          1,
          'Pizza',
          "Das Hackfleisch für die Burger vorbereiten. Mit Salz und Pfeffer würzen und in die Form von Burgerpatties bringen. Von beiden Seiten scharf anbraten. Kurz vor Ende den Käse auf die Hackfleischteile legen und schmelzen lassen. Den Speck kross braten und die Hälfte der Zwiebelscheiben leicht glasig dünsten. Die Eier als Spiegeleier auf einer Seite braten. Das Eigelb muss noch flüssig sein. In der Zwischenzeit die Burgerbrötchen halbieren und im Ofen bei ca. 180 °C ungefähr 5 Minuten vorwärmen. Wenn alles fertig ist, den Burger in der folgenden Reihenfolge belegen: Auf der Brötchenunterseite Ketchup, Mayonnaise und Senf verteilen. Das Salatblatt Tomaten, rohe Zwiebelringe, Hackfleisch mit dem Käse, Speckscheiben, Spiegelei, angedünstete Zwiebeln, Ananas und die Rote Beete auftürmen und mit dem Brötchenoberteil abschließen. Alles mit einem Holzsticker fixieren und servieren",
          'assets/images/Pizza.jpg', [
        Ingredient('Teig', '500 g '),
        Ingredient('Nudeln', '200 g '),
      ]),
      Recipe(
          2,
          'Burger',
          "Das Hackfleisch für die Burger vorbereiten. Mit Salz und Pfeffer würzen und in die Form von Burgerpatties bringen. Von beiden Seiten scharf anbraten. Kurz vor Ende den Käse auf die Hackfleischteile legen und schmelzen lassen. Den Speck kross braten und die Hälfte der Zwiebelscheiben leicht glasig dünsten. Die Eier als Spiegeleier auf einer Seite braten. Das Eigelb muss noch flüssig sein. In der Zwischenzeit die Burgerbrötchen halbieren und im Ofen bei ca. 180 °C ungefähr 5 Minuten vorwärmen. Wenn alles fertig ist, den Burger in der folgenden Reihenfolge belegen: Auf der Brötchenunterseite Ketchup, Mayonnaise und Senf verteilen. Das Salatblatt Tomaten, rohe Zwiebelringe, Hackfleisch mit dem Käse, Speckscheiben, Spiegelei, angedünstete Zwiebeln, Ananas und die Rote Beete auftürmen und mit dem Brötchenoberteil abschließen. Alles mit einem Holzsticker fixieren und servieren",
          'assets/images/burger.jpg', [
        Ingredient('Burger Brötchen', '2'),
        Ingredient('Salat', '50 g '),
      ]),
    ];
  }

  static Recipe fetchByID(int recipeID) {
    List<Recipe> recipes = Recipe.fetchAll();
    for (var i = 0; i < recipes.length; i++) {
      if (recipes[i].id == recipeID) {
        return recipes[i];
      }
    }
    return null;
  }
}

如您所见,它包含一个id、一个名称、一个图像路径、一个准备工作和一个成分列表,该列表也是一个模型(component.dart):

class Ingredient {
  final String ingredientTitle;
  final String amount;
  Ingredient(this.ingredientTitle, this.amount);
}

因为当我在fetchall()函数中添加或删除一个菜谱时,一切仍然有效,所以我认为编辑这个菜谱就足够了。但我的数据库结构要复杂一点,它包含4个表:

这是我的非常丑陋的表模式和一个例子。正如您可以看到的,没有zutat\u id的每个id都引用了第一个表的rezept\u id。我的问题是如何将数据库的所有配方提取到模型中?我希望你能理解这个问题并帮助我。谢谢您!

zf9nrax1

zf9nrax11#

我想你在找这样的东西:

Future<List<Recipe>> recipes() async {
  // Get a reference to the database.
  final Database db = await database;

  // Query the table for all The Recipes.
  final List<Map<String, dynamic>> maps = await db.query('recipe');

  // Convert the List<Map<String, dynamic> into a List<Recipe>.
  return List.generate(maps.length, (i) {
    return Recipe(
      id: maps[i]['id'],
      name: maps[i]['name'],
      // Same for the other properties
    );
  });
}

我希望这有帮助。

相关问题