Я работаю над приложением флаттера, которое будет использовать sqflite в качестве бэкэнда. Я борюсь с картой ответов, которую я получаю обратно. Я следовал многим примерам, демонстрирующим определение таблиц, создание класса, моделирующего каждую из таблиц, и добавление функций «fromMap» и «toMap» к каждой.
Проблема c, с которой я сталкиваюсь, заключается в том, что когда я запрашиваю свою таблицу (выбирая все строки), я могу подтвердить, что количество строк, возвращаемых из запроса, является правильным (например, 3 строки). Тем не менее, когда я вызываю forEach для набора результатов, он вызывает мой метод fromMap 12 раз .... это число столбцов в моей таблице. Когда я записываю длину набора результатов (results.length), он отображает 12 .... а не 3. У меня есть 3 строки в таблице, поэтому я ожидаю, что при выводе результатов results.length.toString () будет показано 3 .. ..не 12.
Я новичок во Флаттере / Дартс, поэтому я уверен, что совершаю новую ошибку ie, но я не могу понять, где моя проблема.
Вот пример структуры таблицы, которую я использую:
await db
.execute('''
CREATE TABLE $tblRecipes ($recipeId INTEGER PRIMARY KEY AUTOINCREMENT,
$recipeRecipeName TEXT,
$recipeImageUrl TEXT,
$recipeServings INTEGER,
$recipeServingSize TEXT,
$recipeSource TEXT,
$recipePrepTime TEXT,
$recipeCookTime TEXT,
$recipeFavorite INTEGER,
$recipeDifficulty INTEGER,
$recipeSummary TEXT,
$recipeDateCreated TEXT)
''');
Вот функция, где я запрашиваю таблицу:
/*
Function: Return all recipes
*/
static Future<List<Recipe>> selectAll() async {
_db = _instance.getDatabase();
if (_db == null) {
_db = _instance.getDatabase();
}
// Query the table for all The Recipes.
//final List<Map> results = await _db.query('recipes');
List<Map> results = await _db.rawQuery('SELECT * FROM recipes');
// Populate a list with all of the recipes
var recipeList = new List<Recipe>();
results.forEach((result) {
Recipe recipe = Recipe.fromMap(result);
print(result);
recipeList.add(recipe);
});
logger.d("RecipeCrud:selectAll - Returning " + recipeList.length.toString() + "recipes");
return recipeList;
}
Вот мой fromMap function:
factory Recipe.fromMap(Map<String, dynamic> data) {
Recipe recipe = Recipe(
id: data['id'],
recipeName: data['recipe_name'],
imageUrl: data['image_url'],
servings: data['servings'],
servingSize: data['serving_size'],
source: data['source'],
prepTime: data['prep_time'],
cookTime: data['cook_time'],
favorite: data['favorite'],
difficulty: data['difficulty'],
summary: data['summary'],
dateCreated: data['date_created']);
logger.d("Recipe:fromMap - recipe id: " + recipe.id.toString() + " Recipe Name: " + recipe.recipeName);
return recipe;
}
Наконец, я также включаю подмножество моего вывода журнала, показывающего вывод журнала, который у меня есть в фрагментах кода выше. Вы увидите, что я загружаю 3 рецепта, и хотя у меня должно быть только 3 рецепта, мой метод fromMap вызывался более 3 раз .... и первый рецепт повторяется при четвертом вызове fromMap.
flutter:┌─────────────────────────────────────────────────
flutter: │ DataBaseHelper:_loadData - Recipes loaded with: 3 rows.
flutter: └─────────────────────────────────────────────────
....
flutter: Recipe:selectAll results: length: 12
....
flutter: ┌─────────────────────────────────────────────────
flutter: │ Recipe:fromMap - recipe id: 1 Recipe Name: Bolognese
flutter: └─────────────────────────────────────────────────
flutter: Recipe:selectAll - forEach (Single Result Row): {id: 1, recipe_name: Bolognese, image_url: AuthenticBologneseScaled.png, servings: 6, serving_size: 1 cup, source: https://mimiskitchen.net, prep_time: 10 minutes, cook_time: 3 hours, favorite: 1, difficulty: 2, summary: null, date_created: 3/18/20}
flutter: ┌─────────────────────────────────────────────────
flutter: │ Recipe:fromMap - recipe id: 2 Recipe Name: Clam Chowder
flutter: └─────────────────────────────────────────────────
flutter: Recipe:selectAll - forEach (Single Result Row): {id: 2, recipe_name: Clam Chowder, image_url: ClamChowderScaled.jpg, servings: 6, serving_size: 1 cup, source: https://mimiskitchen.net, prep_time: 20 minutes, cook_time: 1 hour, favorite: 1, difficulty: 4, summary: null, date_created: 3/18/20}
flutter: ┌─────────────────────────────────────────────────
flutter: │ Recipe:fromMap - recipe id: 3 Recipe Name: Favorite Quinoa Salad
flutter: └─────────────────────────────────────────────────
flutter: Recipe:selectAll - forEach (Single Result Row): {id: 3, recipe_name: Favorite Quinoa Salad, image_url: FavoriteQuinoaSaladScaled.png, servings: 2, serving_size: 1 cup, source: https://mimiskitchen.net, prep_time: 10 minutes, cook_time: 0 minutes, favorite: 1, difficulty: 1, summary: null, date_created: 3/18/20}
flutter: ┌─────────────────────────────────────────────────
flutter: │ Recipe:fromMap - recipe id: 4 Recipe Name: Bolognese
flutter: └─────────────────────────────────────────────────
flutter: Recipe:selectAll - forEach (Single Result Row): {id: 4, recipe_name: Bolognese, image_url: AuthenticBologneseScaled.png, servings: 6, serving_size: 1 cup, source: https://mimiskitchen.net, prep_time: 10 minutes, cook_time: 3 hours, favorite: 1, difficulty: 2, summary: null, date_created: 3/18/20}
flutter: ┌─────────────────────────────────────────────────
flutter: │ Recipe:fromMap - recipe id: 5 Recipe Name: Clam Chowder
flutter: └─────────────────────────────────────────────────
flutter: Recipe:selectAll - forEach (Single Result Row): {id: 5, recipe_name: Clam Chowder, image_url: ClamChowderScaled.jpg, servings: 6, serving_size: 1 cup, source: https://mimiskitchen.net, prep_time: 20 minutes, cook_time: 1 hour, favorite: 1, difficulty: 4, summary: null, date_created: 3/18/20}
flutter: ┌─────────────────────────────────────────────────
flutter: │ Recipe:fromMap - recipe id: 6 Recipe Name: Favorite Quinoa Salad
flutter: └─────────────────────────────────────────────────
flutter: Recipe:selectAll - forEach (Single Result Row): {id: 6, recipe_name: Favorite Quinoa Salad, image_url: FavoriteQuinoaSaladScaled.png, servings: 2, serving_size: 1 cup, source: https://mimiskitchen.net, prep_time: 10 minutes, cook_time: 0 minutes, favorite: 1, difficulty: 1, summary: null, date_created: 3/18/20}
flutter: ┌─────────────────────────────────────────────────
flutter: │ Recipe:fromMap - recipe id: 7 Recipe Name: Bolognese
flutter: └─────────────────────────────────────────────────
flutter: Recipe:selectAll - forEach (Single Result Row): {id: 7, recipe_name: Bolognese, image_url: AuthenticBologneseScaled.png, servings: 6, serving_size: 1 cup, source: https://mimiskitchen.net, prep_time: 10 minutes, cook_time: 3 hours, favorite: 1, difficulty: 2, summary: null, date_created: 3/18/20}
flutter: ┌─────────────────────────────────────────────────
flutter: │ Recipe:fromMap - recipe id: 8 Recipe Name: Clam Chowder
flutter: └─────────────────────────────────────────────────
flutter: Recipe:selectAll - forEach (Single Result Row): {id: 8, recipe_name: Clam Chowder, image_url: ClamChowderScaled.jpg, servings: 6, serving_size: 1 cup, source: https://mimiskitchen.net, prep_time: 20 minutes, cook_time: 1 hour, favorite: 1, difficulty: 4, summary: null, date_created: 3/18/20}
flutter: ┌─────────────────────────────────────────────────
flutter: │ Recipe:fromMap - recipe id: 9 Recipe Name: Favorite Quinoa Salad
flutter: └─────────────────────────────────────────────────
flutter: Recipe:selectAll - forEach (Single Result Row): {id: 9, recipe_name: Favorite Quinoa Salad, image_url: FavoriteQuinoaSaladScaled.png, servings: 2, serving_size: 1 cup, source: https://mimiskitchen.net, prep_time: 10 minutes, cook_time: 0 minutes, favorite: 1, difficulty: 1, summary: null, date_created: 3/18/20}
flutter: ┌─────────────────────────────────────────────────
flutter: │ Recipe:fromMap - recipe id: 10 Recipe Name: Bolognese
flutter: └─────────────────────────────────────────────────
flutter: Recipe:selectAll - forEach (Single Result Row): {id: 10, recipe_name: Bolognese, image_url: AuthenticBologneseScaled.png, servings: 6, serving_size: 1 cup, source: https://mimiskitchen.net, prep_time: 10 minutes, cook_time: 3 hours, favorite: 1, difficulty: 2, summary: null, date_created: 3/18/20}
flutter: ┌─────────────────────────────────────────────────
flutter: │ Recipe:fromMap - recipe id: 11 Recipe Name: Clam Chowder
flutter: └─────────────────────────────────────────────────
flutter: Recipe:selectAll - forEach (Single Result Row): {id: 11, recipe_name: Clam Chowder, image_url: ClamChowderScaled.jpg, servings: 6, serving_size: 1 cup, source: https://mimiskitchen.net, prep_time: 20 minutes, cook_time: 1 hour, favorite: 1, difficulty: 4, summary: null, date_created: 3/18/20}
flutter: ┌─────────────────────────────────────────────────
flutter: │ Recipe:fromMap - recipe id: 12 Recipe Name: Favorite Quinoa Salad
flutter: └─────────────────────────────────────────────────
flutter: Recipe:selectAll - forEach (Single Result Row): {id: 12, recipe_name: Favorite Quinoa Salad, image_url: FavoriteQuinoaSaladScaled.png, servings: 2, serving_size: 1 cup, source: https://mimiskitchen.net, prep_time: 10 minutes, cook_time: 0 minutes, favorite: 1, difficulty: 1, summary: null, date_created: 3/18/20}
flutter: ┌─────────────────────────────────────────────────
flutter: │ RecipeCrud:selectAll - Returning 12recipes
flutter: └─────────────────────────────────────────────────
Буду признателен за любую помощь, которую вы можете предложить.