init method
Initialize the persistence layer and the database.
Implementation
Future<void> init() async {
info('Initializing $runtimeType...');
_databasePath ??= await getDatabasesPath();
// open the database - make sure to use the same database across app (re)start
_database = await openDatabase(
databaseName,
version: 1,
singleInstance: true,
onCreate: (Database db, int version) async {
// when creating the database, create the tables
await db.execute(
'CREATE TABLE $STUDY_TABLE_NAME ('
'$STUDY_ID_COLUMN TEXT, '
'$STUDY_DEPLOYMENT_ID_COLUMN TEXT, '
'$DEVICE_ROLE_NAME_COLUMN TEXT, '
'$PARTICIPANT_ID_COLUMN TEXT, '
'$PARTICIPANT_ROLE_NAME_COLUMN TEXT, '
'$CREATED_ON_COLUMN TEXT, '
'$UPDATED_ON_COLUMN TEXT, '
'$DEPLOYED_ON_COLUMN TEXT, '
'$SAMPLING_STATUS_COLUMN TEXT, '
'$DEPLOYMENT_STATUS_COLUMN TEXT, '
'$DEPLOYMENT_COLUMN TEXT)',
);
await db.execute(
'CREATE TABLE $TASK_QUEUE_TABLE_NAME ('
'$ID_COLUMN INTEGER PRIMARY KEY, '
'$TASK_ID_COLUMN TEXT, '
'$STUDY_DEPLOYMENT_ID_COLUMN TEXT, '
'$DEVICE_ROLE_NAME_COLUMN TEXT, '
'$TASK_COLUMN TEXT)',
);
debug('$runtimeType - $databaseName DB created');
},
);
// Listen to changes to studies in the client repository so we can save them.
SmartphoneClientRepository().studyStatusEvents.listen(
(event) => updateStudy(event.study),
);
// Listen to changes to the app task queue so we can save them.
AppTaskController().userTaskEvents.listen((task) => saveUserTask(task));
info('$runtimeType - SQLite DB initialized - file: $databaseName');
}