'fixed' deleting recipes in a hacky way, because of a bug in the Hive package ?

This commit is contained in:
broodjeaap89 2021-09-07 20:08:14 +02:00
parent 95c8516151
commit 5080945de6
2 changed files with 66 additions and 3 deletions

View file

@ -23,6 +23,12 @@ class PizzaRecipe extends HiveObject {
@HiveField(3)
List<RecipeStep> recipeSteps;
// Using this because deleting it from the box does weird things.
// It seems to 'null' the item that you delete, and then reduce the size/length
// cutting off the last item
@HiveField(4)
bool deleted = false;
PizzaRecipe(this.name, this.description, this.ingredients, this.recipeSteps);

View file

@ -38,7 +38,7 @@ class RecipesPage extends StatelessWidget {
itemCount: pizzaRecipesBox.length,
itemBuilder: (context, i) {
final pizzaRecipe = pizzaRecipesBox.get(i);
if (pizzaRecipe == null){
if (pizzaRecipe == null || pizzaRecipe.deleted){
return const SizedBox();
}
return InkWell(
@ -46,12 +46,69 @@ class RecipesPage extends StatelessWidget {
Navigator.pushNamed(context, "/recipe/view", arguments: pizzaRecipe);
},
onLongPress: () {
Navigator.pushNamed(context, "/recipes/edit", arguments: pizzaRecipe);
showDialog(context: context, builder: (BuildContext context) {
return AlertDialog(
title: Text(pizzaRecipe.name),
content: const Text("What do you want to do?"),
actions: <Widget>[
TextButton(
onPressed: () {
Navigator.pop(context);
Navigator.pushNamed(context, "/recipe/view", arguments: pizzaRecipe);
},
child: const Text("View"),
),
TextButton(
onPressed: () {
Navigator.pop(context);
Navigator.pushNamed(context, "/recipes/edit", arguments: pizzaRecipe);
},
child: const Text("Edit"),
),
TextButton(
onPressed: () {
Navigator.pop(context);
showDialog(context: context, builder: (BuildContext context) {
return AlertDialog(
title: const Text("Delete?"),
content: const Text("Are you sure?"),
actions: <Widget>[
TextButton(
onPressed: () {
Navigator.pop(context);
},
child: const Text("Back"),
),
TextButton(
onPressed: () async {
if (pizzaRecipe.isInBox){
pizzaRecipe.deleted = true;
pizzaRecipe.save();
}
Navigator.pop(context);
},
child: const Text("Delete", style: TextStyle(color: Colors.redAccent)),
),
]
);
});
},
child: const Text("Delete", style: TextStyle(color: Colors.redAccent)),
),
]
);
});
},
child: PizzaRecipeWidget(pizzaRecipe),
);
},
separatorBuilder: (BuildContext context, int i) => const Divider(),
separatorBuilder: (BuildContext context, int i) {
final pizzaRecipe = pizzaRecipesBox.get(i);
if (pizzaRecipe == null || pizzaRecipe.deleted){
return const SizedBox();
}
return const Divider();
},
);
}
),