有没有办法在特定页面上禁用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屏幕底部的后退箭头,我就会返回到PageOne.我希望这个按钮根本不出现. 理想情况下,除非用户将手指按在屏幕上5秒,否则我不希望有任何可能的方法离开这个屏幕.(我正在try 为蹒跚学步的子元素编写一个应用程序,希望只有父母能够导航出特定的屏幕).

推荐答案

答案是WillPopScope.它将防止页面被系统弹出.你仍然可以使用Navigator.of(context).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(),
        ),
      ),
    ),
  );
}

Flutter相关问答推荐

无法在Flatter中设计正确的布局

material 3芯片,不能go 除输入芯片小部件上的轮廓

如何防止onTapCancel由子元素触发?

如何在表格日历标题下方添加文本?

如何将assets资源 实体类型转换为文件类型?

轻松本地化包翻译在底部导航栏项目标签Flutter 翼dart 中不起作用

如何将请求字段正确添加到DART多部分请求

无法将新文物与Flutter 项目集成在一起

Flutter-Riverpod:如何只从提供者读取一次值

未处理的异常:第1行第5列出现错误:无效的媒体类型:应为/&;.从API获取数据时在Flutter中

自定义绘画未显示 - Flutter

以编程方式在 flutter 中安装 apk 时解析错误

reactive_flutter_BLE - 应用找到设备但无法连接(并读取 BLE 数据)

什么最接近 Dart 的 List.asMap().forEach() 返回列表?

Flutter Serverpod 在示例项目上返回 400 错误

如何验证非表单字段?

如何制作两个显示相关内容且可编辑的文本字段?

我的主屏幕上的 FutureBuilder 不断重新加载(但仅在其他屏幕上时)?

一个或多个插件需要更高的 Android SDK 版本

参数类型MaterialPageRoute不能分配给参数类型String