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

Flutter中如何仅为单个页面设置深色通知栏且状态栏图标为白色

Flutter单页面自定义状态栏样式解决方案

不需要依赖第三方库,直接用Flutter SDK自带的SystemChrome类就能实现你的需求,配置后仅对当前页面生效,不会影响全局。

两种适配场景

场景1:页面包含AppBar

直接在AppBar的配置项里指定状态栏样式即可,无需额外生命周期处理,页面销毁后会自动恢复原有样式:

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

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("目标页面"),
        // 状态栏配置
        systemOverlayStyle: const SystemUiOverlayStyle(
          statusBarColor: Colors.black, // 状态栏背景黑色
          statusBarIconBrightness: Brightness.light, // 安卓端状态栏图标白色
          statusBarBrightness: Brightness.dark, // iOS端状态栏图标白色
        ),
        // 配套AppBar本身的样式和上面配置对齐即可
        backgroundColor: Colors.black,
        foregroundColor: Colors.white,
      ),
      body: const SizedBox(),
    );
  }
}

场景2:页面无AppBar(全屏/自定义顶部栏)

需要在页面生命周期中手动设置样式,离开页面时恢复原有样式:

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

class TargetPage extends StatefulWidget {
  const TargetPage({super.key});

  @override
  State<TargetPage> createState() => _TargetPageState();
}

class _TargetPageState extends State<TargetPage> {
  SystemUiOverlayStyle? _originalStyle;

  @override
  void initState() {
    super.initState();
    // 先保存进入页面前的原有状态栏样式
    _originalStyle = SystemChrome.latestStyle;
    // 设置当前页面的状态栏样式
    SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
      statusBarColor: Colors.black,
      statusBarIconBrightness: Brightness.light,
      statusBarBrightness: Brightness.dark,
    ));
  }

  @override
  void dispose() {
    // 页面销毁时恢复原有样式,不影响其他页面
    if (_originalStyle != null) {
      SystemChrome.setSystemUIOverlayStyle(_originalStyle!);
    }
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return const Scaffold(
      body: SizedBox(),
    );
  }
}

第三方库不生效的原因

flutter_statusbarcolor已经停止维护多年,不兼容Flutter 3.0及以上版本,优先使用官方原生方案即可,不存在兼容问题也不会增加包体积。

内容的提问来源于stack exchange,提问作者salih suat kükrer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:39:01