Как предотвратить изменения в выпадающем меню во Флаттере? - PullRequest
0 голосов
/ 05 января 2019

Я пытался спросить пользователя, уверен ли он изменить данные после нажатия на выпадающее меню.

В настоящее время я запускаю диалоговое окно с предупреждением после onChanged. Запрашиваемая у пользователя «Вы уверены, что хотите изменить данные?». Если да, я сохраняю изменения данных. Если «Нет», я закрываю диалоговое окно с предупреждением.

Но если пользователь выбирает «Нет», данные были изменены, и я не хочу менять данные ... Как я могу остановить изменение? У меня есть сложное решение, в котором я сохраняю все изменения данных, и когда пользователь нажимает НЕТ, я загружаю последнее сохранение данных перед «НЕТ», но я считаю, что это сложно. Есть ли другое, более простое решение? Спасибо

Вот мой код:

new DropdownButton<String>(
    onChanged: (String changedValue) {
        dialog(); //lanche dialog with choice of data modification
        data=changedValue;
        setState(() {
            data;
            });
        },
        value: data,
        items: <String>['data1', 'data2', 'data3','data4', 'data5']
             .map((String changedValue) {
                 return new DropdownMenuItem<String>(
                     value: changedValue,
                     child: new Text(changedValue),
                     );
             }).toList()),

1 Ответ

0 голосов
/ 06 января 2019

Вам следует обновить значение данных setState в вашей функции принятия решения. Проверьте следующий код.

new DropdownButton<String>(
  onChanged: (String changedValue) {
    _showDialog(changedValue); // I changed this.
  },
  value: data,
  items: <String>['data1', 'data2', 'data3', 'data4', 'data5']
    .map((String changedValue) {
      return new DropdownMenuItem<String>(
        value: changedValue,
        child: new Text(changedValue),
      );
}).toList()),




void _showDialog(selection) {
  showDialog(
    context: context,
    builder: (BuildContext context) {
      return AlertDialog(
        title: new Text("Alert Dialog title"),
        content: new Text("Alert Dialog body"),
        actions: <Widget>[
          new FlatButton(
            child: new Text("No"),
            onPressed: () {
              Navigator.of(context).pop();
            },
          ),
          new FlatButton(
            child: new Text("Yes"),
            onPressed: () {
              // this is where data value updates.
              setState(() {
                data = selection;
              });
              Navigator.of(context).pop();
            },
          ),
        ],
      );
    },
  );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...