You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter开发:如何隐藏应用顶部栏并限制用户关闭应用

Flutter 隐藏顶部栏 + 限制应用关闭方案

一、隐藏应用顶部栏

这里分两种场景处理:隐藏页面自定义AppBar,以及隐藏系统状态栏(顶部电量、信号栏)

1. 隐藏页面自定义AppBar

如果页面基于Scaffold开发,直接移除appBar参数,或者将其设为null即可:

Scaffold(
  // 移除appBar参数,或设置appBar: null
  body: Center(
    child: Text('无顶部栏页面'),
  ),
);

2. 隐藏系统状态栏

借助flutter/services包的SystemChrome类实现,有两种生效范围可选:

方式1:全局生效(应用启动后所有页面隐藏)

在main函数中初始化配置,应用启动后全程隐藏状态栏:

import 'package:flutter/services.dart';
import 'package:flutter/material.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  // immersiveSticky模式:滑动顶部可临时调出状态栏,松手后自动隐藏
  SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
  runApp(const MyApp());
}

若需要完全锁定状态栏无法调出,可替换为SystemUiMode.immersive。

方式2:单页面生效

仅在指定页面使用AnnotatedRegion包裹,仅当前页面隐藏状态栏:

import 'package:flutter/services.dart';
import 'package:flutter/material.dart';

class NoStatusBarPage extends StatelessWidget {
  const NoStatusBarPage({super.key});

  @override
  Widget build(BuildContext context) {
    return AnnotatedRegion<SystemUiOverlayStyle>(
      value: const SystemUiOverlayStyle(
        statusBarColor: Colors.transparent,
        statusBarIconBrightness: Brightness.light, // 根据页面背景色调整图标亮度
        statusBarBrightness: Brightness.dark,
      ),
      child: Scaffold(
        body: Center(child: Text('仅当前页隐藏状态栏')),
      ),
    );
  }
}

二、限制用户关闭应用

需区分Android和iOS平台处理,两者系统机制差异较大:

1. Android 端

拦截返回键退出

使用WillPopScope组件拦截返回事件,阻止用户通过返回键退出应用:

import 'package:flutter/material.dart';

class PreventExitPage extends StatelessWidget {
  const PreventExitPage({super.key});

  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: () async {
        // 返回false表示阻止应用退出
        return false;
      },
      child: Scaffold(
        body: Center(child: Text('无法通过返回键退出')),
      ),
    );
  }
}

防止从最近任务页划掉应用

若要彻底阻止用户从最近任务列表关闭应用,需将应用设为前台服务:

  1. 在android/app/src/main/AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
  1. 借助flutter_foreground_task等第三方库快速实现前台服务,保持应用后台持续运行。

2. iOS 端

iOS系统对应用权限限制严格,普通应用无法完全阻止用户关闭,仅能通过**Kiosk模式(自助终端模式)**实现:

  1. 在ios/Runner/Info.plist中添加配置:
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
<key>UISupportedInterfaceOrientations</key>
<array>
  <string>UIInterfaceOrientationPortrait</string>
</array>
  1. 在Xcode中配置:打开项目 → Signing & Capabilities → 添加Single App Mode权限,启用后应用将无法被用户手动关闭,仅能通过设备管理或重启退出。

内容的提问来源于stack exchange,提问作者Orl13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 12:05:29