当前位置: 首页 > 面试题库 >

如何覆盖Flutter中的“返回”按钮?

李奕
2023-03-14
问题内容

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

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


问题答案:

您可以使用它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>[
          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;
  }

  @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。

希望能有所帮助!



 类似资料:
  • 在特定页面上,是否有办法停用Android后退按钮? 在第一页上,我有一个按钮可以转到第二页: 我的问题是,如果我按下android屏幕底部的返回箭头,我会返回到第一页。我不希望这个按钮出现。理想情况下,我希望没有可能离开这个屏幕,除非用户保持他的手指按在屏幕上5秒钟。(我正试图为初学走路的孩子编写一个应用程序,希望只有父母能够导航出特定的屏幕)。

  • 在特定页面上有没有办法停用返回箭头按钮?我建立了一个启动屏幕,每当启动屏幕导航到主页,在主页appBar返回箭头显示,我如何才能停用它或清除返回到前一页(欢迎屏幕)的箭头。

  • 问题内容: 我想在操作栏中自定义活动后退按钮,而不是在硬键后退按钮中自定义。我已经重写了该方法。它可以与我的模拟器后退按钮一起使用,但不能与操作栏后退按钮一起使用。 我希望它与操作栏一起发生。我怎样才能做到这一点? 这是我的代码: 我已经用了这个祝酒,无论是否按回去都可以,但是实际的实现方式有所变化,例如想回到上一个活动。但这不适用于操作栏顶部的按钮(活动标题除外)。 请任何人可以指定我这个问题。

  • 我想自定义操作栏中的“活动后退”按钮,而不是硬键后退按钮。我已经重写了onBackPressed()方法。它适用于我的emulator back按钮,但不适用于action bar back按钮。 我希望它发生在动作栏上。我该怎么做? 这是我的代码: 我已经使用了这个祝酒词,不管后退是否有效,但是实际的实现变化喜欢移动回以前的活动。但是这不适用于操作栏顶部的按钮(除了活动标题)。 请任何人都可以指

  • 问题内容: 我正在尝试Backbone.js,而我正在尝试的事情之一就是调用远程API,因此,据我了解的文档资料,我需要能够覆盖Backbone.sync 。 在文档本身中没有如何执行此操作的示例,并且似乎没有用于Backbone的google组…有人可以指出执行此操作的示例吗? 问题答案: 看看这个带注释的源示例,在该示例中,它们被本地存储替代项覆盖 基本上,Backbone.sync应该是一个

  • 我的对话框是扩展TitleArea对话框。在对话框上,我有一个关闭对话框按钮。它基本上只是调用方法关闭();当按钮被单击时。 我遇到的问题是,当用户单击窗口关闭(红色X)时,它调用的不是关闭方法。我认为这可能是调用Cancel方法。 检查returnCode,我看到当按下close时,它返回0。但当按下X时,返回1。 如何覆盖X键,只调用关闭方法,如按钮按下?

  • 问题内容: 我目前在glassfish v2.1中使用基于身份的身份验证来登录用户,并且工作正常。我想切换到该网站,并希望能够获得最初请求的URL(即在重定向到登录页面之前),并在我的程序化登录代码中使用它,以便在身份验证后将用户重定向回请求的页面。 我已经看过源代码-在我的情况下,它是(catalina代码库),它将初始请求保存在会话中的对象中,但是该会话不是,因此没有直接方法可以访问它。 还是

  • 问题内容: 未正确探讨此问题。真正的问题在于。 原始问题中的第一个代码粘贴将产生预期的结果。但是,仍然需要注意。请参阅以下示例: 是 不 一样的 也就是说,不会自动调用与User对象关联的方法。 实际上 ,如果在模型上被覆盖,将生成以下描述。 摘要 这一切对我来说似乎很愚蠢。这似乎是在告诉我在指定类型时实际上并没有在调用。有人可以解释这里的实际情况吗? 任何可以帮助我解决这个问题的精灵都可以回答我