#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-dialog2. Я вызываю его в функции 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()
в действиях. Это удаляет виджет из дерева виджетов. Но если вы вызовете его просто так, он добавит и удалит его одновременно. Таким образом, вы не сможете его увидеть.