diff --git a/lib/models/diary.dart b/lib/models/diary.dart index 4346f1f..98956cb 100644 --- a/lib/models/diary.dart +++ b/lib/models/diary.dart @@ -32,4 +32,17 @@ class Diary { carb = map['carb'] as double, fat = map['fat'] as double, fiber = map['fiber'] as double; + + Map toMap() { + return { + 'id': id, + 'date': date.toIso8601String(), + 'meals': meals.map((e) => e.toMap()).toList(), + 'calories': calories, + 'protein': protein, + 'carb': carb, + 'fat': fat, + 'fiber': fiber, + }; + } } diff --git a/lib/models/entry.dart b/lib/models/entry.dart index 1a41a75..1d26c8b 100644 --- a/lib/models/entry.dart +++ b/lib/models/entry.dart @@ -33,4 +33,18 @@ class Entry { fat = map['fat'] as double, fiber = map['fiber'] as double, carb = map['carb'] as double; + + Map toMap() { + return { + 'id': id, + 'grams': grams, + 'product': product.toMap(), + 'mealId': mealId, + 'calories': calories, + 'protein': protein, + 'fat': fat, + 'fiber': fiber, + 'carb': carb, + }; + } } diff --git a/lib/models/meal.dart b/lib/models/meal.dart index 84183aa..d10251c 100644 --- a/lib/models/meal.dart +++ b/lib/models/meal.dart @@ -38,4 +38,18 @@ class Meal { fat = map['fat'] as double, fiber = map['fiber'] as double, diaryId = map['diary_id'] as int; + + Map toMap() { + return { + 'id': id, + 'name': name, + 'order': order, + 'calories': calories, + 'protein': protein, + 'fat': fat, + 'fiber': fiber, + 'carb': carb, + 'diaryId': diaryId, + }; + } } diff --git a/lib/models/preset.dart b/lib/models/preset.dart index 5869a22..358585d 100644 --- a/lib/models/preset.dart +++ b/lib/models/preset.dart @@ -25,4 +25,16 @@ class Preset { carb = map['carb'] as double, fat = map['fat'] as double, fiber = map['fiber'] as double; + + Map toMap() { + return { + 'id': id, + 'name': name, + 'calories': calories, + 'protein': protein, + 'fat': fat, + 'fiber': fiber, + 'carb': carb, + }; + } } diff --git a/lib/screens/based.dart b/lib/screens/based.dart index 828b145..58aeb7f 100644 --- a/lib/screens/based.dart +++ b/lib/screens/based.dart @@ -6,6 +6,7 @@ import 'package:fooder/components/app_bar.dart'; import 'package:fooder/components/navigation_bar.dart'; import 'package:fooder/screens/login.dart'; import 'package:fooder/screens/main.dart'; +import 'package:fooder/screens/settings.dart'; TextStyle logoStyle(context) { return Theme.of(context).textTheme.labelLarge!.copyWith( @@ -30,6 +31,7 @@ abstract class BasedState extends State { } void backToLogin() { + Navigator.of(context).popUntil((route) => route.isFirst); Navigator.pushReplacement( context, MaterialPageRoute( @@ -39,6 +41,7 @@ abstract class BasedState extends State { } void backToDiary() { + Navigator.of(context).popUntil((route) => route.isFirst); Navigator.pushReplacement( context, MaterialPageRoute( @@ -47,6 +50,15 @@ abstract class BasedState extends State { ); } + void navigateToSettings() { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => SettingsScreen(ctx: ctx), + ), + ); + } + FAppBar appBar() { return FAppBar( actions: [ @@ -93,7 +105,7 @@ abstract class BasedState extends State { Icons.person, color: Theme.of(context).colorScheme.onSurfaceVariant, ), - onPressed: () {}, + onPressed: navigateToSettings, ), ], ), diff --git a/lib/storage.dart b/lib/storage.dart index 2c8ed38..973679d 100644 --- a/lib/storage.dart +++ b/lib/storage.dart @@ -4,14 +4,16 @@ import 'package:flutter/widgets.dart'; import 'package:path/path.dart'; import 'package:sqflite/sqflite.dart'; import 'package:fooder/storage/product.dart'; +import 'package:fooder/storage/diary.dart'; class Storage { Database db; ProductStorage product; + DiaryStorage diary; static const String path = "storage.db"; - Storage({required this.db, required this.product}); + Storage({required this.db, required this.product, required this.diary}); static Future create() async { WidgetsFlutterBinding.ensureInitialized(); @@ -20,12 +22,26 @@ class Storage { onCreate: createTables, version: 1, ); - return Storage(db: db, product: ProductStorage(db: db)); + return Storage( + db: db, product: ProductStorage(db: db), diary: DiaryStorage(db: db)); + } + + Future reset() async { + await db.close(); + await deleteDatabase(join(await getDatabasesPath(), path)); + db = await openDatabase( + join(await getDatabasesPath(), path), + onCreate: createTables, + version: 1, + ); + product = ProductStorage(db: db); + diary = DiaryStorage(db: db); } static Future createTables(Database db, int version) async { var batch = db.batch(); await ProductStorage.createTable(batch); + await DiaryStorage.createTable(batch); await batch.commit(noResult: true); } }