init method

Future<void> init([
  1. SmartphoneDeployment? deployment
])

Initialize the persistence layer and the database.

Implementation

Future<void> init([SmartphoneDeployment? deployment]) 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 $DEPLOYMENT_TABLE_NAME ($DEPLOYMENT_ID_COLUMN TEXT PRIMARY KEY, $ROLE_NAME_COLUMN TEXT, $DEPLOYMENT_STATUS_COLUMN INTEGER, $UPDATED_AT_COLUMN TEXT, $DEPLOYED_AT_COLUMN TEXT, $USER_ID_COLUMN TEXT, $DEPLOYMENT_COLUMN TEXT)');
      await db.execute(
          'CREATE TABLE $TASK_QUEUE_TABLE_NAME ($ID_COLUMN INTEGER PRIMARY KEY, $DEPLOYMENT_ID_COLUMN TEXT, $TASK_ID_COLUMN TEXT, $TASK_COLUMN TEXT)');

      debug('$runtimeType - $databaseName DB created');
    },
  );

  // save the deployment if specified
  if (deployment != null) saveDeployment(deployment);

  // listen to changes to the app task queue so we can save them
  AppTaskController().userTaskEvents.listen((task) => saveUserTask(task));

  info('$runtimeType - SQLite DB initialized - name: $databaseName');
}