diff --git a/lib/entities/PizzaEvent.dart b/lib/entities/PizzaEvent.dart index a804e1f..c9bb190 100644 --- a/lib/entities/PizzaEvent.dart +++ b/lib/entities/PizzaEvent.dart @@ -1,12 +1,25 @@ +import 'package:hive/hive.dart'; import 'package:pizzaplanner/entities/PizzaRecipe/PizzaRecipe.dart'; +part 'PizzaEvent.g.dart'; + +@HiveType(typeId: 4) class PizzaEvent { - final String name; - final PizzaRecipe recipe; - final int pizzaCount; - final int doughBallSize; - final DateTime dateTime; + @HiveField(0) + String name; + + @HiveField(1) + PizzaRecipe recipe; + + @HiveField(2) + int pizzaCount; + + @HiveField(3) + int doughBallSize; + + @HiveField(4) + DateTime dateTime; PizzaEvent( this.name, diff --git a/lib/entities/PizzaRecipe/Ingredient.dart b/lib/entities/PizzaRecipe/Ingredient.dart index c345518..1708d88 100644 --- a/lib/entities/PizzaRecipe/Ingredient.dart +++ b/lib/entities/PizzaRecipe/Ingredient.dart @@ -1,11 +1,20 @@ import 'package:flutter/material.dart'; +import 'package:hive/hive.dart'; import 'package:pizzaplanner/util.dart'; -class Ingredient { - final String name; - final String unit; - final double value; +part 'Ingredient.g.dart'; + +@HiveType(typeId: 1) +class Ingredient extends HiveObject { + @HiveField(0) + String name; + + @HiveField(1) + String unit; + + @HiveField(2) + double value; Ingredient(this.name, this.unit, this.value); diff --git a/lib/entities/PizzaRecipe/PizzaRecipe.dart b/lib/entities/PizzaRecipe/PizzaRecipe.dart index 3b22d9d..6284bce 100644 --- a/lib/entities/PizzaRecipe/PizzaRecipe.dart +++ b/lib/entities/PizzaRecipe/PizzaRecipe.dart @@ -1,19 +1,27 @@ import 'package:flutter/material.dart'; +import 'package:hive/hive.dart'; import 'package:pizzaplanner/util.dart'; -import 'package:pizzaplanner/entities/PizzaRecipe/Ingredient.dart'; -import 'package:pizzaplanner/entities/PizzaRecipe/Ingredients.dart'; +import 'package:pizzaplanner/entities/PizzaRecipe/Ingredient.dart'; import 'package:pizzaplanner/entities/PizzaRecipe/RecipeStep.dart'; import 'package:pizzaplanner/entities/PizzaRecipe/RecipeSubStep.dart'; -import 'package:pizzaplanner/util.dart'; import 'package:yaml/yaml.dart'; -class PizzaRecipe { - final String name; - final String description; - final List ingredients; +part 'PizzaRecipe.g.dart'; - final List recipeSteps; +@HiveType(typeId: 0) +class PizzaRecipe extends HiveObject { + @HiveField(0) + String name; + + @HiveField(1) + String description; + + @HiveField(2) + List ingredients; + + @HiveField(3) + List recipeSteps; PizzaRecipe(this.name, this.description, this.ingredients, this.recipeSteps); diff --git a/lib/entities/PizzaRecipe/RecipeStep.dart b/lib/entities/PizzaRecipe/RecipeStep.dart index 8de8b1b..31cdcd9 100644 --- a/lib/entities/PizzaRecipe/RecipeStep.dart +++ b/lib/entities/PizzaRecipe/RecipeStep.dart @@ -1,14 +1,33 @@ +import 'package:hive/hive.dart'; import 'package:pizzaplanner/entities/PizzaRecipe/RecipeSubStep.dart'; -class RecipeStep { - final String name; - final String waitDescription; - final String waitUnit; - final int waitMin; - final int waitMax; - late int waitValue; - final String description; - final List subSteps; +part 'RecipeStep.g.dart'; + +@HiveType(typeId: 2) +class RecipeStep extends HiveObject { + @HiveField(0) + String name; + + @HiveField(1) + String waitDescription; + + @HiveField(2) + String waitUnit; + + @HiveField(3) + int waitMin; + + @HiveField(4) + int waitMax; + + @HiveField(5) + int? waitValue; + + @HiveField(6) + String description; + + @HiveField(7) + List subSteps; RecipeStep(this.name, this.description, this.waitDescription, this.waitUnit, this.waitMin, this.waitMax, this.subSteps) { waitValue = waitMin; @@ -40,6 +59,6 @@ class RecipeStep { } int getCurrentWaitInSeconds() { - return convertToSeconds(this.waitValue); + return convertToSeconds(this.waitValue!); } } \ No newline at end of file diff --git a/lib/entities/PizzaRecipe/RecipeSubStep.dart b/lib/entities/PizzaRecipe/RecipeSubStep.dart index af3b2c1..16ea21d 100644 --- a/lib/entities/PizzaRecipe/RecipeSubStep.dart +++ b/lib/entities/PizzaRecipe/RecipeSubStep.dart @@ -1,6 +1,15 @@ -class RecipeSubStep { - final String name; - final String description; + +import 'package:hive/hive.dart'; + +part 'RecipeSubStep.g.dart'; + +@HiveType(typeId: 3) +class RecipeSubStep extends HiveObject { + @HiveField(0) + String name; + + @HiveField(1) + String description; RecipeSubStep(this.name, this.description); } \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index e897d98..ddbb8c6 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,9 +1,30 @@ import 'package:flutter/material.dart'; +import 'package:pizzaplanner/entities/PizzaEvent.dart'; +import 'package:pizzaplanner/entities/PizzaRecipe/Ingredient.dart'; +import 'package:pizzaplanner/entities/PizzaRecipe/PizzaRecipe.dart'; +import 'package:pizzaplanner/entities/PizzaRecipe/RecipeStep.dart'; +import 'package:pizzaplanner/entities/PizzaRecipe/RecipeSubStep.dart'; import 'package:pizzaplanner/pages/AddPizzaEventPage.dart'; import 'package:pizzaplanner/pages/PizzaEventsPage.dart'; -void main() { +import 'package:hive/hive.dart'; +import 'package:hive_flutter/hive_flutter.dart'; + +void main() async { + await Hive.initFlutter(); + + Hive.registerAdapter(PizzaRecipeAdapter()); + Hive.registerAdapter(RecipeStepAdapter()); + Hive.registerAdapter(RecipeSubStepAdapter()); + Hive.registerAdapter(IngredientAdapter()); + Hive.registerAdapter(PizzaEventAdapter()); + + await Hive.openBox("PizzaEvents"); + await Hive.openBox("PizzaRecipes"); + runApp(PizzaPlanner()); + + //await Hive.close(); } class PizzaPlanner extends StatelessWidget { diff --git a/lib/pages/AddPizzaEventPage.dart b/lib/pages/AddPizzaEventPage.dart index 42576fa..e71ffc7 100644 --- a/lib/pages/AddPizzaEventPage.dart +++ b/lib/pages/AddPizzaEventPage.dart @@ -2,6 +2,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_datetime_picker/flutter_datetime_picker.dart'; import 'package:fluttericon/font_awesome5_icons.dart'; +import 'package:hive/hive.dart'; import 'package:pizzaplanner/entities/PizzaEvent.dart'; import 'package:pizzaplanner/entities/PizzaRecipe/PizzaRecipe.dart'; import 'package:pizzaplanner/util.dart'; @@ -149,7 +150,7 @@ class AddPizzaEventPageState extends State { children: [ Expanded( child: Slider( - value: recipeStep.waitValue.toDouble(), + value: recipeStep.waitValue!.toDouble(), min: recipeStep.waitMin.toDouble(), max: recipeStep.waitMax.toDouble(), divisions: recipeStep.waitMax - recipeStep.waitMin, @@ -188,19 +189,23 @@ class AddPizzaEventPageState extends State { DateTime? eventTime = await showDialog( context: context, builder: (context) { - return ConfirmPizzaEventDialog(name: name, pizzaRecipe: pizzaRecipe, pizzaCount: pizzaCount, doughBallSize: doughBallSize); + return ConfirmPizzaEventDialog(name: name, pizzaRecipe: pizzaRecipe, pizzaCount: pizzaCount, doughBallSize: doughBallSize); } ); if (eventTime == null){ return; } - Navigator.pop(context, PizzaEvent( - this.name, - this.pizzaRecipe, - this.pizzaCount, - this.doughBallSize, - eventTime - )); + var pizzaEventsBox = await Hive.box("PizzaEvents"); + pizzaEventsBox.add( + PizzaEvent( + this.name, + this.pizzaRecipe, + this.pizzaCount, + this.doughBallSize, + eventTime + ) + ); + Navigator.pop(context); }, ) ) diff --git a/lib/pages/PizzaEventsPage.dart b/lib/pages/PizzaEventsPage.dart index 011a543..3c744e6 100644 --- a/lib/pages/PizzaEventsPage.dart +++ b/lib/pages/PizzaEventsPage.dart @@ -3,6 +3,9 @@ import 'package:flutter/material.dart'; import 'package:pizzaplanner/entities/PizzaEvent.dart'; import 'package:pizzaplanner/widgets/PizzaEventWidget.dart'; +import 'package:hive/hive.dart'; +import 'package:hive_flutter/hive_flutter.dart'; + class PizzaEventsPage extends StatefulWidget { @override PizzaEventsState createState() => PizzaEventsState(); @@ -18,11 +21,22 @@ class PizzaEventsState extends State { appBar: AppBar( title: Text("Pizza Events"), ), - body: ListView.separated( - padding: const EdgeInsets.all(8), - itemCount: pizzaEvents.length, - itemBuilder: (BuildContext context, int i) => PizzaEventWidget(pizzaEvents[i]), - separatorBuilder: (BuildContext context, int i) => const Divider(), + body: Container( + padding: EdgeInsets.all(10), + child: ValueListenableBuilder( + valueListenable: Hive.box("PizzaEvents").listenable(), + builder: (context, Box box, widget) { + if (box.isEmpty){ + return Container(); + } + return ListView.separated( + padding: const EdgeInsets.all(8), + itemCount: box.length, + itemBuilder: (BuildContext context, int i) => PizzaEventWidget(box.getAt(i)!), + separatorBuilder: (BuildContext context, int i) => const Divider(), + ); + } + ), ), floatingActionButton: FloatingActionButton( onPressed: () async { diff --git a/pubspec.yaml b/pubspec.yaml index 83b3175..7fccd0e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -35,10 +35,16 @@ dependencies: ref: "df4ed6fc2e24725604e90f79aedb98a7af7fb04d" yaml: ^3.1.0 + hive: ^2.0.4 + hive_flutter: ^1.1.0 + dev_dependencies: flutter_test: sdk: flutter + hive_generator: ^1.1.0 + build_runner: ^2.0.6 + # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec