диалоговое окно предупреждения не отображается прерывисто

#flutter

#флаттер

Вопрос:

Я пытаюсь создать функцию, которая принимает значения от пользователя и предупреждает его, если у него высокое, низкое или нормальное кровяное давление, поэтому я сделал это

 void preesureRanges(double sysValue, double diaValue) {
    String text = "";

    if (sysValue >= 120 amp;amp;
        sysValue <= 130 amp;amp;
        diaValue >= 80 amp;amp;
        diaValue <= 90) {
      text = ("معدل ضغط الدم في الجسم طبيعي");
    } else if (sysValue < 120 amp;amp; diaValue < 80) {
      text =
          ("معدل ضغط الدم منخفض nالرجاء تناول طعام مالح وشرب كمية كافية من الماء ");
    } else if (sysValue > 130 amp;amp; diaValue > 90) {
      text = ("معدل ضغط الدم مرتفع  ");
    }
    showDialog<void>(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          content: Text(
            text,
          ),
          actions: <Widget>[
            Buttons(
                height: 35,
                width: 100,
                text: 'اغلاق',
                onPressed: () => Navigator.pop(context)),
          ],
        );
      },
    );
  }
 

но диалоговое окно предупреждения не отображается, я попытался вызвать метод, и метод работает правильно
, после этого я попытался изменить, и я поместил вызов предупреждения внутри if следующим образом

 void preesureRanges(double sysValue, double diaValue) {
    String text = "";

    if (sysValue >= 120 amp;amp;
        sysValue <= 130 amp;amp;
        diaValue >= 80 amp;amp;
        diaValue <= 90) {
      showDialog<void>(
        context: context,
        builder: (BuildContext context) {
          return AlertDialog(
            content: Text(
              "معدل ضغط الدم في الجسم طبيعي",
            ),
            actions: <Widget>[
              Buttons(
                  height: 35,
                  width: 100,
                  text: 'اغلاق',
                  onPressed: () => Navigator.pop(context)),
            ],
          );
        },
      );
      text = ("معدل ضغط الدم في الجسم طبيعي");
    } else if (sysValue < 120 amp;amp; diaValue < 80) {
      text =
          ("معدل ضغط الدم منخفض nالرجاء تناول طعام مالح وشرب كمية كافية من الماء ");
    } else if (sysValue > 130 amp;amp; diaValue > 90) {
      text = ("معدل ضغط الدم مرتفع nالرجاء مدري والله ايش المفروض تسوي ");
    }
    showDialog<void>(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          content: Text(
            text,
          ),
          actions: <Widget>[
            Buttons(
                height: 35,
                width: 100,
                text: 'اغلاق',
                onPressed: () => Navigator.pop(context)),
          ],
        );
      },
    );
  }
 

но здесь только в первом случае отображается предупреждение, я также пытался, но вызов предупреждения в каждом случае, но ничего не отображается

  onPreesed: () {
          preesureRanges(upPressure, downPressure, context);    
          Navigator.of(context).pop();
        },
 

вот вызов, если метод, этот onPressed предназначен для RaisedButton, и он находится внутри нижнего листа, а вот значение, которое я передал своей функции

 double upPressure;
String upPree;
double downPressure;
String downPree;
 

они буксируют функцию OnChanged в соответствии с textFormFiled, которая у меня есть на нижнем листе

  onChanged: (newPrusser) {
              upPree = newPrusser;
              upPressure = double.parse(upPree);
            },
onChanged: (newPrusser) {
          downPree = newPrusser;
          downPressure = double.parse(downPree);
        },
 

Комментарии:

1. Как и куда вы звоните preesureRanges ? (опечатка в давлении?) Немного больше кода может помочь определить, в чем проблема. Также проверьте это: coflutter.com/flutter-how-to-show-dialog

2. Я вызываю его в функции onPressed моей кнопки отправки и передаю значения из метода OnChanged для поданного текста, я попытался установить тип метода как string, и я вызвал метод в инструкции print, он работает правильно

3. может быть, вы используете неправильный контекст? Попробуйте передать его вашему методу следующим образом: preesureRanges(BuildContext context, double sysValue, double diaValue)

4. @Er1 Я попробовал ваше решение, но то же самое

Ответ №1:

Нашел ошибку здесь:

 onPreesed: () {
          preesureRanges(upPressure, downPressure, context);    
          Navigator.of(context).pop();
        },
 

Вы позвонили Navigator.of(context).pop() сюда. Прокомментируйте это, и вы увидите, что это работает.

Комментарии:

1. Я внес небольшие изменения. Не могли бы вы попробовать это изменение и сообщить мне, работает ли оно? Примечание: «Вам нужно будет передать context в качестве параметра при вызове функции.

2. ОК. Тогда, можете ли вы поделиться некоторым кодом, в котором вы вызываете функцию?

3. Я нашел причину ошибки, пожалуйста, проверьте.

4. okk это работает, большое спасибо, но не могли бы вы объяснить, почему?

5. ОК. Итак, когда вы вызываете showDialog() функцию, она в основном добавляет новый виджет в дерево виджетов. Итак, для того, чтобы вернуться на главную страницу, если вы видите, что вы использовали Navigator.of(context).pop() в действиях. Это удаляет виджет из дерева виджетов. Но если вы вызовете его просто так, он добавит и удалит его одновременно. Таким образом, вы не сможете его увидеть.