Использование переменной, которая требует asyn c в каждом методе класса - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь создать простой класс, который обрабатывает действительно простые операции с базой данных, используя этот пакет .

В классе я создаю переменную (база данных с именем db). Я хочу поместить переменную в root класса, чтобы все мои методы могли получить доступ к переменной. Но чтобы инициализировать эту переменную, я должен использовать асинхронную функцию.

class Database {
  ObjectDB db;

  void openDatabase() async {
    Directory appDocDir = await getApplicationDocumentsDirectory();

    String dbFilePath = [appDocDir.path, 'user.db'].join('/');
    // initialize and open database
    db = ObjectDB(dbFilePath);
    db.open();
  }

  void addGroup(Group group) async {
    db.insert({"example": "Data"});
  }
}

Из-за этого я не могу получить доступ к переменной db в методе addGroup. Как я могу сделать переменную, которая требует асинхронной функции, доступной для всего моего класса?

Я также попытался вернуть переменную db и присвоить ее переменной в root моего класса, но это дает ошибка, только инициаторы c могут быть доступны в инициализаторах.

  ObjectDB db = openDatabase();
  openDatabase() async {
    Directory appDocDir = await getApplicationDocumentsDirectory();

    String dbFilePath = [appDocDir.path, 'user.db'].join('/');
    // initialize and open database
    db = ObjectDB(dbFilePath);
    return db;
  }

1 Ответ

1 голос
/ 22 апреля 2020

вы можете вызывать функцию установки внутри вашего конструктора


class Database {
  ObjectDB db;

   Database(){
      this.openDatabase();
   }

  void openDatabase() async {
    Directory appDocDir = await getApplicationDocumentsDirectory();

    String dbFilePath = [appDocDir.path, 'user.db'].join('/');
    // initialize and open database
    db = ObjectDB(dbFilePath);
    db.open();
  }

  void addGroup(Group group) async {
    db.insert({"example": "Data"});
  }
}

теперь она будет доступна для экземпляра этого класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...