【发布时间】:2019-06-25 17:35:08
【问题描述】:
我开始学习 Flutter 并且正在开发一个计算器应用程序。当我想阻止用户执行某些操作时(比如说除以零),我想显示一个显示错误消息的对话框。这需要一个上下文,但是当我传递上下文时,这会导致错误。
我看到的显示警报对话框的示例都似乎是按下按钮的结果,这使用了创建应用程序小部件时存在的上下文。我的情况是对话框显示在小部件的创建之外,并且上下文似乎在那里无效。
如何在用户执行操作而不是单击为应用程序创建的 Widget 中的按钮时显示对话框?举个例子就好了。
我得到的错误如下:
I/flutter (6990):在 null 上调用了 getter 'modalBarrierDismissLabel'。
虽然我认为我需要重组代码并重新定位警报对话框,但我不知道该怎么做。我所看到的工作示例是在构造上创建的 Widget 的结果,该 Widget 因此使用当时可用的上下文。在我的情况下,我试图创建警报对话框作为用户所做结果的结果,而不是按下小部件按钮。 我的一些相关代码如下:
} else if (pendingOperator == "/") {
if (secondValue != 0) {
setNewValue(Decimal.parse(firstValue.toString()) /
Decimal.parse(resultString));
} else {
_showAlert(context, "Divide by zero is invalid");
}
}
class MyAppState extends State<MyApp> {
Decimal firstValue;
String pendingOperator;
bool clearCurrentValue = true;
String resultString = "0";
void _showAlert(BuildContext context, String text) {
showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text("Error"),
content: Text(text),
));
}
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new SafeArea(
child: new Material(
color: Colors.black,
child: Column(
【问题讨论】:
-
你必须使用构建的上下文(BuildContext context){}你必须将它传递给你的方法。
-
你能分享包含按钮的小部件吗?你是如何使用那个小部件的?
-
首先将
MaterialApp上下文与SafeArea上下文分开,然后运行代码。您需要创建另一个类,您需要在其中定义SafeAreaContext。
标签: flutter