Пустое заданное состояние в чем смысл? - PullRequest
0 голосов
/ 18 сентября 2018

Я хочу знать смысл вызова setState без установки нового значения для переменных.

  readLocal() async {
    prefs = await SharedPreferences.getInstance();
    id = prefs.getString('id') ?? '';
    if (id.hashCode <= peerId.hashCode) {
      groupChatId = '$id-$peerId';
    } else {
      groupChatId = '$peerId-$id';
    }

    setState(() {});
  }

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Я бы сказал, что это просто соглашение .Вышеприведенное может быть переписано как

readLocal() async {
  prefs = await SharedPreferences.getInstance();
  setState(() {
    id = prefs.getString('id') ?? '';
    if (id.hashCode <= peerId.hashCode) {
      groupChatId = '$id-$peerId';
    } else {
     groupChatId = '$peerId-$id';
   }
  });
}

Оба будут делать то же самое.Вызов setState(() {}) после изменения state variable выглядит аккуратным и пригодным для повторения.

В соответствии с реализацией секции setState, он будет располагаться ниже по порядку.

  1. утверждения.Если какое-либо утверждение завершается неудачно, выдает исключение и останавливается там.
  2. Выполните функцию обратного вызова (final dynamic result = fn() as dynamic;)
  3. Попросите фреймворк восстановить (_element.markNeedsBuild();)
0 голосов
/ 18 сентября 2018

Документация гласит [https://docs.flutter.io/flutter/widgets/State/setState.html]:

Вызов setState уведомляет платформу о том, что внутреннее состояние этого объекта изменилось таким образом, что это может повлиять на пользовательский интерфейс в этом поддереве., что заставляет каркас планировать сборку для этого объекта State.

Пустая скобка { } - это пустой обратный вызов (потому что он вам явно не нужен):

Предоставленный обратный вызов немедленно вызывается синхронно.[...]

Короче говоря:

setState(() {});

- это способ указать каркасу заново построить объект состояния, не используя возможность передать обратный вызов, который быпозвонить сразу после сборки

...