В дартсе можно передать аргумент в синглтоне? - PullRequest
1 голос
/ 11 мая 2019
class Peoples {
  int id;
  String name;

  static final Peoples _inst = Peoples._internal();

  Peoples._internal();

  factory Peoples() {
    return _inst;
  }
}

У меня есть этот синглтон-класс.Что гарантирует, что только один экземпляр класса когда-либо создается.Таким образом, даже если кто-то попытается создать экземпляр, он будет использовать один и тот же экземпляр.И я могу создавать и устанавливать значения, например:

  Peoples ps1 = Peoples();
  Peoples ps2 = Peoples();

  ps1.id = 1;
  ps1.name = "First";

  ps2.id = 2;
  ps2.name = "Second";

Можно ли создавать и устанавливать значения, например:

  Peoples ps1 = Peoples(1, "First");
  Peoples ps2 = Peoples(2, "Second");

Итак, теперь и "ps1", и "ps2" будутиметь (2, «Второй»).

1 Ответ

3 голосов

Конечно! Вам нужно передать аргументы фабричному методу, затем вам нужно обновить свойства, ИСПОЛЬЗУЯ указанный экземпляр.

Например, у вас было

class Peoples {
  int id;
  String name;

  static final Peoples _inst = Peoples._internal();

  Peoples._internal();

  factory Peoples() {
    return _inst;
  }
}

Если вы примените мое решение, то у вас будет

class Peoples {
  int id;
  String name;

  static final Peoples _inst = Peoples._internal();

  Peoples._internal();

  factory Peoples({int id, String name}) {
    _inst.id = id
    _inst.name = name
    return _inst;
  }
}

с этим ваш вопрос должен быть дан ответ Для получения дополнительной информации о фабрике и параметрах посетите

https://dart.dev/guides/language/language-tour

Рабочий пример

class Peoples {
  int id;
  String name;

  static final Peoples _inst = Peoples._internal();

  Peoples._internal();


  factory Peoples(int id, String name) {
    _inst.id = id;
    _inst.name = name;
    return _inst;
  }
}

void main() {
  print("Instance of = " + Peoples(0, "Dylan").name);
  print("Instance of = " + Peoples(1, "Joe").name);
  print("Instance of = " + Peoples(2, "Maria").name);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...