如何使用 navigator.pop 返回 bool 值?

Mar*_*s.L 6 dart flutter

我试图从对话框返回一个布尔值,但我不明白为什么该值没有根据需要返回。我尝试返回作为未来值,并在弹出对话框后将值与上下文一起返回。

final bool delete = await _showDialog();
print(delete);

Future<bool> _showDialog() {
bool result;

showDialog(
  context: context,
  builder: (BuildContext context) {
    return AlertDialog(
      title: Text('Delete Appointment'),
      content: Text(
        'Are you sure? \nThis action cannot undo.',
        style: TextStyle(
          color: Colors.red,
          fontSize: 20
        ),
      ),
      actions: <Widget>[
        FlatButton(
          color: Colors.blue,
          child: Text(
            'CANCEL',
            style: TextStyle(
              color: Colors.white,
              fontSize: 20
            ),
          ),
          onPressed: () {
            setState(() => result = false);
            //print(result);
            Navigator.pop(context, result);
            return Future.value(result);
          },
        ),
        SizedBox(
          width: 50,
        ),
        FlatButton(
          color: Colors.red,
          child: Text(
            'CONFIRM',
            style: TextStyle(
              color: Colors.white,
              fontSize: 20
            ),
          ),
          onPressed: () {
            setState(() => result = true);
            //print(result);
            Navigator.pop(context, result);
            return Future.value(result);
          },
        )
      ],
    );
  }
);
}
Run Code Online (Sandbox Code Playgroud)

小智 7

对于返回 True

 Navigator.of(context).pop(true);
Run Code Online (Sandbox Code Playgroud)

对于返回 False

 Navigator.of(context).pop(false);
Run Code Online (Sandbox Code Playgroud)


Joã*_*res 6

这是一个基于您的代码的工作示例:

@override
Widget build(BuildContext context) {
  return Container(
    child: RaisedButton(onPressed: () async {
      bool delete = await _showDialog(context);
      print(delete);
    })
  );
}

Future<bool> _showDialog(context) {
  return showDialog(
    context: context,
    builder: (BuildContext context) {
      return AlertDialog(
        title: Text('Delete Appointment'),
        content: Text(
          'Are you sure? \nThis action cannot undo.',
          style: TextStyle(
            color: Colors.red,
            fontSize: 20
          ),
        ),
        actions: <Widget>[
          FlatButton(
            color: Colors.blue,
            child: Text(
              'CANCEL',
              style: TextStyle(
                color: Colors.white,
                fontSize: 20
              ),
            ),
            onPressed: () {
              Navigator.pop(context, false);
            },
          ),
          SizedBox(
            width: 50,
          ),
          FlatButton(
            color: Colors.red,
            child: Text(
              'CONFIRM',
              style: TextStyle(
                color: Colors.white,
                fontSize: 20
              ),
            ),
            onPressed: () {
              Navigator.pop(context, true);
            },
          )
        ],
      );
    }
  );
}
Run Code Online (Sandbox Code Playgroud)


Abi*_*n47 2

您传递要返回的值Navigator.pop,它将通过以下方式返回showDialog:

final result = await showDialog(
  ...
  // At some point, Navigator.pop is called
  Navigator.pop(context, true);
);

print(result); // Prints: true
Run Code Online (Sandbox Code Playgroud)