Как я могу получить свой currentState во флаттере? - PullRequest
0 голосов
/ 06 марта 2020

Я хочу отправить sh мои данные List в базу данных через мою модель, и я хочу получить свой currentState.

class SettingsDialog extends StatefulWidget {
  final ChexiUser user;

  SettingsDialog({this.user});
  @override
  _SettingsDialogState createState() => _SettingsDialogState();
}

Вот мой Stateful Widget, который создает изменяемый виджет _SettingsDialogState. У меня есть класс с именем Options, в котором есть функция c List, которая позволяет getOptions (user) отображать мои параметры в DataTable.

class Option {
  String name;
  String option;
  String description;
  bool value;
  Object user;
  String valueString;

  Option(
    {this.name,
     this.option,
     this.description,
     this.user,
     this.value,
     this.valueString});

 static List<Option> getOptions(user) {
   return <Option>[
   Option(
      name: 'autoPass',
      value: user.settingsAutoPass,
      option: 'Auto Pass',
      description:
          'The game will automatically roll the dice when a new turn starts or a double is rolled'),
   Option(
      name: 'autoRoll ',
      value: user.settingsAutoRoll,
      option: 'Auto Roll',
      description:
          'The game will automatically pass the dice if there is no move'),
    Option(
      name: 'showCheckMoves ',
      value: user.settingsShowCheckMoves,
      option: 'Show Check Move',
      description:
          'When an opponent can be put in check, highlight the squares (from, to) that will lead to a 
      check '),
    Option(
      name: 'showFileRank ',
      value: user.settingsShowFileRank,
      option: 'Show File Rank',
      description:
          'Show the files and ranks on the sides of the gameboard'),
  Option(
      name: 'showLastOpponentMove',
      value: user.settingsShowLastOpponentMove,
      option: 'Show Last Opponent Move',
      description:
          ' The opponent\'s last move (from, to) will show as a different colored square'),
    Option(
      name: 'showMateMoves',
      value: user.settingsShowMateMoves,
      option: 'Show Mate Move',
      description:
          'When an opponent can be put in mate, highlight the squares (from,to) that will lead to a 
      mate'),];
  }
}

В моем виджете класса _SettingsDialogState я инициализировал параметры

class _SettingsDialogState extends State<SettingsDialog> {
  List<Option> options;

@override
void initState() {
  options = Option.getOptions(widget.user);
  super.initState();
}

Теперь в моем DataTable я вызывал setState (() {}) каждый раз, когда происходят изменения для обновления значений моего initState, и он работает так хорошо. Теперь я хочу, чтобы мои данные были сохранены в функции модели, и мне нужны данные о состоянии, и я не знаю, как получить мои данные. Должен ли я передать список опций моей функции сохранения или просто вызвать currentState моего виджета. Я застрял, и я искал решения в Интернете. Я попытался передать список опций, но когда я его распечатал, он вызывает экземпляр Option. Мне нужна ваша экспертиза по этому вопросу. Спасибо, ребята, я знаю, что я близко, мне просто нужно знать, как выполнить. Или я рядом?

1 Ответ

1 голос
/ 06 марта 2020

Избегайте статической инициализации переменных.

  options = Option.getOptions(widget.user);

Вместо этого определите ее как переменную в виджете и присвойте значения с помощью конструктора.

class SettingsDialog extends StatefulWidget {
  final ChexiUser user;
  final List<Option> options;


  SettingsDialog({this.user,this.options});
  @override
  _SettingsDialogState createState() => _SettingsDialogState();
}

Внутри вашего класса состояний вы можете получить доступ это значение, используя widget.options.

Как я могу получить свой currentState во флаттере?

Всегда управлять интерфейсом, используя класс модели. Держите класс модели внутри вашего бизнес-логики c. Для управления этими моделями можно использовать любой из методов управления состоянием. Некоторые популярные опции: flutter_blo c, provider et c.

Подробнее о здесь .

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