refactored the database part a bunch, now have two tables, session and answer
This commit is contained in:
parent
9fb029da20
commit
15e4513b0f
7 changed files with 40 additions and 35 deletions
|
@ -6,10 +6,10 @@ import 'package:ohthatsa/util/Months.dart';
|
|||
class PracticeAnswer {
|
||||
final int question;
|
||||
final int answer;
|
||||
final PracticeType practiceType;
|
||||
DateTime dateTime;
|
||||
int sessionId = -1;
|
||||
|
||||
PracticeAnswer(this.question, this.answer, this.practiceType){
|
||||
PracticeAnswer(this.question, this.answer){
|
||||
dateTime = DateTime.now();
|
||||
}
|
||||
|
||||
|
@ -19,8 +19,8 @@ class PracticeAnswer {
|
|||
return <String, dynamic>{
|
||||
"question": question,
|
||||
"answer": answer,
|
||||
"type": practiceType.toString().split(".").last,
|
||||
"time": timeFormat
|
||||
"time": timeFormat,
|
||||
"sessionId": sessionId
|
||||
};
|
||||
}
|
||||
}
|
|
@ -4,47 +4,50 @@ import 'package:sqflite/sqflite.dart';
|
|||
import 'package:path/path.dart';
|
||||
|
||||
class PracticeDatabase {
|
||||
Database _database;
|
||||
|
||||
static PracticeDatabase getDatabase() {
|
||||
PracticeDatabase practiceDatabase = PracticeDatabase();
|
||||
practiceDatabase.open();
|
||||
return practiceDatabase;
|
||||
}
|
||||
|
||||
_onCreate(Database database, int version) async {
|
||||
static _onCreate(Database database, int version) async {
|
||||
String types = PracticeType.values.map((type) => "'${type.toString().split(".").last}'").join(", ");
|
||||
await database.execute('''
|
||||
CREATE TABLE PracticeSession (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
type TEXT CHECK( type IN ($types) ) NOT NULL
|
||||
);
|
||||
''');
|
||||
await database.execute('''
|
||||
CREATE TABLE PracticeAnswer (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
sessionId INTEGER NOT NULL,
|
||||
question INTEGER NOT NULL,
|
||||
answer INTEGER NOT NULL,
|
||||
type TEXT CHECK( type IN ($types) ) NOT NULL,
|
||||
time DATETIME NOT NULL
|
||||
time DATETIME NOT NULL,
|
||||
|
||||
FOREIGN KEY(sessionId) REFERENCES PracticeSession(id)
|
||||
);
|
||||
''');
|
||||
}
|
||||
|
||||
Future open() async{
|
||||
static Future<Database> getDatabase() async {
|
||||
var databasesPath = await getDatabasesPath();
|
||||
final databaseName = "answers.db";
|
||||
var path = join(databasesPath, databaseName);
|
||||
this._database = await openDatabase(
|
||||
path,
|
||||
version: 1,
|
||||
onCreate: _onCreate
|
||||
|
||||
return await openDatabase(
|
||||
join(databasesPath, databaseName),
|
||||
version: 1,
|
||||
onCreate: _onCreate
|
||||
);
|
||||
}
|
||||
|
||||
Future insertAnswer(PracticeAnswer answer) async {
|
||||
this._database.insert("PracticeAnswer", answer.toMap());
|
||||
}
|
||||
|
||||
static insertAnswers(List<PracticeAnswer> answers) async {
|
||||
var practiceDatabase = PracticeDatabase();
|
||||
await practiceDatabase.open();
|
||||
static insertAnswers(List<PracticeAnswer> answers, PracticeType practiceType) async {
|
||||
var db = await getDatabase();
|
||||
int sessionId = await db.insert("PracticeSession",
|
||||
<String, dynamic>{
|
||||
"type": practiceType.toString().split(".").last
|
||||
}
|
||||
);
|
||||
var batch = db.batch();
|
||||
answers.forEach((answer) {
|
||||
practiceDatabase.insertAnswer(answer);
|
||||
answer.sessionId = sessionId;
|
||||
batch.insert("PracticeAnswer", answer.toMap());
|
||||
});
|
||||
await batch.commit();
|
||||
}
|
||||
}
|
|
@ -25,6 +25,7 @@ class PracticePage extends StatefulWidget {
|
|||
class _PracticeState extends State<PracticePage> {
|
||||
int _startCount = 0;
|
||||
bool _showCorrect = true;
|
||||
PracticeType practiceType;
|
||||
PracticeThing practiceThing;
|
||||
|
||||
int _count = 0;
|
||||
|
@ -34,7 +35,8 @@ class _PracticeState extends State<PracticePage> {
|
|||
_PracticeState(PracticeSetup practiceSetup){
|
||||
this._startCount = practiceSetup.count;
|
||||
this._showCorrect = practiceSetup.showCorrect;
|
||||
switch(practiceSetup.practiceType){
|
||||
practiceType = practiceSetup.practiceType;
|
||||
switch(practiceType){
|
||||
case (PracticeType.month): {
|
||||
this.practiceThing = PracticeThingMonth();
|
||||
break;
|
||||
|
@ -213,7 +215,7 @@ class _PracticeState extends State<PracticePage> {
|
|||
practiceThing.next()
|
||||
});
|
||||
if((_startCount - _count) == 0) {
|
||||
PracticeDatabase.insertAnswers(practiceThing.answers);
|
||||
PracticeDatabase.insertAnswers(practiceThing.answers, practiceType);
|
||||
showDialog(
|
||||
context: context,
|
||||
child: finishedPracticeDialog()
|
||||
|
|
|
@ -15,7 +15,7 @@ class PracticeThingCentury extends PracticeThing {
|
|||
|
||||
@override
|
||||
bool answer(int answer) {
|
||||
answers.add(PracticeAnswer(current, answer, PracticeType.month));
|
||||
answers.add(PracticeAnswer(current, answer));
|
||||
final correctAnswer = DayCalculator.getCenturyValue(current);
|
||||
return answer == correctAnswer;
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@ class PracticeThingLeap extends PracticeThing {
|
|||
|
||||
@override
|
||||
bool answer(int answer) {
|
||||
answers.add(PracticeAnswer(current, answer, PracticeType.month));
|
||||
answers.add(PracticeAnswer(current, answer));
|
||||
final correctAnswer = DayCalculator.isLeapYear(current);
|
||||
return (answer != 0) == correctAnswer;
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ class PracticeThingMod extends PracticeThing {
|
|||
|
||||
@override
|
||||
bool answer(int answer) {
|
||||
answers.add(PracticeAnswer(current, answer, PracticeType.mod));
|
||||
answers.add(PracticeAnswer(current, answer));
|
||||
final correctAnswer = current % 7;
|
||||
return answer == correctAnswer;
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ class PracticeThingMonth extends PracticeThing {
|
|||
}
|
||||
@override
|
||||
bool answer(int answer) {
|
||||
answers.add(PracticeAnswer(current.i, answer, PracticeType.month));
|
||||
answers.add(PracticeAnswer(current.i, answer));
|
||||
return current.value == answer;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue