【问题标题】:Errors in AlertDialog警报对话框中的错误
【发布时间】:2018-12-20 13:59:09
【问题描述】:

我关注 https://codingwithjoe.com/flutter-navigation-how-to-prevent-navigation/ 显示 AlertDialog 但有两个错误:

  1. 当点击离开对话框时(关闭屏障而不点击任何按钮)出现运行时错误:
  Dart Error: Unhandled exception:Failed assertion: boolean expression must not be null

2。 child: new AlertDialog('child 已被弃用,不应使用'.

代码:

Future<bool> _exitApp(BuildContext context) {
  return showDialog(
        context: context,
        child: new AlertDialog(
          title: new Text('Do you want to exit this application?'),
          content: new Text('We hate to see you leave...'),
          actions: <Widget>[
            new FlatButton(
              onPressed: () => Navigator.of(context).pop(false),
              child: new Text('No'),
            ),
            new FlatButton(
              onPressed: () => Navigator.of(context).pop(true),
              child: new Text('Yes'),
            ),
          ],
        ),
      ) ??
      false;
}

堆栈跟踪:

#0      ModalRoute.willPop (package:flutter/src/widgets/routes.dart)
<asynchronous suspension>
#1      NavigatorState.maybePop (package:flutter/src/widgets/navigator.dart:1783:57)
<asynchronous suspension>
#2      Navigator.maybePop (package:flutter/src/widgets/navigator.dart:1133:34)
#3      BackButton.build.<anonymous closure> (package:flutter/src/material/back_button.dart:91:19)
#4      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14)
#5      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:562:30)
#6      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
#7      TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)
#8      TapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:204:7)
#9      GestureArenaManager.sweep (package:flutter/src/g<…>

谢谢!

【问题讨论】:

  • “布尔表达式不能为空”信息不足。堆栈跟踪显示了导致此异常的位置。
  • @GünterZöchbauer 添加
  • child 已弃用 - 建议改用 builder。但没关系 - 我已经尝试过你的代码 - 一切正常。也许问题不在_exitApp 方法中?
  • @AndreyTurkovsky感谢您的回复!尝试从对话框中点击(不在对话框中的任何地方)。这给出了飞镖错误

标签: flutter flutter-layout


【解决方案1】:

将您的方法设为async 并使用await 关键字:

Future<bool> _exitApp(BuildContext context) async {
  return await showDialog(  ...

如果您不想在点击容器外部时关闭对话框,请将 barrierDismissible 设置为 false。

showDialog(barrierDismissible: false, ...

【讨论】:

  • 谢谢!原因是什么?
  • 如果你检查showDialog的代码,它会返回一个Future,所以你必须将你的方法标记为async并使用await等待直到你收到Dialog的响应。如果你不等待,你将返回 null。
猜你喜欢
  • 2012-02-07
  • 2015-08-03
  • 2013-05-11
  • 1970-01-01
  • 2015-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多