当前位置: 首页 > 知识库问答 >
问题:

如何在Flutter中停用或覆盖Android“后退”按钮?

单于耘豪
2023-03-14

在特定页面上,是否有办法停用Android后退按钮?

class WakeUpApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: "Time To Wake Up ?",
      home: new WakeUpHome(),
      routes: <String, WidgetBuilder>{
        '/pageOne': (BuildContext context) => new pageOne(),
        '/pageTwo': (BuildContext context) => new pageTwo(),
      },
    );
  }
}

在第一页上,我有一个按钮可以转到第二页:

new FloatingActionButton(
  onPressed: () {    
    Navigator.of(context).pushNamed('/pageTwo');
  },
)

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

共有3个答案

陶树
2023-03-14

虽然Remi的答案是正确的,但通常您不想简单地阻止后退按钮,而是希望用户确认退出。

您可以通过从确认对话框中获取答案来执行类似的操作,因为onWillPop是一个未来。

@override
Widget build(BuildContext context) {
  return WillPopScope(
    child: Scaffold(...),
    onWillPop: () => showDialog<bool>(
      context: context,
      builder: (c) => AlertDialog(
        title: Text('Warning'),
        content: Text('Do you really want to exit'),
        actions: [
          FlatButton(
            child: Text('Yes'),
            onPressed: () => Navigator.pop(c, true),
          ),
          FlatButton(
            child: Text('No'),
            onPressed: () => Navigator.pop(c, false),
          ),
        ],
      ),
    ),
  );
}
党航
2023-03-14

正如雷米·罗塞利特所指出的,威尔波普普通常是要走的路。但是,如果您正在开发一个有状态的小部件,它应该直接对后退按钮做出反应,则可以使用以下命令:

https://pub.dartlang.org/packages/back_button_interceptor

注意:我是这个包的作者。

祖奇
2023-03-14

答案是WillPopScope。它将防止页面被系统弹出。您仍然可以使用Navigator.of(上下文). pop()

@override
Widget build(BuildContext context) {
  return new WillPopScope(
    onWillPop: () async => false,
    child: new Scaffold(
      appBar: new AppBar(
        title: new Text("data"),
        leading: new IconButton(
          icon: new Icon(Icons.ac_unit),
          onPressed: () => Navigator.of(context).pop(),
        ),
      ),
    ),
  );
}
 类似资料:
  • 在特定页面上有没有办法停用返回箭头按钮?我建立了一个启动屏幕,每当启动屏幕导航到主页,在主页appBar返回箭头显示,我如何才能停用它或清除返回到前一页(欢迎屏幕)的箭头。

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

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

  • 那么,如何删除的Flutter上的Android back、home和square按钮呢?

  • 问题内容: 如何在自己的应用程序中复制此功能? 我认为肯定有三种可能性… 捕获后退按钮的按下(如下所示),然后调用home按钮调用的任何方法。 捕获后退按钮按下,然后欺骗主页按钮。 捕获后退按钮的按下,然后启动主屏幕的活动,从而有效地将应用程序的活动置于停止状态。 编辑: 我知道有关服务,并且正在与此问题相关的应用程序中使用一种。该问题专门用于在按“后退”按钮时将活动置于停止状态而不是已破坏状态。

  • 我有一个文本框。当我单击“添加”按钮时,我将键发送到文本框,我想添加另一行,所以我再次单击“添加”按钮,但它正在添加另一个输入框来输入值,但它总是覆盖第一行。//单击添加行按钮//ngDriver。FindElement(ByXPath("//div[1]/div[3]/form/div/field dset[2]/div/div[4]/按钮")。单击();