【问题标题】:How do I show AlertDialog in Flutter如何在 Flutter 中显示 AlertDialog
【发布时间】: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 上下文分开,然后运行代码。您需要创建另一个类,您需要在其中定义SafeArea Context。

标签: flutter


【解决方案1】:

显示警报的需要间接是按下按钮的结果。创建该按钮后,将上下文传递给被调用的函数并在调用 _showAlert 时使用该上下文。

【讨论】:

    猜你喜欢
    • 2020-07-25
    • 2018-08-28
    • 2019-09-16
    • 2022-01-09
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    相关资源
    最近更新 更多