Какой способ доступа к состоянию в методах класса является правильным? - PullRequest
0 голосов
/ 25 мая 2019

Я смотрел видео по управлению состоянием Pragmatic от google io19, о package:provider/provider.dart и его способах управления состоянием. Это выглядит довольно просто, но у меня есть вопрос о получении доступа к состоянию в методах класса.

Скажите, что где-то в классе мне нужно обновить состояние:

_onTap(data) {
    appState.data = data;
}

В методе сборки класса я получаю состояние:

this._appState = Provider.of<AppState>(context);

Теперь мне нужен сеттер, поэтому я делаю:

set _appState(newValue) {
   appState = newValue;
}

И, наконец, мне нужно поле состояния в моем классе:

class Tapable extends StatelessWidget {
  var appState;

  _onTap(data) {
    appState.data = data;
  }

  set _appState(newValue) {
    appState = newValue;
  }

  @override
  Widget build(BuildContext context) {
    this._appState = Provider.of<AppState>(context);
    return SomeWidget(
       onTap: () { _onTap(data) }
    )
  }
}

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

Спасибо.

1 Ответ

0 голосов
/ 11 июня 2019

Если у вас есть состояние, такое, что изменение состояния должно обновить ваш виджет, вы должны использовать StatefulWidget и использовать setState () для запуска перестроения. StatelessWidget предназначен для виджетов, которые по сути являются «только для просмотра».

...