diff --git a/lib/interface/db_record.dart b/lib/interface/db_record.dart index f5c56c8..df9c329 100644 --- a/lib/interface/db_record.dart +++ b/lib/interface/db_record.dart @@ -1,3 +1,5 @@ abstract class DatabaseRecord { String toCSV(); + Map toMap(); + DatabaseRecord.fromMap(Map map); } diff --git a/lib/main.dart b/lib/main.dart index 6e5d7a5..bb80057 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,7 +1,10 @@ import 'package:flutter/material.dart'; import 'package:smoke_cess_app/pages/main_page.dart'; -void main() => runApp(const MyApp()); +void main() async { + WidgetsFlutterBinding.ensureInitialized(); + runApp(const MyApp()); +} class MyApp extends StatelessWidget { const MyApp({super.key}); @@ -10,6 +13,6 @@ class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { - return MaterialApp(title: _title, home: MyHomePage()); + return const MaterialApp(title: _title, home: MyHomePage()); } } diff --git a/lib/models/hiit_workout.dart b/lib/models/hiit_workout.dart index 9aa69eb..48e599c 100644 --- a/lib/models/hiit_workout.dart +++ b/lib/models/hiit_workout.dart @@ -1,15 +1,33 @@ import 'package:smoke_cess_app/interface/db_record.dart'; class HIITWorkout implements DatabaseRecord { - final Duration _workoutDuration; - final String _commentBefore; - final String _commentAfter; - final DateTime _workoutDate; + Duration _workoutDuration; + String _commentBefore; + String _commentAfter; + DateTime _workoutDate; HIITWorkout(this._workoutDuration, this._commentBefore, this._commentAfter, this._workoutDate); + /* @override + HIITWorkout.fromMap(Map map) { + _workoutDuration = map['_workoutDuration']; + _commentBefore = map['_commentBefore']; + _commentAfter = map['_commentAfter']; + _workoutDate = map['_workoutDate']; + } */ + @override String toCSV() => "${_workoutDate.toIso8601String()}, $_workoutDuration, $_commentBefore, $_commentAfter"; + + @override + Map toMap() { + return { + 'workoutDuration': _workoutDuration, + 'commentBefore': _commentBefore, + 'commentAfter': _commentAfter, + 'workoutDate': _workoutDate, + }; + } } diff --git a/lib/models/mood.dart b/lib/models/mood.dart index d17061a..4914791 100644 --- a/lib/models/mood.dart +++ b/lib/models/mood.dart @@ -11,4 +11,13 @@ class Mood implements DatabaseRecord { String toCSV() { return "${_date.toIso8601String()}, ${_moodValue.round().toString()}, $_comment"; } + + @override + Map toMap() { + return { + 'moodValue': _moodValue, + 'comment': _comment, + 'date': _date, + }; + } } diff --git a/lib/models/sleep.dart b/lib/models/sleep.dart index f94be2e..05459fd 100644 --- a/lib/models/sleep.dart +++ b/lib/models/sleep.dart @@ -15,4 +15,15 @@ class Sleep implements DatabaseRecord { String toCSV() { return "${_date.toIso8601String()}, ${_sleepQualityValue.round().toString()}, $_sleepedAt, $_wokeUpAt, $_comment"; } + + @override + Map toMap() { + return { + 'sleepQualityValue': _sleepQualityValue, + 'comment': _comment, + 'date': _date, + 'sleepedAt': _sleepedAt, + 'wokeUpAt': _wokeUpAt, + }; + } } diff --git a/lib/service/database_service.dart b/lib/service/database_service.dart new file mode 100644 index 0000000..9fe8dba --- /dev/null +++ b/lib/service/database_service.dart @@ -0,0 +1,51 @@ +import 'dart:async'; + +import 'package:path/path.dart'; +import 'package:smoke_cess_app/models/mood.dart'; +import 'package:sqflite/sqflite.dart'; +// ignore: depend_on_referenced_packages +import 'package:path_provider/path_provider.dart'; +import 'dart:io'; + +class DatabaseService { + DatabaseService._privateConstructor(); + static final DatabaseService instance = DatabaseService._privateConstructor(); + + static Database? _database; + Future get database async => _database ??= await _initDatabase(); + + Future _initDatabase() async { + Directory documentsDirectory = await getApplicationDocumentsDirectory(); + String path = join(documentsDirectory.path, 'database.db'); + return await openDatabase( + path, + version: 1, + onCreate: _onCreate, + ); + } + + Future _onCreate(Database db, int version) async { + await db.execute(''' + CREATE TABLE mood( + id INTEGER PRIMARY KEY, + value INTEGER, + date TEXT, + comment TEXT + ) + '''); + } + + Future> getMoodRecords() async { + Database db = await instance.database; + var moodRecords = await db.query('mood'); + List moodList = moodRecords.isNotEmpty + ? moodRecords.map((e) => Mood(1, 'comment', DateTime.now())).toList() + : []; + return moodList; + } + + Future addMood(Mood mood) async { + Database db = await instance.database; + return await db.insert('mood', mood.toMap()); + } +} diff --git a/lib/widgets/mood_form.dart b/lib/widgets/mood_form.dart index a5c059f..ca9858e 100644 --- a/lib/widgets/mood_form.dart +++ b/lib/widgets/mood_form.dart @@ -1,4 +1,6 @@ import 'package:flutter/material.dart'; +import 'package:smoke_cess_app/models/mood.dart'; +import 'package:smoke_cess_app/service/database_service.dart'; import 'package:smoke_cess_app/widgets/slider.dart'; import 'package:smoke_cess_app/widgets/submit_form_button.dart'; import 'package:smoke_cess_app/widgets/text_formfield.dart'; @@ -20,9 +22,9 @@ class _MoodFormState extends State { void submitForm() { if (_moodFormKey.currentState!.validate()) { _moodFormKey.currentState?.save(); //call every onSave Method - //TODO Businesslogik aufrufen! - print(_textInput); - print(slider.getSliderValue()); + Mood mood = Mood(slider.getSliderValue(), _textInput, DateTime.now()); + print(mood.toCSV()); + DatabaseService.instance.addMood(mood); _moodFormKey.currentState?.reset(); } } diff --git a/pubspec.lock b/pubspec.lock index e039943..e044c9f 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -199,14 +199,14 @@ packages: source: hosted version: "3.0.0" path: - dependency: transitive + dependency: "direct main" description: name: path url: "https://pub.dartlang.org" source: hosted version: "1.8.2" path_provider: - dependency: transitive + dependency: "direct main" description: name: path_provider url: "https://pub.dartlang.org" @@ -329,6 +329,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.9.0" + sqflite: + dependency: "direct main" + description: + name: sqflite + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.4+1" + sqflite_common: + dependency: transitive + description: + name: sqflite_common + url: "https://pub.dartlang.org" + source: hosted + version: "2.4.2+2" stack_trace: dependency: transitive description: @@ -350,6 +364,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.1" + synchronized: + dependency: transitive + description: + name: synchronized + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" term_glyph: dependency: transitive description: @@ -401,4 +422,4 @@ packages: version: "1.0.0" sdks: dart: ">=2.18.2 <3.0.0" - flutter: ">=3.0.0" + flutter: ">=3.3.0" diff --git a/pubspec.yaml b/pubspec.yaml index 58445b3..f30d59d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: A new Flutter project. # The following line prevents the package from being accidentally published to # pub.dev using `flutter pub publish`. This is preferred for private packages. -publish_to: "none" # Remove this line if you wish to publish to pub.dev +publish_to: 'none' # Remove this line if you wish to publish to pub.dev # The following defines the version and build number for your application. # A version number is three numbers separated by dots, like 1.2.43 @@ -20,7 +20,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ">=2.18.2 <3.0.0" + sdk: '>=2.18.2 <3.0.0' # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions @@ -31,6 +31,9 @@ environment: dependencies: flutter: sdk: flutter + sqflite: + path: + path_provider: ^2.0.12 # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons.