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

如何让Flutter应用适配Android全屏 消除Scaffold两侧白边问题

问题排查与解决方案

核心问题根因

当前布局结构存在错误:将Scaffold整体嵌套在SafeArea内部,是导致左右白边的直接原因。
SafeArea的作用是自动避开系统状态栏、挖孔屏、底部手势条等系统UI区域,给子组件增加对应内边距;但Scaffold本身已经内置了系统边距适配能力,外层套SafeArea会额外叠加左右内边距,导致AppBar和body都无法占满屏幕宽度。

可行修复方案

步骤1:调整SafeArea位置

将SafeArea从Scaffold外层移到Scaffold的body属性内部,仅给body内容加安全区适配,不要限制Scaffold本身的尺寸。

步骤2:补充Scaffold全屏适配配置

按需添加以下配置,确保完全占满屏幕:

  • 若需要实现沉浸式效果,可添加extendBodyBehindAppBar: true让body内容延伸到AppBar下方
  • 若不需要AppBar默认的返回按钮占位,给AppBar加automaticallyImplyLeading: false避免左侧留白
  • 若需要完全隐藏状态栏实现真正全屏,可在页面初始化时配置系统UI样式

修改后代码示例

import 'package:flutter/services.dart';

class StatisticView extends StatelessWidget {
  const StatisticView({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    // 如需隐藏状态栏实现完全全屏,取消注释下面这行代码
    // SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge, overlays: []);
    bool statisticAvailable = false;

    const Color BACKGROUND_COLOR = Color(0xffFAFAFA);
    const Color COLOR_GREEN = Color(0xff007336);
    const Color COLOR_BROWN = Color(0xff4B4539);
    const Color COLOR_BLACK = Color(0xff333333);

    return Scaffold(
      extendBody: true,
      // 按需添加,让body延伸到AppBar下方
      extendBodyBehindAppBar: true,
      backgroundColor: BACKGROUND_COLOR,
      appBar: AppBar(
        // 按需关闭默认返回按钮占位
        automaticallyImplyLeading: false,
        toolbarHeight: 110,
        title: Padding(
          padding: EdgeInsets.only(top: 55),
          child: Text(
            "Hours Leaderboard",
            style: GoogleFonts.poppins(
                fontWeight: FontWeight.w600,
                fontSize: 28,
                color: const Color(0xffFFFFFF)),
          ),
        ),
        backgroundColor: COLOR_GREEN,
        // Material3开启时避免滚动后阴影带来的视觉留白
        scrolledUnderElevation: 0,
      ),
      // SafeArea移到body内部,仅适配内容区
      body: SafeArea(
        child: statisticAvailable == false ? Center(child: Text("This feature is currently unavailable.")) : SingleChildScrollView(
          width: double.infinity,
          child: Container(
            width: double.infinity,
            child: Column(
              children: [
                // 原有body内容保持不变
                SizedBox(
                  height: 20,
                ),
                Stack(
                  children: [
                    Padding(
                      padding: EdgeInsets.only(top: 50, left: 175),
                      child: Center(
                        child: Container(
                          child: Column(
                            mainAxisAlignment: MainAxisAlignment.center,
                            children: [
                              Text("3",
                                  style: GoogleFonts.poppins(
                                      fontSize: 17, fontWeight: FontWeight.w800)),
                              SizedBox(
                                height: 8,
                              ),
                              Container(
                                decoration: BoxDecoration(
                                  borderRadius:
                                  BorderRadius.all(Radius.circular(100)),
                                  boxShadow: [
                                    BoxShadow(
                                      color: COLOR_BROWN.withOpacity(0.5),
                                      spreadRadius: 8,
                                      blurRadius: 7,
                                    ),
                                  ],
                                ),
                                child: CircleAvatar(
                                  backgroundImage: NetworkImage(
                                      "https://www.inquisitr.com/wp-content/uploads/2019/12/florence-pugh.jpg"),
                                  radius: 55,
                                ),
                              ),
                              Padding(
                                padding: EdgeInsets.only(top: 15),
                                child: Text("Florence",
                                    style: GoogleFonts.poppins(
                                      fontWeight: FontWeight.w600,
                                      fontSize: 15,
                                      color: COLOR_BLACK,
                                    )),
                              ),
                              Text("20",
                                  style: GoogleFonts.poppins(
                                    fontWeight: FontWeight.w600,
                                    fontSize: 15,
                                    color: COLOR_GREEN,
                                  )),
                            ],
                          ),
                        ),
                      ),
                    ),
                    Padding(
                      padding: EdgeInsets.only(top: 50, right: 175),
                      child: Center(
                        child: Container(
                          child: Column(
                            mainAxisAlignment: MainAxisAlignment.center,
                            children: [
                              Text("2",
                                  style: GoogleFonts.poppins(
                                      fontSize: 17, fontWeight: FontWeight.w800)),
                              SizedBox(
                                height: 8,
                              ),
                              Container(
                                decoration: BoxDecoration(
                                  borderRadius:
                                  BorderRadius.all(Radius.circular(100)),
                                  boxShadow: [
                                    BoxShadow(
                                      color: COLOR_BROWN.withOpacity(0.5),
                                      spreadRadius: 8,
                                      blurRadius: 7,
                                    ),
                                  ],
                                ),
                                child: CircleAvatar(
                                  backgroundImage: NetworkImage(
                                      "https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3A%2F%2Fstatic.onecms.io%2Fwp-content%2Fuploads%2Fsites%2F6%2F2019%2F07%2Fsimon-liu-2000.jpg"),
                                  radius: 55,
                                ),
                              ),
                              Padding(
                                padding: EdgeInsets.only(top: 15),
                                child: Text("Simu",
                                    style: GoogleFonts.poppins(
                                      fontWeight: FontWeight.w600,
                                      fontSize: 15,
                                      color: COLOR_BLACK,
                                    )),
                              ),
                              Text("48",
                                  style: GoogleFonts.poppins(
                                    fontWeight: FontWeight.w600,
                                    fontSize: 15,
                                    color: COLOR_GREEN,
                                  )),
                            ],
                          ),
                        ),
                      ),
                    ),
                    Center(
                      child: Container(
                        child: Column(
                          mainAxisAlignment: MainAxisAlignment.center,
                          children: [
                            Image.asset(
                              "assets/images/crown.png",
                              height: 35,
                              width: 35,
                            ),
                            SizedBox(
                              height: 8,
                            ),
                            Material(
                              borderRadius:
                              BorderRadius.all(Radius.circular(100)),
                              elevation: 2,
                              child: Container(
                                decoration: BoxDecoration(
                                  borderRadius:
                                  BorderRadius.all(Radius.circular(100)),
                                  boxShadow: [
                                    BoxShadow(
                                      color: COLOR_GREEN.withOpacity(0.5),
                                      spreadRadius: 8,
                                      blurRadius: 7,
                                    ),
                                  ],
                                ),
                                child: CircleAvatar(
                                  backgroundImage: NetworkImage(
                                      "https://imagesvc.meredithcorp.io/v3/mm/image?q=85&c=sc&rect=255%2C0%2C1875%2C1080&poi=face&w=1920&h=1280&url=https%3A%2F%2Fstatic.onecms.io%2Fwp-content%2Fuploads%2Fsites%2F20%2F2021%2F09%2F13%2FJack-Harlow-chicken-shop-date.jpg"),
                                  radius: 60,
                                ),
                              ),
                            ),
                            Padding(
                              padding: EdgeInsets.only(top: 15),
                              child: Text("Jack",
                                  style: GoogleFonts.poppins(
                                    fontWeight: FontWeight.w600,
                                    fontSize: 15,
                                    color: COLOR_BLACK,
                                  )),
                            ),
                            Text("52",
                                style: GoogleFonts.poppins(
                                  fontWeight: FontWeight.w600,
                                  fontSize: 15,
                                  color: COLOR_GREEN,
                                )),
                          ],
                        ),
                      ),
                    ),
                  ],
                ),
                Padding(
                  padding: EdgeInsets.only(left: 22, top: 10),
                  child: Align(
                    alignment: Alignment.centerLeft,
                    child: Text(
                      "Runner-Ups",
                      style: GoogleFonts.poppins(
                        fontWeight: FontWeight.w600,
                        fontSize: 18,
                        color: COLOR_BLACK,
                      ),
                    ),
                  ),
                ),
                Column(
                  children: [
                    PlayerStatistc(
                      placement: "4",
                      name: "Raj Bhawlaser",
                      hours: "15",
                      imageUrl:
                      "https://images.unsplash.com/photo-1500648767791-00dcc994a43e?ixid=MnwxMjA3fDB8MHxzZWFyY2h8Mnx8cmFuZG9tJTIwcGVvcGxlfGVufDB8fDB8fA%3D%3D&ixlib=rb-1.2.1&w=1000&q=80",
                    ),
                    PlayerStatistc(
                      placement: "5",
                      name: "Bob Dylan",
                      hours: "13",
                      imageUrl:
                      "https://cdn4.pitchfork.com/longform/1005/BobDylan.jpg",
                    ),
                    PlayerStatistc(
                      placement: "6",
                      name: "Barack Obama",
                      hours: "11",
                      imageUrl:
                      "https://ca-times.brightspotcdn.com/dims4/default/bec99d7/2147483647/strip/true/crop/2000x2706+0+0/resize/840x1137!/quality/90/?url=https%3A%2F%2Fcalifornia-times-brightspot.s3.amazonaws.com%2Fff%2F2c%2Fdedf568e4af087cab5f0a5c76f32%2Fla-ca-bk-a-promised-land-barack-obama-183.JPG",
                    ),
                  ],
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

其他排查点

如果修改后还有白边,检查两个位置:

  • 根MaterialApp的builder属性是否全局添加了padding,或者重写了MediaQuery增加了边距
  • 安卓原生项目的android/app/src/main/res/values/styles.xml中是否配置了窗口边距,确保使用的是全屏主题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:36:05