如何覆盖 Flutter 中的“返回”按钮? [复制]

Posted

技术标签:

【中文标题】如何覆盖 Flutter 中的“返回”按钮? [复制]【英文标题】:How To Override the “Back” button in Flutter? [duplicate] 【发布时间】:2018-08-27 15:23:14 【问题描述】:

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

我不明白我应该如何覆盖或处理系统后退按钮。

【问题讨论】:

【参考方案1】:

您可以使用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,参见here。这很重要,因为如果您在对话框外单击,showDialog 会返回 null,在这种情况下会返回 false。

希望对您有所帮助!

【讨论】:

showDialog 的子级已弃用。您现在应该使用构建器。 谢谢,更新了答案:) 后退按钮的图标也可以改吗? 是的,当然。有AppBar 占用的属性leading。您可以使用您想要的每个图标或任何其他小部件指定 IconButton @SaloGala varvalue ?? false 指令告诉编译器在 varvalue 为空时返回 false

以上是关于如何覆盖 Flutter 中的“返回”按钮? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 中的设备后退按钮覆盖

如何覆盖android中的操作栏后退按钮?

请问,百度地图如何返回圆形覆盖物范围内自定义的标注?

Flutter中如何返回刷新上一页?

如何覆盖 Flutter 中的 Checkbox 小部件类?

Flutter : 创建一个覆盖进度条