diff --git a/android/app/build.gradle b/android/app/build.gradle
index 4ad0d79..96da49e 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -23,9 +23,6 @@ if (keystorePropertiesFile.exists()) {
}
apply plugin: 'com.android.application'
-// START: FlutterFire Configuration
-apply plugin: 'com.google.gms.google-services'
-// END: FlutterFire Configuration
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 707806d..f15624b 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -31,4 +31,5 @@
android:name="flutterEmbedding"
android:value="2" />
+
diff --git a/android/build.gradle b/android/build.gradle
index 749aa70..713d7f6 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -7,9 +7,6 @@ buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:7.2.0'
- // START: FlutterFire Configuration
- classpath 'com.google.gms:google-services:4.3.10'
- // END: FlutterFire Configuration
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
diff --git a/lib/components/counter.dart b/lib/components/counter.dart
index 00b87fd..f3577a7 100644
--- a/lib/components/counter.dart
+++ b/lib/components/counter.dart
@@ -12,8 +12,8 @@ class CounterSubPage extends StatefulWidget {
required this.entries,
required this.habbit,
});
- final List? entries;
- final HabbitData? habbit;
+ final List? entries;
+ final Habbit? habbit;
@override
State createState() => _CounterSubPageState();
diff --git a/lib/components/deleteentrydialog.dart b/lib/components/deleteentrydialog.dart
index bbfeaf8..1fe6186 100644
--- a/lib/components/deleteentrydialog.dart
+++ b/lib/components/deleteentrydialog.dart
@@ -1,9 +1,8 @@
-import 'package:drift/drift.dart';
import 'package:flutter/material.dart';
import '../helpers/stats.dart';
import '../models/core.dart';
-import '../models/drift.dart';
+import '../models/database.dart';
class DeleteEntryDialog extends StatelessWidget {
const DeleteEntryDialog({
@@ -11,7 +10,7 @@ class DeleteEntryDialog extends StatelessWidget {
required this.entry,
});
- final HabbitEntryData entry;
+ final HabbitEntry entry;
@override
Widget build(BuildContext context) {
@@ -26,17 +25,13 @@ class DeleteEntryDialog extends StatelessWidget {
child: const Text("Cancel"),
),
TextButton(
- onPressed: () {
- (MyDatabase.instance.update(MyDatabase.instance.habbitEntry)
- ..where((tbl) => tbl.id.equals(entry.id)))
- .write(
- HabbitEntryCompanion(
- deletionTime: Value(
- DateTime.now(),
- ),
- ),
- );
- Navigator.of(context).pop(true);
+ onPressed: () async {
+ await MyDatabase.instance.writeAsync(() {
+ entry.deletionTime = DateTime.now();
+ });
+ if (context.mounted) {
+ Navigator.of(context).pop(true);
+ }
},
child: const Text("Yes"),
)
diff --git a/lib/components/deletehabbitdialog.dart b/lib/components/deletehabbitdialog.dart
index dbb0902..2dc8f62 100644
--- a/lib/components/deletehabbitdialog.dart
+++ b/lib/components/deletehabbitdialog.dart
@@ -1,8 +1,7 @@
-import 'package:drift/drift.dart';
import 'package:flutter/material.dart';
import '../models/core.dart';
-import '../models/drift.dart';
+import '../models/database.dart';
class DeleteHabbitDialog extends StatelessWidget {
const DeleteHabbitDialog({
@@ -10,7 +9,7 @@ class DeleteHabbitDialog extends StatelessWidget {
required this.habbit,
});
- final HabbitData habbit;
+ final Habbit habbit;
@override
Widget build(BuildContext context) {
@@ -25,26 +24,19 @@ class DeleteHabbitDialog extends StatelessWidget {
child: const Text("Cancel"),
),
TextButton(
- onPressed: () {
- (MyDatabase.instance.update(MyDatabase.instance.habbitEntry)
- ..where((tbl) => tbl.habbit.equals(habbit.id)))
- .write(
- HabbitEntryCompanion(
- deletionTime: Value(
- DateTime.now(),
- ),
- ),
- );
- (MyDatabase.instance.update(MyDatabase.instance.habbit)
- ..where((tbl) => tbl.id.equals(habbit.id)))
- .write(
- HabbitCompanion(
- deletionTime: Value(
- DateTime.now(),
- ),
- ),
- );
- Navigator.of(context).pop(true);
+ onPressed: () async {
+ final entries = MyDatabase.instance
+ .query(r'habbit.id == $0', [habbit.id]);
+
+ await MyDatabase.instance.writeAsync(() {
+ for (var element in entries) {
+ element.deletionTime = DateTime.now();
+ }
+ habbit.deletionTime = DateTime.now();
+ });
+ if (context.mounted) {
+ Navigator.of(context).pop(true);
+ }
},
child: const Text("Yes"),
)
diff --git a/lib/components/entryform.dart b/lib/components/entryform.dart
index f18ba5b..91e0d95 100644
--- a/lib/components/entryform.dart
+++ b/lib/components/entryform.dart
@@ -1,9 +1,9 @@
import 'package:date_field/date_field.dart';
-import 'package:drift/drift.dart' as drift;
import 'package:flutter/material.dart';
+import 'package:realm/realm.dart';
import '../models/core.dart';
-import '../models/drift.dart';
+import '../models/database.dart';
class EntryDialogForm extends StatefulWidget {
const EntryDialogForm({
@@ -15,17 +15,17 @@ class EntryDialogForm extends StatefulWidget {
final DateTime? creationTime;
final String? description;
- final String habbit;
+ final ObjectId? habbit;
@override
State createState() => _EntryDialogFormState();
static Future editEntry({
required BuildContext context,
- required String habbitId,
- required HabbitEntryData entry,
+ required ObjectId? habbitId,
+ required HabbitEntry entry,
}) async {
- final editedData = await showDialog(
+ final editedData = await showDialog(
context: context,
builder: (BuildContext context) {
return EntryDialogForm(
@@ -36,9 +36,10 @@ class EntryDialogForm extends StatefulWidget {
},
);
if (editedData != null) {
- (MyDatabase.instance.update(MyDatabase.instance.habbitEntry)
- ..where((tbl) => tbl.id.equals(entry.id)))
- .write(editedData);
+ editedData.id = entry.id;
+ await MyDatabase.instance.writeAsync(
+ () => MyDatabase.instance.add(editedData, update: true),
+ );
}
}
}
@@ -90,11 +91,12 @@ class _EntryDialogFormState extends State {
),
TextButton(
onPressed: () {
- Navigator.of(context).pop(
- HabbitEntryCompanion(
- creationTime: drift.Value(_selectedDate),
- description: drift.Value(_descriptionFieldController.text),
- habbit: drift.Value(widget.habbit),
+ Navigator.of(context).pop(
+ HabbitEntry(
+ ObjectId(),
+ _selectedDate,
+ description: _descriptionFieldController.text,
+ habbit: MyDatabase.instance.find(widget.habbit),
),
);
},
diff --git a/lib/components/habbitform.dart b/lib/components/habbitform.dart
index bf8afea..9ccfbd9 100644
--- a/lib/components/habbitform.dart
+++ b/lib/components/habbitform.dart
@@ -1,9 +1,9 @@
-import 'package:drift/drift.dart' as drift;
import 'package:flutter/material.dart';
+import 'package:realm/realm.dart';
import '../models/config.dart';
import '../models/core.dart';
-import '../models/drift.dart';
+import '../models/database.dart';
class HabbitDialogForm extends StatefulWidget {
const HabbitDialogForm({
@@ -24,27 +24,28 @@ class HabbitDialogForm extends StatefulWidget {
static Future editEntry({
required BuildContext context,
- required String habbitId,
- required HabbitData? habbit,
+ required Habbit? habbit,
}) async {
- if (habbit == null) {
+ final _habbit = habbit;
+ if (_habbit == null) {
throw StateError("habbit should not be null");
}
- final editedData = await showDialog(
+ final editedData = await showDialog(
context: context,
builder: (BuildContext context) {
return HabbitDialogForm(
- name: habbit.name,
- description: habbit.description,
- config: habbit.config,
- hidden: habbit.hidden,
+ name: _habbit.name,
+ description: _habbit.description,
+ config: _habbit.config,
+ hidden: _habbit.hidden,
);
},
);
if (editedData != null) {
- (MyDatabase.instance.update(MyDatabase.instance.habbit)
- ..where((tbl) => tbl.id.equals(habbitId)))
- .write(editedData);
+ editedData.id = _habbit.id;
+ MyDatabase.instance.writeAsync(() {
+ MyDatabase.instance.add(editedData, update: true);
+ });
}
}
}
@@ -123,12 +124,14 @@ class _HabbitDialogFormState extends State {
),
TextButton(
onPressed: () {
- Navigator.of(context).pop(
- HabbitCompanion(
- name: drift.Value(_nameFieldController.text),
- description: drift.Value(_descriptionFieldController.text),
- config: drift.Value(_habbitConfig.code),
- hidden: drift.Value(_hidden),
+ Navigator.of(context).pop(
+ Habbit(
+ ObjectId(),
+ _nameFieldController.text,
+ DateTime.now(),
+ description: _descriptionFieldController.text,
+ config: _habbitConfig.code,
+ hidden: _hidden,
),
);
},
diff --git a/lib/components/habbittile.dart b/lib/components/habbittile.dart
index 9c951b1..8d5e07c 100644
--- a/lib/components/habbittile.dart
+++ b/lib/components/habbittile.dart
@@ -1,8 +1,8 @@
import 'dart:async';
import 'package:animations/animations.dart';
-import 'package:drift/drift.dart';
import 'package:flutter/material.dart';
+import 'package:realm/realm.dart';
import '../components/deletehabbitdialog.dart';
import '../components/habbitform.dart';
@@ -10,7 +10,7 @@ import '../helpers/entry.dart';
import '../helpers/stats.dart';
import '../models/config.dart';
import '../models/core.dart';
-import '../models/drift.dart';
+import '../models/database.dart';
import '../models/theme.dart';
import '../pages/habbit.dart';
@@ -22,7 +22,7 @@ class HabbitTile extends StatefulWidget {
this.selected = false,
});
- final HabbitData habbit;
+ final Habbit habbit;
final GestureTapCallback? onTap;
final bool selected;
@@ -31,8 +31,8 @@ class HabbitTile extends StatefulWidget {
}
class _HabbitTileState extends State {
- List? _habbitEntries;
- StreamSubscription>? _subscription;
+ List? _habbitEntries;
+ StreamSubscription>? _subscription;
@override
void initState() {
@@ -47,21 +47,13 @@ class _HabbitTileState extends State {
}
void _addWatcher() {
- _subscription = (MyDatabase.instance.habbitEntry.select()
- ..where((tbl) => tbl.habbit.equals(widget.habbit.id))
- ..where((tbl) => tbl.deletionTime.isNull())
- ..orderBy(
- [
- (t) => OrderingTerm(
- expression: t.creationTime,
- mode: OrderingMode.desc,
- ),
- ],
- ))
- .watch()
- .listen((event) {
+ final query = MyDatabase.instance.query(
+ r'habbit.id == $0 AND deletionTime == nil SORT(creationTime DESC)',
+ [widget.habbit.id]);
+
+ _subscription = query.changes.listen((event) {
setState(() {
- _habbitEntries = event;
+ _habbitEntries = event.results.toList();
});
});
}
@@ -80,7 +72,6 @@ class _HabbitTileState extends State {
Future _editHabbit() async {
await HabbitDialogForm.editEntry(
context: context,
- habbitId: widget.habbit.id,
habbit: widget.habbit,
);
return false;
@@ -97,19 +88,9 @@ class _HabbitTileState extends State {
}
void _removeEntry() async {
- final lastEntry = await (MyDatabase.instance.habbitEntry.select()
- ..where((tbl) => tbl.habbit.equals(widget.habbit.id))
- ..where((tbl) => tbl.deletionTime.isNull())
- ..limit(1)
- ..orderBy(
- [
- (t) => OrderingTerm(
- expression: t.creationTime,
- mode: OrderingMode.desc,
- ),
- ],
- ))
- .getSingleOrNull();
+ final lastEntry = MyDatabase.instance.query(
+ r'habbit.id == $0 AND deletionTime == nil SORT(creationTime DESC) LIMIT(1)',
+ [widget.habbit.id]).firstOrNull;
if (lastEntry == null) {
if (context.mounted) {
ScaffoldMessenger.of(context).showSnackBar(
@@ -120,9 +101,9 @@ class _HabbitTileState extends State {
);
}
} else {
- await MyDatabase.instance.habbitEntry.deleteWhere(
- (tbl) => tbl.id.equals(lastEntry.id),
- );
+ await MyDatabase.instance.writeAsync(() {
+ MyDatabase.instance.delete(lastEntry);
+ });
if (context.mounted) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
@@ -181,7 +162,7 @@ class _HabbitTileState extends State {
@override
Widget build(BuildContext context) {
return Dismissible(
- key: Key(widget.habbit.id),
+ key: Key(widget.habbit.id.toString()),
confirmDismiss: (direction) {
if (direction == DismissDirection.startToEnd) {
return _confirmDelete();
@@ -205,7 +186,7 @@ class _HabbitTileState extends State {
class HabbitContainerTile extends StatelessWidget {
const HabbitContainerTile({super.key, required this.habbit});
- final HabbitData habbit;
+ final Habbit habbit;
@override
Widget build(BuildContext context) {
diff --git a/lib/components/listentries.dart b/lib/components/listentries.dart
index d243a82..2460baf 100644
--- a/lib/components/listentries.dart
+++ b/lib/components/listentries.dart
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
+import 'package:realm/realm.dart';
import '../components/deleteentrydialog.dart';
import '../helpers/stats.dart';
@@ -14,8 +15,8 @@ class ListEntriesSubPage extends StatefulWidget {
required this.entries,
});
- final String habbit;
- final List? entries;
+ final ObjectId habbit;
+ final List? entries;
@override
State createState() => _ListEntriesSubPageState();
@@ -60,8 +61,8 @@ class HabbitEntryTile extends StatelessWidget {
required this.habbit,
});
- final HabbitEntryData entry;
- final String habbit;
+ final HabbitEntry entry;
+ final ObjectId habbit;
Future _confirmDelete(BuildContext context) {
return showDialog(
@@ -85,7 +86,7 @@ class HabbitEntryTile extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Dismissible(
- key: Key(entry.id),
+ key: Key(entry.id.toString()),
background: deleteDismissible,
secondaryBackground: deleteDismissible,
confirmDismiss: (direction) => _confirmDelete(context),
diff --git a/lib/components/statistics.dart b/lib/components/statistics.dart
index 372f66d..ce04d95 100644
--- a/lib/components/statistics.dart
+++ b/lib/components/statistics.dart
@@ -16,8 +16,8 @@ class StatisticsSubPage extends StatefulWidget {
required this.habbit,
});
- final List? entries;
- final HabbitData? habbit;
+ final List? entries;
+ final Habbit? habbit;
@override
State createState() => _StatisticsSubPageState();
@@ -55,32 +55,59 @@ class _StatisticsSubPageState extends State {
}
}
- List getEntries() {
+ DateTime _startTimeOnDate(DateTime a) {
+ return a.copyWith(
+ year: a.year,
+ month: a.month,
+ day: a.day,
+ hour: 0,
+ minute: 0,
+ second: 0,
+ millisecond: 0);
+ }
+
+ List getEntries() {
if (widget.entries == null) {
return [];
}
- final now = DateTime.now();
+ final now = DateTime.now().toLocal();
final entries = widget.entries!;
switch (statsIntervals) {
case StatsIntervals.oneYear:
return entries
- .where(
- (element) => now.difference(element.creationTime).inDays <= 365)
+ .where((element) =>
+ now
+ .difference(
+ _startTimeOnDate(element.creationTime.toLocal()))
+ .inMinutes <=
+ 365 * 24 * 60)
.toList();
case StatsIntervals.threeMonths:
return entries
- .where(
- (element) => now.difference(element.creationTime).inDays <= 90)
+ .where((element) =>
+ now
+ .difference(
+ _startTimeOnDate(element.creationTime.toLocal()))
+ .inMinutes <=
+ 90 * 24 * 60)
.toList();
case StatsIntervals.oneMonth:
return entries
- .where(
- (element) => now.difference(element.creationTime).inDays <= 30)
+ .where((element) =>
+ now
+ .difference(
+ _startTimeOnDate(element.creationTime.toLocal()))
+ .inMinutes <=
+ 30 * 24 * 60)
.toList();
case StatsIntervals.oneWeek:
return entries
- .where(
- (element) => now.difference(element.creationTime).inDays <= 7)
+ .where((element) =>
+ now
+ .difference(
+ _startTimeOnDate(element.creationTime.toLocal()))
+ .inMinutes <=
+ 7 * 24 * 60)
.toList();
case StatsIntervals.all:
return entries;
diff --git a/lib/helpers/entry.dart b/lib/helpers/entry.dart
index 5012050..830cc0a 100644
--- a/lib/helpers/entry.dart
+++ b/lib/helpers/entry.dart
@@ -1,30 +1,33 @@
-import 'package:drift/drift.dart';
import 'package:flutter/material.dart';
+import 'package:realm/realm.dart';
import '../components/entryform.dart';
import '../models/core.dart';
-import '../models/drift.dart';
+import '../models/database.dart';
-void editEntry(HabbitEntryData entry, BuildContext context) async {
+void editEntry(HabbitEntry entry, BuildContext context) async {
await EntryDialogForm.editEntry(
context: context,
- habbitId: entry.habbit,
+ habbitId: entry.habbit?.id,
entry: entry,
);
}
Future recordEntry(
- HabbitData habbit,
+ Habbit habbit,
BuildContext context, {
Duration snackBarDuration = const Duration(milliseconds: 100),
}) async {
- final entry = HabbitEntryCompanion(
- creationTime: Value(DateTime.now()),
- habbit: Value(habbit.id),
+ final entry = HabbitEntry(
+ ObjectId(),
+ DateTime.now(),
+ habbit: habbit,
);
- final savedEntryId = await MyDatabase.instance
- .into(MyDatabase.instance.habbitEntry)
- .insert(entry);
+
+ final savedEntry = await MyDatabase.instance.writeAsync(() {
+ return MyDatabase.instance.add(entry);
+ });
+
if (context.mounted) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
@@ -33,12 +36,6 @@ Future recordEntry(
action: SnackBarAction(
label: "Edit",
onPressed: () async {
- final savedEntry = await (MyDatabase.instance.habbitEntry.select()
- ..where(
- (tbl) => tbl.rowId.equals(savedEntryId),
- )
- ..where((tbl) => tbl.deletionTime.isNull()))
- .getSingle();
if (context.mounted) {
editEntry(savedEntry, context);
}
diff --git a/lib/helpers/stats.dart b/lib/helpers/stats.dart
index 9c2a4c4..4ec6e97 100644
--- a/lib/helpers/stats.dart
+++ b/lib/helpers/stats.dart
@@ -1,4 +1,5 @@
import 'package:intl/intl.dart';
+
import '../models/core.dart';
class DurationData {
@@ -32,14 +33,14 @@ String durationToStreak(Duration? streak) {
return "${streak.inMinutes % 60}m";
}
-Duration? currentStreak(List? entries) {
+Duration? currentStreak(List? entries) {
if (entries != null && entries.isNotEmpty) {
return DateTime.now().difference(entries[0].creationTime);
}
return null;
}
-String currentStreakString(List? entries) {
+String currentStreakString(List? entries) {
var text = "No Data";
final streak = currentStreak(entries);
if (streak != null) {
@@ -51,7 +52,7 @@ String currentStreakString(List? entries) {
return text;
}
-int getTodayCount(List? entries) {
+int getTodayCount(List? entries) {
if (entries == null) {
return 0;
}
@@ -59,10 +60,11 @@ int getTodayCount(List? entries) {
final now = DateTime.now();
final today = DateTime(now.year, now.month, now.day);
final todayEntries = entries.where((element) {
+ final creationTime = element.creationTime.toLocal();
final aDate = DateTime(
- element.creationTime.year,
- element.creationTime.month,
- element.creationTime.day,
+ creationTime.year,
+ creationTime.month,
+ creationTime.day,
);
return aDate == today;
});
@@ -70,7 +72,7 @@ int getTodayCount(List? entries) {
}
Duration? longestStreak(
- List? entries, {
+ List? entries, {
bool includeCurrent = false,
}) {
if (entries != null &&
@@ -91,17 +93,18 @@ List getDaysInBetween(DateTime startDate, DateTime endDate) {
return days;
}
-List countPerDaysData(List? entries,
+List countPerDaysData(List? entries,
[bool includeEmptyDates = true]) {
final counts = {};
if (entries == null) {
return [];
}
for (var entry in entries) {
+ final creationTime = entry.creationTime.toLocal();
final date = DateTime(
- entry.creationTime.year,
- entry.creationTime.month,
- entry.creationTime.day,
+ creationTime.year,
+ creationTime.month,
+ creationTime.day,
);
if (!counts.containsKey(date)) {
counts[date] = 0;
@@ -110,8 +113,8 @@ List countPerDaysData(List? entries,
}
if (includeEmptyDates && entries.isNotEmpty) {
final daysInBetween = getDaysInBetween(
- entries.last.creationTime,
- entries.first.creationTime,
+ entries.last.creationTime.toLocal(),
+ entries.first.creationTime.toLocal(),
);
for (var day in daysInBetween) {
final date = DateTime(
@@ -133,7 +136,7 @@ List countPerDaysData(List? entries,
}
List allDurationsData(
- List? entries, {
+ List? entries, {
bool includeCurrent = false,
}) {
final List allDurations = [];
@@ -167,8 +170,9 @@ List allDurationsData(
value.duration.inSeconds - element.duration.inSeconds);
}
-String formatDate(DateTime date,
+String formatDate(DateTime originalDate,
[HabbitDateFormat format = HabbitDateFormat.long]) {
+ final date = originalDate.toLocal();
switch (format) {
case HabbitDateFormat.long:
return "${DateFormat.yMMMEd().format(date)} ${DateFormat.jm().format(date)}";
diff --git a/lib/helpers/sync.dart b/lib/helpers/sync.dart
index 745396e..7b8cb76 100644
--- a/lib/helpers/sync.dart
+++ b/lib/helpers/sync.dart
@@ -1,21 +1,21 @@
import 'dart:async';
import 'dart:convert';
-import 'package:drift/drift.dart';
-import 'package:firebase_auth/firebase_auth.dart';
+import 'package:firebase_auth/firebase_auth.dart' as auth;
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_storage/firebase_storage.dart';
+import 'package:realm/realm.dart';
import '../models/core.dart';
-import '../models/drift.dart';
+import '../models/database.dart';
import 'logger.dart';
Future extractDbJson() async {
- final entries =
- await MyDatabase.instance.select(MyDatabase.instance.habbitEntry).get();
- final habbits =
- await MyDatabase.instance.select(MyDatabase.instance.habbit).get();
- String encoded = jsonEncode({"habbits": habbits, "entries": entries});
+ final entries = MyDatabase.instance.all();
+ final habbits = MyDatabase.instance.all();
+
+ String encoded =
+ jsonEncode({"habbits": toEJson(habbits), "entries": toEJson(entries)});
AppLogger.instance.i("Extracted data from database");
return encoded;
}
@@ -24,22 +24,54 @@ Future jsonToDb(String jsonEncoded) async {
final decoded = jsonDecode(jsonEncoded);
List entries = decoded["entries"] as List;
List habbits = decoded["habbits"] as List;
- await MyDatabase.instance.batch((batch) {
- batch.insertAll(
- MyDatabase.instance.habbit,
- habbits.map(
- (e) => HabbitData.fromJson(e as Map),
- ),
- mode: InsertMode.insertOrIgnore,
- );
- batch.insertAll(
- MyDatabase.instance.habbitEntry,
- entries.map(
- (a) => HabbitEntryData.fromJson(a as Map),
- ),
- mode: InsertMode.insertOrIgnore,
- );
+ Map oldToNewIds = {};
+ for (var i = 0; i < habbits.length; i++) {
+ if (habbits[i]["id"] is String) {
+ final newObjectId = ObjectId();
+ oldToNewIds[habbits[i]["id"] as String] = newObjectId;
+ habbits[i]["id"] = newObjectId.toEJson();
+ }
+ if (habbits[i]["creationTime"] is int) {
+ habbits[i]["creationTime"] = toEJson(DateTime.fromMillisecondsSinceEpoch(
+ habbits[i]["creationTime"] as int));
+ }
+ if (habbits[i]["deletionTime"] is int) {
+ habbits[i]["deletionTime"] = toEJson(DateTime.fromMillisecondsSinceEpoch(
+ habbits[i]["deletionTime"] as int));
+ }
+ }
+ await MyDatabase.instance.writeAsync(() {
+ MyDatabase.instance.addAll(
+ habbits.map(
+ (e) => fromEJson(e),
+ ),
+ update: true);
});
+ for (var i = 0; i < entries.length; i++) {
+ if (entries[i]["id"] is String) {
+ entries[i]["id"] = new ObjectId().toEJson();
+ }
+ if (entries[i]["creationTime"] is int) {
+ entries[i]["creationTime"] = toEJson(DateTime.fromMillisecondsSinceEpoch(
+ entries[i]["creationTime"] as int));
+ }
+ if (entries[i]["deletionTime"] is int) {
+ entries[i]["deletionTime"] = toEJson(DateTime.fromMillisecondsSinceEpoch(
+ entries[i]["deletionTime"] as int));
+ }
+ if (entries[i]["habbit"] is String) {
+ entries[i]["habbit"] = toEJson(MyDatabase.instance
+ .find(oldToNewIds[entries[i]["habbit"] as String]));
+ }
+ }
+ await MyDatabase.instance.writeAsync(() {
+ MyDatabase.instance.addAll(
+ entries.map(
+ (e) => fromEJson(e),
+ ),
+ update: true);
+ });
+
AppLogger.instance.d("Loaded data into database");
}
@@ -56,12 +88,12 @@ bool isFirebaseInitialized() {
}
}
-Future getUser() async {
+Future getUser() async {
if (!isFirebaseInitialized()) {
AppLogger.instance.i("Firebase App not initialized");
return null;
}
- return FirebaseAuth.instance.currentUser;
+ return auth.FirebaseAuth.instance.currentUser;
}
Future uploadFile() async {
diff --git a/lib/models/config.dart b/lib/models/config.dart
index bba64b9..e4f21f9 100644
--- a/lib/models/config.dart
+++ b/lib/models/config.dart
@@ -28,7 +28,9 @@ class HabbitConfig {
quickAddButtonConfigType: QuickAddButtonConfigType.addSubtract,
quickSubtitleType: QuickSubtitleType.todayCount,
counterTitle: CounterTitle.todayCount,
- extraCounters: [],
+ extraCounters: [
+ ExtraCounter.currentStreak,
+ ],
statistics: [
HabbitStatistic.total,
HabbitStatistic.averageCounts,
@@ -117,7 +119,7 @@ enum ExtraCounter {
class HabbitStatistic {
String name;
- String Function(List entries) transform;
+ String Function(List entries) transform;
HabbitStatistic({
required this.name,
diff --git a/lib/models/core.dart b/lib/models/core.dart
index a595e9f..111db8b 100644
--- a/lib/models/core.dart
+++ b/lib/models/core.dart
@@ -1,42 +1,33 @@
-import 'package:drift/drift.dart';
-import 'package:uuid/uuid.dart';
-
// assuming that your file is called filename.dart. This will give an error at
// first, but it's needed for drift to know about the generated code
-part 'core.g.dart';
+import 'package:realm/realm.dart';
+
+part 'core.realm.dart';
// this will generate a table called "todos" for us. The rows of that table will
// be represented by a class called "Todo".
-const _uuid = Uuid();
-
-class Habbit extends Table {
- TextColumn get id => text().unique().clientDefault(() => _uuid.v4())();
- TextColumn get name => text()();
- TextColumn get description => text().nullable()();
- TextColumn get config => text().nullable()();
- IntColumn get order => integer().nullable()();
- DateTimeColumn get creationTime =>
- dateTime().withDefault(currentDateAndTime)();
- DateTimeColumn get deletionTime => dateTime().nullable()();
- BoolColumn get hidden => boolean().clientDefault(() => false)();
-}
+@RealmModel()
+class _Habbit {
+ @PrimaryKey()
+ late ObjectId id;
-class HabbitEntry extends Table {
- TextColumn get id => text().unique().clientDefault(() => _uuid.v4())();
- TextColumn get description => text().nullable()();
- DateTimeColumn get creationTime =>
- dateTime().withDefault(currentDateAndTime)();
- DateTimeColumn get deletionTime => dateTime().nullable()();
- TextColumn get habbit => text().references(Habbit, #id)();
+ late String name;
+ String? description;
+ String? config;
+ int? order;
+ late DateTime creationTime;
+ DateTime? deletionTime;
+ bool hidden = false;
}
-// this annotation tells drift to prepare a database class that uses both of the
-// tables we just defined. We'll see how to use that database class in a moment.
-@DriftDatabase(tables: [HabbitEntry])
-class SharedDatabase extends _$SharedDatabase {
- SharedDatabase(super.e);
+@RealmModel()
+class _HabbitEntry {
+ @PrimaryKey()
+ late ObjectId id;
- @override
- int get schemaVersion => 1;
+ String? description;
+ late DateTime creationTime;
+ DateTime? deletionTime;
+ late _Habbit? habbit;
}
diff --git a/lib/models/core.g.dart b/lib/models/core.g.dart
deleted file mode 100644
index 51f9ecc..0000000
--- a/lib/models/core.g.dart
+++ /dev/null
@@ -1,746 +0,0 @@
-// GENERATED CODE - DO NOT MODIFY BY HAND
-
-part of 'core.dart';
-
-// ignore_for_file: type=lint
-class $HabbitTable extends Habbit with TableInfo<$HabbitTable, HabbitData> {
- @override
- final GeneratedDatabase attachedDatabase;
- final String? _alias;
- $HabbitTable(this.attachedDatabase, [this._alias]);
- static const VerificationMeta _idMeta = const VerificationMeta('id');
- @override
- late final GeneratedColumn id = GeneratedColumn(
- 'id', aliasedName, false,
- type: DriftSqlType.string,
- requiredDuringInsert: false,
- defaultConstraints: GeneratedColumn.constraintIsAlways('UNIQUE'),
- clientDefault: () => _uuid.v4());
- static const VerificationMeta _nameMeta = const VerificationMeta('name');
- @override
- late final GeneratedColumn name = GeneratedColumn(
- 'name', aliasedName, false,
- type: DriftSqlType.string, requiredDuringInsert: true);
- static const VerificationMeta _descriptionMeta =
- const VerificationMeta('description');
- @override
- late final GeneratedColumn description = GeneratedColumn(
- 'description', aliasedName, true,
- type: DriftSqlType.string, requiredDuringInsert: false);
- static const VerificationMeta _configMeta = const VerificationMeta('config');
- @override
- late final GeneratedColumn config = GeneratedColumn(
- 'config', aliasedName, true,
- type: DriftSqlType.string, requiredDuringInsert: false);
- static const VerificationMeta _orderMeta = const VerificationMeta('order');
- @override
- late final GeneratedColumn order = GeneratedColumn(
- 'order', aliasedName, true,
- type: DriftSqlType.int, requiredDuringInsert: false);
- static const VerificationMeta _creationTimeMeta =
- const VerificationMeta('creationTime');
- @override
- late final GeneratedColumn creationTime = GeneratedColumn(
- 'creation_time', aliasedName, false,
- type: DriftSqlType.dateTime,
- requiredDuringInsert: false,
- defaultValue: currentDateAndTime);
- static const VerificationMeta _deletionTimeMeta =
- const VerificationMeta('deletionTime');
- @override
- late final GeneratedColumn deletionTime = GeneratedColumn(
- 'deletion_time', aliasedName, true,
- type: DriftSqlType.dateTime, requiredDuringInsert: false);
- static const VerificationMeta _hiddenMeta = const VerificationMeta('hidden');
- @override
- late final GeneratedColumn hidden =
- GeneratedColumn('hidden', aliasedName, false,
- type: DriftSqlType.bool,
- requiredDuringInsert: false,
- defaultConstraints: GeneratedColumn.constraintsDependsOnDialect({
- SqlDialect.sqlite: 'CHECK ("hidden" IN (0, 1))',
- SqlDialect.mariadb: '',
- SqlDialect.postgres: '',
- }),
- clientDefault: () => false);
- @override
- List get $columns => [
- id,
- name,
- description,
- config,
- order,
- creationTime,
- deletionTime,
- hidden
- ];
- @override
- String get aliasedName => _alias ?? 'habbit';
- @override
- String get actualTableName => 'habbit';
- @override
- VerificationContext validateIntegrity(Insertable instance,
- {bool isInserting = false}) {
- final context = VerificationContext();
- final data = instance.toColumns(true);
- if (data.containsKey('id')) {
- context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta));
- }
- if (data.containsKey('name')) {
- context.handle(
- _nameMeta, name.isAcceptableOrUnknown(data['name']!, _nameMeta));
- } else if (isInserting) {
- context.missing(_nameMeta);
- }
- if (data.containsKey('description')) {
- context.handle(
- _descriptionMeta,
- description.isAcceptableOrUnknown(
- data['description']!, _descriptionMeta));
- }
- if (data.containsKey('config')) {
- context.handle(_configMeta,
- config.isAcceptableOrUnknown(data['config']!, _configMeta));
- }
- if (data.containsKey('order')) {
- context.handle(
- _orderMeta, order.isAcceptableOrUnknown(data['order']!, _orderMeta));
- }
- if (data.containsKey('creation_time')) {
- context.handle(
- _creationTimeMeta,
- creationTime.isAcceptableOrUnknown(
- data['creation_time']!, _creationTimeMeta));
- }
- if (data.containsKey('deletion_time')) {
- context.handle(
- _deletionTimeMeta,
- deletionTime.isAcceptableOrUnknown(
- data['deletion_time']!, _deletionTimeMeta));
- }
- if (data.containsKey('hidden')) {
- context.handle(_hiddenMeta,
- hidden.isAcceptableOrUnknown(data['hidden']!, _hiddenMeta));
- }
- return context;
- }
-
- @override
- Set get $primaryKey => const {};
- @override
- HabbitData map(Map data, {String? tablePrefix}) {
- final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : '';
- return HabbitData(
- id: attachedDatabase.typeMapping
- .read(DriftSqlType.string, data['${effectivePrefix}id'])!,
- name: attachedDatabase.typeMapping
- .read(DriftSqlType.string, data['${effectivePrefix}name'])!,
- description: attachedDatabase.typeMapping
- .read(DriftSqlType.string, data['${effectivePrefix}description']),
- config: attachedDatabase.typeMapping
- .read(DriftSqlType.string, data['${effectivePrefix}config']),
- order: attachedDatabase.typeMapping
- .read(DriftSqlType.int, data['${effectivePrefix}order']),
- creationTime: attachedDatabase.typeMapping.read(
- DriftSqlType.dateTime, data['${effectivePrefix}creation_time'])!,
- deletionTime: attachedDatabase.typeMapping
- .read(DriftSqlType.dateTime, data['${effectivePrefix}deletion_time']),
- hidden: attachedDatabase.typeMapping
- .read(DriftSqlType.bool, data['${effectivePrefix}hidden'])!,
- );
- }
-
- @override
- $HabbitTable createAlias(String alias) {
- return $HabbitTable(attachedDatabase, alias);
- }
-}
-
-class HabbitData extends DataClass implements Insertable {
- final String id;
- final String name;
- final String? description;
- final String? config;
- final int? order;
- final DateTime creationTime;
- final DateTime? deletionTime;
- final bool hidden;
- const HabbitData(
- {required this.id,
- required this.name,
- this.description,
- this.config,
- this.order,
- required this.creationTime,
- this.deletionTime,
- required this.hidden});
- @override
- Map toColumns(bool nullToAbsent) {
- final map = {};
- map['id'] = Variable(id);
- map['name'] = Variable(name);
- if (!nullToAbsent || description != null) {
- map['description'] = Variable(description);
- }
- if (!nullToAbsent || config != null) {
- map['config'] = Variable(config);
- }
- if (!nullToAbsent || order != null) {
- map['order'] = Variable(order);
- }
- map['creation_time'] = Variable(creationTime);
- if (!nullToAbsent || deletionTime != null) {
- map['deletion_time'] = Variable(deletionTime);
- }
- map['hidden'] = Variable(hidden);
- return map;
- }
-
- HabbitCompanion toCompanion(bool nullToAbsent) {
- return HabbitCompanion(
- id: Value(id),
- name: Value(name),
- description: description == null && nullToAbsent
- ? const Value.absent()
- : Value(description),
- config:
- config == null && nullToAbsent ? const Value.absent() : Value(config),
- order:
- order == null && nullToAbsent ? const Value.absent() : Value(order),
- creationTime: Value(creationTime),
- deletionTime: deletionTime == null && nullToAbsent
- ? const Value.absent()
- : Value(deletionTime),
- hidden: Value(hidden),
- );
- }
-
- factory HabbitData.fromJson(Map json,
- {ValueSerializer? serializer}) {
- serializer ??= driftRuntimeOptions.defaultSerializer;
- return HabbitData(
- id: serializer.fromJson(json['id']),
- name: serializer.fromJson(json['name']),
- description: serializer.fromJson(json['description']),
- config: serializer.fromJson(json['config']),
- order: serializer.fromJson(json['order']),
- creationTime: serializer.fromJson(json['creationTime']),
- deletionTime: serializer.fromJson(json['deletionTime']),
- hidden: serializer.fromJson(json['hidden']),
- );
- }
- @override
- Map toJson({ValueSerializer? serializer}) {
- serializer ??= driftRuntimeOptions.defaultSerializer;
- return {
- 'id': serializer.toJson(id),
- 'name': serializer.toJson(name),
- 'description': serializer.toJson(description),
- 'config': serializer.toJson(config),
- 'order': serializer.toJson(order),
- 'creationTime': serializer.toJson(creationTime),
- 'deletionTime': serializer.toJson(deletionTime),
- 'hidden': serializer.toJson(hidden),
- };
- }
-
- HabbitData copyWith(
- {String? id,
- String? name,
- Value description = const Value.absent(),
- Value config = const Value.absent(),
- Value order = const Value.absent(),
- DateTime? creationTime,
- Value deletionTime = const Value.absent(),
- bool? hidden}) =>
- HabbitData(
- id: id ?? this.id,
- name: name ?? this.name,
- description: description.present ? description.value : this.description,
- config: config.present ? config.value : this.config,
- order: order.present ? order.value : this.order,
- creationTime: creationTime ?? this.creationTime,
- deletionTime:
- deletionTime.present ? deletionTime.value : this.deletionTime,
- hidden: hidden ?? this.hidden,
- );
- @override
- String toString() {
- return (StringBuffer('HabbitData(')
- ..write('id: $id, ')
- ..write('name: $name, ')
- ..write('description: $description, ')
- ..write('config: $config, ')
- ..write('order: $order, ')
- ..write('creationTime: $creationTime, ')
- ..write('deletionTime: $deletionTime, ')
- ..write('hidden: $hidden')
- ..write(')'))
- .toString();
- }
-
- @override
- int get hashCode => Object.hash(
- id, name, description, config, order, creationTime, deletionTime, hidden);
- @override
- bool operator ==(Object other) =>
- identical(this, other) ||
- (other is HabbitData &&
- other.id == this.id &&
- other.name == this.name &&
- other.description == this.description &&
- other.config == this.config &&
- other.order == this.order &&
- other.creationTime == this.creationTime &&
- other.deletionTime == this.deletionTime &&
- other.hidden == this.hidden);
-}
-
-class HabbitCompanion extends UpdateCompanion {
- final Value id;
- final Value name;
- final Value description;
- final Value config;
- final Value order;
- final Value creationTime;
- final Value deletionTime;
- final Value hidden;
- final Value rowid;
- const HabbitCompanion({
- this.id = const Value.absent(),
- this.name = const Value.absent(),
- this.description = const Value.absent(),
- this.config = const Value.absent(),
- this.order = const Value.absent(),
- this.creationTime = const Value.absent(),
- this.deletionTime = const Value.absent(),
- this.hidden = const Value.absent(),
- this.rowid = const Value.absent(),
- });
- HabbitCompanion.insert({
- this.id = const Value.absent(),
- required String name,
- this.description = const Value.absent(),
- this.config = const Value.absent(),
- this.order = const Value.absent(),
- this.creationTime = const Value.absent(),
- this.deletionTime = const Value.absent(),
- this.hidden = const Value.absent(),
- this.rowid = const Value.absent(),
- }) : name = Value(name);
- static Insertable custom({
- Expression? id,
- Expression? name,
- Expression? description,
- Expression? config,
- Expression? order,
- Expression? creationTime,
- Expression? deletionTime,
- Expression? hidden,
- Expression? rowid,
- }) {
- return RawValuesInsertable({
- if (id != null) 'id': id,
- if (name != null) 'name': name,
- if (description != null) 'description': description,
- if (config != null) 'config': config,
- if (order != null) 'order': order,
- if (creationTime != null) 'creation_time': creationTime,
- if (deletionTime != null) 'deletion_time': deletionTime,
- if (hidden != null) 'hidden': hidden,
- if (rowid != null) 'rowid': rowid,
- });
- }
-
- HabbitCompanion copyWith(
- {Value? id,
- Value? name,
- Value? description,
- Value? config,
- Value? order,
- Value? creationTime,
- Value? deletionTime,
- Value? hidden,
- Value? rowid}) {
- return HabbitCompanion(
- id: id ?? this.id,
- name: name ?? this.name,
- description: description ?? this.description,
- config: config ?? this.config,
- order: order ?? this.order,
- creationTime: creationTime ?? this.creationTime,
- deletionTime: deletionTime ?? this.deletionTime,
- hidden: hidden ?? this.hidden,
- rowid: rowid ?? this.rowid,
- );
- }
-
- @override
- Map toColumns(bool nullToAbsent) {
- final map = {};
- if (id.present) {
- map['id'] = Variable(id.value);
- }
- if (name.present) {
- map['name'] = Variable(name.value);
- }
- if (description.present) {
- map['description'] = Variable(description.value);
- }
- if (config.present) {
- map['config'] = Variable(config.value);
- }
- if (order.present) {
- map['order'] = Variable(order.value);
- }
- if (creationTime.present) {
- map['creation_time'] = Variable(creationTime.value);
- }
- if (deletionTime.present) {
- map['deletion_time'] = Variable(deletionTime.value);
- }
- if (hidden.present) {
- map['hidden'] = Variable(hidden.value);
- }
- if (rowid.present) {
- map['rowid'] = Variable(rowid.value);
- }
- return map;
- }
-
- @override
- String toString() {
- return (StringBuffer('HabbitCompanion(')
- ..write('id: $id, ')
- ..write('name: $name, ')
- ..write('description: $description, ')
- ..write('config: $config, ')
- ..write('order: $order, ')
- ..write('creationTime: $creationTime, ')
- ..write('deletionTime: $deletionTime, ')
- ..write('hidden: $hidden, ')
- ..write('rowid: $rowid')
- ..write(')'))
- .toString();
- }
-}
-
-class $HabbitEntryTable extends HabbitEntry
- with TableInfo<$HabbitEntryTable, HabbitEntryData> {
- @override
- final GeneratedDatabase attachedDatabase;
- final String? _alias;
- $HabbitEntryTable(this.attachedDatabase, [this._alias]);
- static const VerificationMeta _idMeta = const VerificationMeta('id');
- @override
- late final GeneratedColumn id = GeneratedColumn(
- 'id', aliasedName, false,
- type: DriftSqlType.string,
- requiredDuringInsert: false,
- defaultConstraints: GeneratedColumn.constraintIsAlways('UNIQUE'),
- clientDefault: () => _uuid.v4());
- static const VerificationMeta _descriptionMeta =
- const VerificationMeta('description');
- @override
- late final GeneratedColumn description = GeneratedColumn(
- 'description', aliasedName, true,
- type: DriftSqlType.string, requiredDuringInsert: false);
- static const VerificationMeta _creationTimeMeta =
- const VerificationMeta('creationTime');
- @override
- late final GeneratedColumn creationTime = GeneratedColumn(
- 'creation_time', aliasedName, false,
- type: DriftSqlType.dateTime,
- requiredDuringInsert: false,
- defaultValue: currentDateAndTime);
- static const VerificationMeta _deletionTimeMeta =
- const VerificationMeta('deletionTime');
- @override
- late final GeneratedColumn deletionTime = GeneratedColumn(
- 'deletion_time', aliasedName, true,
- type: DriftSqlType.dateTime, requiredDuringInsert: false);
- static const VerificationMeta _habbitMeta = const VerificationMeta('habbit');
- @override
- late final GeneratedColumn habbit = GeneratedColumn(
- 'habbit', aliasedName, false,
- type: DriftSqlType.string,
- requiredDuringInsert: true,
- defaultConstraints:
- GeneratedColumn.constraintIsAlways('REFERENCES habbit (id)'));
- @override
- List get $columns =>
- [id, description, creationTime, deletionTime, habbit];
- @override
- String get aliasedName => _alias ?? 'habbit_entry';
- @override
- String get actualTableName => 'habbit_entry';
- @override
- VerificationContext validateIntegrity(Insertable instance,
- {bool isInserting = false}) {
- final context = VerificationContext();
- final data = instance.toColumns(true);
- if (data.containsKey('id')) {
- context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta));
- }
- if (data.containsKey('description')) {
- context.handle(
- _descriptionMeta,
- description.isAcceptableOrUnknown(
- data['description']!, _descriptionMeta));
- }
- if (data.containsKey('creation_time')) {
- context.handle(
- _creationTimeMeta,
- creationTime.isAcceptableOrUnknown(
- data['creation_time']!, _creationTimeMeta));
- }
- if (data.containsKey('deletion_time')) {
- context.handle(
- _deletionTimeMeta,
- deletionTime.isAcceptableOrUnknown(
- data['deletion_time']!, _deletionTimeMeta));
- }
- if (data.containsKey('habbit')) {
- context.handle(_habbitMeta,
- habbit.isAcceptableOrUnknown(data['habbit']!, _habbitMeta));
- } else if (isInserting) {
- context.missing(_habbitMeta);
- }
- return context;
- }
-
- @override
- Set get $primaryKey => const {};
- @override
- HabbitEntryData map(Map data, {String? tablePrefix}) {
- final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : '';
- return HabbitEntryData(
- id: attachedDatabase.typeMapping
- .read(DriftSqlType.string, data['${effectivePrefix}id'])!,
- description: attachedDatabase.typeMapping
- .read(DriftSqlType.string, data['${effectivePrefix}description']),
- creationTime: attachedDatabase.typeMapping.read(
- DriftSqlType.dateTime, data['${effectivePrefix}creation_time'])!,
- deletionTime: attachedDatabase.typeMapping
- .read(DriftSqlType.dateTime, data['${effectivePrefix}deletion_time']),
- habbit: attachedDatabase.typeMapping
- .read(DriftSqlType.string, data['${effectivePrefix}habbit'])!,
- );
- }
-
- @override
- $HabbitEntryTable createAlias(String alias) {
- return $HabbitEntryTable(attachedDatabase, alias);
- }
-}
-
-class HabbitEntryData extends DataClass implements Insertable {
- final String id;
- final String? description;
- final DateTime creationTime;
- final DateTime? deletionTime;
- final String habbit;
- const HabbitEntryData(
- {required this.id,
- this.description,
- required this.creationTime,
- this.deletionTime,
- required this.habbit});
- @override
- Map toColumns(bool nullToAbsent) {
- final map = {};
- map['id'] = Variable(id);
- if (!nullToAbsent || description != null) {
- map['description'] = Variable(description);
- }
- map['creation_time'] = Variable(creationTime);
- if (!nullToAbsent || deletionTime != null) {
- map['deletion_time'] = Variable(deletionTime);
- }
- map['habbit'] = Variable(habbit);
- return map;
- }
-
- HabbitEntryCompanion toCompanion(bool nullToAbsent) {
- return HabbitEntryCompanion(
- id: Value(id),
- description: description == null && nullToAbsent
- ? const Value.absent()
- : Value(description),
- creationTime: Value(creationTime),
- deletionTime: deletionTime == null && nullToAbsent
- ? const Value.absent()
- : Value(deletionTime),
- habbit: Value(habbit),
- );
- }
-
- factory HabbitEntryData.fromJson(Map json,
- {ValueSerializer? serializer}) {
- serializer ??= driftRuntimeOptions.defaultSerializer;
- return HabbitEntryData(
- id: serializer.fromJson(json['id']),
- description: serializer.fromJson(json['description']),
- creationTime: serializer.fromJson(json['creationTime']),
- deletionTime: serializer.fromJson(json['deletionTime']),
- habbit: serializer.fromJson(json['habbit']),
- );
- }
- @override
- Map toJson({ValueSerializer? serializer}) {
- serializer ??= driftRuntimeOptions.defaultSerializer;
- return {
- 'id': serializer.toJson(id),
- 'description': serializer.toJson(description),
- 'creationTime': serializer.toJson(creationTime),
- 'deletionTime': serializer.toJson(deletionTime),
- 'habbit': serializer.toJson(habbit),
- };
- }
-
- HabbitEntryData copyWith(
- {String? id,
- Value description = const Value.absent(),
- DateTime? creationTime,
- Value deletionTime = const Value.absent(),
- String? habbit}) =>
- HabbitEntryData(
- id: id ?? this.id,
- description: description.present ? description.value : this.description,
- creationTime: creationTime ?? this.creationTime,
- deletionTime:
- deletionTime.present ? deletionTime.value : this.deletionTime,
- habbit: habbit ?? this.habbit,
- );
- @override
- String toString() {
- return (StringBuffer('HabbitEntryData(')
- ..write('id: $id, ')
- ..write('description: $description, ')
- ..write('creationTime: $creationTime, ')
- ..write('deletionTime: $deletionTime, ')
- ..write('habbit: $habbit')
- ..write(')'))
- .toString();
- }
-
- @override
- int get hashCode =>
- Object.hash(id, description, creationTime, deletionTime, habbit);
- @override
- bool operator ==(Object other) =>
- identical(this, other) ||
- (other is HabbitEntryData &&
- other.id == this.id &&
- other.description == this.description &&
- other.creationTime == this.creationTime &&
- other.deletionTime == this.deletionTime &&
- other.habbit == this.habbit);
-}
-
-class HabbitEntryCompanion extends UpdateCompanion {
- final Value id;
- final Value description;
- final Value creationTime;
- final Value deletionTime;
- final Value habbit;
- final Value rowid;
- const HabbitEntryCompanion({
- this.id = const Value.absent(),
- this.description = const Value.absent(),
- this.creationTime = const Value.absent(),
- this.deletionTime = const Value.absent(),
- this.habbit = const Value.absent(),
- this.rowid = const Value.absent(),
- });
- HabbitEntryCompanion.insert({
- this.id = const Value.absent(),
- this.description = const Value.absent(),
- this.creationTime = const Value.absent(),
- this.deletionTime = const Value.absent(),
- required String habbit,
- this.rowid = const Value.absent(),
- }) : habbit = Value(habbit);
- static Insertable custom({
- Expression? id,
- Expression? description,
- Expression? creationTime,
- Expression? deletionTime,
- Expression? habbit,
- Expression? rowid,
- }) {
- return RawValuesInsertable({
- if (id != null) 'id': id,
- if (description != null) 'description': description,
- if (creationTime != null) 'creation_time': creationTime,
- if (deletionTime != null) 'deletion_time': deletionTime,
- if (habbit != null) 'habbit': habbit,
- if (rowid != null) 'rowid': rowid,
- });
- }
-
- HabbitEntryCompanion copyWith(
- {Value? id,
- Value? description,
- Value? creationTime,
- Value? deletionTime,
- Value? habbit,
- Value? rowid}) {
- return HabbitEntryCompanion(
- id: id ?? this.id,
- description: description ?? this.description,
- creationTime: creationTime ?? this.creationTime,
- deletionTime: deletionTime ?? this.deletionTime,
- habbit: habbit ?? this.habbit,
- rowid: rowid ?? this.rowid,
- );
- }
-
- @override
- Map toColumns(bool nullToAbsent) {
- final map = {};
- if (id.present) {
- map['id'] = Variable(id.value);
- }
- if (description.present) {
- map['description'] = Variable(description.value);
- }
- if (creationTime.present) {
- map['creation_time'] = Variable(creationTime.value);
- }
- if (deletionTime.present) {
- map['deletion_time'] = Variable(deletionTime.value);
- }
- if (habbit.present) {
- map['habbit'] = Variable(habbit.value);
- }
- if (rowid.present) {
- map['rowid'] = Variable