升级Flutter后出现AlertDialog错误

3

我使用AlertDialog来通知用户有关互联网的可用性。它一直工作得很好,直到我使用命令flutter upgrade升级我的Flutter。程序的快照如下:

connectivitySubscription = Connectivity()
        .onConnectivityChanged
        .listen((ConnectivityResult connresult) {
      if (connresult == ConnectivityResult.none) {
        dialogshown = true;
        showDialog(
          context: context,
          barrierDismissible: false,
          builder: AlertDialog(
            title: Text(
              "Error",
            ),
            content: Text(
              "No Data Connection Available.",
            ),
            actions: <Widget>[
              FlatButton(
                onPressed: () => {
                  SystemChannels.platform.invokeMethod('SystemNavigator.pop'),
                },
                child: Text("Exit."),
              ),
            ],
          ),
        );
      } else if (_previousResult == ConnectivityResult.none) {
        checkinternet().then((result) {
          if (result == true) {
            if (dialogshown == true) {
              dialogshown = false;
              Navigator.pop(context);
            }
          }
        });
      }

      _previousResult = connresult;
    });

错误出现在:

中。
builder: AlertDialog

showDialog函数的问题。在升级flutter之前,它是child: AlertDialog并且运行良好,升级后出现错误。Flutter的快速修复建议是"builder: AlertDialog",但仍然显示错误。错误信息是"The argument type 'AlertDialog' can't be assigned to the parameter type 'Widget Function(BuildContext)'."。在我的完整项目中,每个FlatButton和RaisedButton都有删除线,并显示警告消息"'FlatButton' is deprecated and shouldn't be used. Use TextButton instead"。
请帮我解决这个问题。如果需要将flutter版本更改回以前的版本,请告诉我如何操作? 谢谢。

你能指出代码中出错的地方吗? - undefined
3个回答

2

改变

builder: AlertDialog

builder: (_) => AlertDialog()

1
@AjitKumarDutta 很高兴它对你有用。如果这个答案帮到了你,请考虑接受它作为答案。 - undefined

0

实际上,这里的真正问题是使用于弹出对话框的相同上下文引用。

基本上,我们应该分离出需要为showDialog创建的Allice名称,以下是示例名称:

dialogContex

解决方案:

  showDialog(
    context: context,
    builder: (dialogContex) {});

示例解决方案:

 showDialog(
    context: context,
    builder: (dialogContex) {
      return Dialog(
        child: Container(
          margin: const EdgeInsets.all(8.0),
          child: Form(
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                const Text('Please Confirm'),
                const SizedBox(
                  height: 25.0,
                ),
                const Text('Are you sure to remove?'),
                Row(
                  mainAxisAlignment: MainAxisAlignment.end,
                  children: <Widget>[
                    TextButton(
                        onPressed: () {
                          Navigator.of(dialogContex).pop();
                        },
                        child: const Text('Yes')),
                    TextButton(
                        onPressed: () {
                          Navigator.of(dialogContex).pop();
                        },
                        child: const Text('No'))
                  ],
                )
              ],
            ),
          ),
        ),
      );
    });

0
使用 `builder: (_) => AlertDialog()`。 将代码中所有的 `FlatButton` 和 `RaisedButton` 替换为 `TextButton` 并根据需要设置属性。 您可以通过打开终端并输入 ` flutter downgrade` 将 Flutter (在您的情况下不太推荐)降级到当前通道的最后一个活动版本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接