• 请不要在回答技术问题时复制粘贴 AI 生成的内容
dai269619118
V2EX  ›  程序员

flutter 项目在小米 Pad 分屏的时候会直接白屏

  •  
  •   dai269619118 · Jun 23, 2025 · 3225 views
    This topic created in 324 days ago, the information mentioned may be changed or developed.

    有用户反馈小米在应用分屏的时候会白屏。

    就买了一个设备做测试。

    开始测试的时候发现有些页面正常,有些是白屏。

    后面找到了原因:

    return Scaffold(
      appBar: AppBar(
        title: Text('Account'),
      ),
      backgroundColor: Theme.of(context).colorScheme.surfaceVariant,
      body: Text('Account'),
    );
    

    只要存在 appBar ,在分屏的时候就会白屏。

    原本以为是我产品使用了大量组件是不是有其他兼容的问题

    直接重新创建一个新的 flutter 项目,demo 里只要存在 appBar 也是白屏。

    这么重要的组件小米竟然有兼容问题,有点离谱...

    网上搜了下解决方案 要对每个文件加兼容代码,也没继续尝试。

    这样每写一个组件都要加这个兼容代码 这也太恶心了。

    不知道大家有没有好的解决方案。

    Supplement 1  ·  Jun 23, 2025
    flutter 3.2
    Pad 设备是 Xiaomi Pad 7Pro
    系统版本:2.0.202.0
    Supplement 2  ·  Jun 23, 2025
    还有一台红米 Xiaomi Pad 6
    系统最新版本:2.0.9.0
    这个设备下是正常的
    Supplement 3  ·  Jun 23, 2025
    这是一个非常基础的组件
    appabr 几乎每个页面都会用到
    在大部分设备下没兼容问题,更不要提原生安卓了
    小米部分系统版本下跑不起来
    那我觉得是小米系统的问题
    Supplement 4  ·  Mar 9
    MIUI 小窗口白屏的根本原因:

    小窗口模式下,系统仍然把状态栏高度( MediaQuery.padding.top )报告为正常值(比如 28dp ),但小窗口本身可能只有 80~100dp 高。Flutter 的 Scaffold 用这个 padding 来计算 AppBar 的位置,导致内容区高度变为负数或接近 0 ,页面就白屏了。

    修复方式

    在 MaterialApp 的 builder 里拦截 MediaQuery ,当检测到 padding.top >= 窗口高度 * 40% 时(正常全屏不可能,只有小窗口才会触发),强制把 padding.top 清零,AppBar 就能正常渲染了:


    builder: (context, child) {
    final mq = MediaQuery.of(context);
    final windowHeight = mq.size.height;
    final statusBarHeight = mq.padding.top;
    if (statusBarHeight > 0 && statusBarHeight >= windowHeight * 0.4) {
    return MediaQuery(
    data: mq.copyWith(
    padding: mq.padding.copyWith(top: 0),
    viewPadding: mq.viewPadding.copyWith(top: 0),
    ),
    child: child!,
    );
    }
    return child!;
    },

    这是 cluade code 帮我写的处理方案 实测可以解决 xiaomi pad 上的问题
    19 replies    2025-07-23 12:07:11 +08:00
    anbabubabiluya
        1
    anbabubabiluya  
       Jun 23, 2025
    我这有的 flutter 应用是小窗白屏,但是分屏正常,更新系统后就这样了,上一个系统版本是正常的,应该是小米系统的问题
    murmur
        2
    murmur  
       Jun 23, 2025
    这就奇怪了,flutter 就是个 canvas ,小米怎么兼容啊,要是 rn 还可以怪一下小米
    irrigate2554
        3
    irrigate2554  
       Jun 23, 2025
    给 flutter 官方和小米官方都提交一下 bug 吧
    dai269619118
        4
    dai269619118  
    OP
       Jun 23, 2025
    @anbabubabiluya 是的 老版本不会 好像是 flutter 的 ui 更新到 m3 之后出现的
    dai269619118
        5
    dai269619118  
    OP
       Jun 23, 2025
    @irrigate2554 嗯嗯 我去反馈下
    DiamondYuan
        6
    DiamondYuan  
       Jun 23, 2025
    是不是可以设置 app 不允许分屏? 这样 bug 就不会出现了
    Gilfoyle26
        7
    Gilfoyle26  
       Jun 23, 2025
    《要对每个文件加兼容代码》那还不如写原生了
    aaronzhang404
        8
    aaronzhang404  
       Jun 23, 2025
    小米 15pro
    2.0.206
    flutter 3.27.2
    复现

    如果是小米的骁龙 elite ,flutter 使用 Impeller‌会出现渲染问题,需要改回 skia 。VIVO 的 elite 没有问题。
    duanxianze
        9
    duanxianze  
       Jun 23, 2025
    赞同 2 楼,这玩意小米要怎么兼容啊
    realpg
        10
    realpg  
    PRO
       Jun 23, 2025
    @murmur #2
    @duanxianze #9
    遇事不决先喷小米就是政治正确嘛...
    别的厂怎么不出问题.jpg
    NoManPlay
        11
    NoManPlay  
       Jun 23, 2025
    想起来前几天看的 小米看海绵宝宝导致死机,最后是底层 api 的问题
    https://www.bilibili.com/video/BV1c5NxzqEpa
    dai269619118
        12
    dai269619118  
    OP
       Jun 23, 2025
    @duanxianze
    @realpg
    @NoManPlay
    不知道你们做过 flutter 开发没
    这是一个非常基础的组件
    appabr 几乎每个页面都会用到
    在大部分设备下没兼容问题,更不要提原生安卓了
    小米部分系统版本下跑不起来
    那我觉得是小米系统的问题
    这逻辑应该没问题
    WebKit
        14
    WebKit  
       Jun 23, 2025
    这个就很奇怪。flutter 按理说 手机系统是不需要做任何兼容的。flutter 是完全自绘制 UI 的。感觉应该是使用了 Impeller‌ 造成的。不如回退到 skia 试试
    v2demo
        15
    v2demo  
       Jun 23, 2025
    在 android 项目里面集成下 androidx.window:window:x.x.x 试试
    qianxaingmoli
        16
    qianxaingmoli  
       Jun 23, 2025
    dai269619118
        17
    dai269619118  
    OP
       Jun 23, 2025
    @qianxaingmoli
    @xkeyC 他遇到的问题 和我的很像 应该是属于同一类问题
    dai269619118
        18
    dai269619118  
    OP
       Jun 23, 2025
    @v2demo 谢谢 我去加下试试看
    andyzhshg
        19
    andyzhshg  
       Jul 23, 2025
    遇到了同样的问题,而且我没有小米的设备,是用户报过来的,连测试都没法测,头疼...
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1175 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 77ms · UTC 23:30 · PVG 07:30 · LAX 16:30 · JFK 19:30
    ♥ Do have faith in what you're doing.