Создание и использование синглтона в флаттере - PullRequest
0 голосов
/ 30 апреля 2020

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

class Company {
  static final Company _instance = new Company._internal();

  factory Company() {
    return _instance;
  }

  @protected
  String name;
  @protected
  String intro;

  String get companyName => name;
  String get companyIntro => intro;

  void setCompany(String name, String intro) {
    name = name;
    intro = intro;
  }

  Company._internal();
}

в main.dart

// companyResult is the response from server
final String companyName = companyResult["name"];
final String companyIntro = companyResult["intro"];

// create singleton instance
var company = Company();
// set company info
company.setCompany(companyName, companyIntro);

// cheking
print(company.companyName)

prints null

Что я делаю не так?

Ответы [ 2 ]

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

Синглтоны лучше избегать , я бы рекомендовал вместо этого использовать Provider и вставить простую ссылку на объект в ваше дерево виджетов, чтобы вы могли получить эту ссылку в любое время.

Причина, по которой ваш пример печатает null, заключается в том, что вы ошибочно ссылаетесь на свои переменные на setCompany(), переменные name и intro - это все одна и та же переменная, вы меняете внутренние переменные функции а не переменные класса, чтобы исправить это, измените его на:

void setCompany(String name, String intro) {
  this.name = name;
  this.intro = intro;
}

Кроме того, я бы посоветовал вам назвать ваши переменные _name и _intro, поскольку нет смысла иметь get для переменной, которая не является закрытой.

0 голосов
/ 30 апреля 2020

Я прочитал статью там, что я узнал, как ниже. Я думаю, что ссылка поможет вам понять вашу проблему. попробуйте как ниже:

 factory Company() {
    Company._internal();
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...