如何在颤动中覆盖“返回”按钮?

在我的 Home 小部件上,当用户点击系统后退按钮时,我想显示一个确认对话框,询问“您想退出应用程序吗?”

我不知道该如何重写或处理系统的后退按钮。

148880 次浏览

您可以使用 WillPopScope来实现这一点。

例如:

import 'dart:async';


import 'package:flutter/material.dart';


class HomePage extends StatefulWidget {
HomePage({Key key, this.title}) :super(key: key);


final String title;


@override
State<StatefulWidget> createState() => new _HomePageState();
}


class _HomePageState extends State<HomePage> {


Future<bool> _onWillPop() async {
return (await showDialog(
context: context,
builder: (context) => new AlertDialog(
title: new Text('Are you sure?'),
content: new Text('Do you want to exit an App'),
actions: <Widget>[
TextButton(
onPressed: () => Navigator.of(context).pop(false),
child: new Text('No'),
),
TextButton(
onPressed: () => Navigator.of(context).pop(true),
child: new Text('Yes'),
),
],
),
)) ?? false;
}


@override
Widget build(BuildContext context) {
return new WillPopScope(
onWillPop: _onWillPop,
child: new Scaffold(
appBar: new AppBar(
title: new Text("Home Page"),
),
body: new Center(
child: new Text("Home Page"),
),
),
);
}
}

??-operator检查 null,请参阅 给你。这一点很重要,因为如果单击对话框外部,showDialog 将返回 null,在本例中返回 false。