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

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

  •  
  •   dai269619118 · Jun 23, 2025 · 3990 views
    This topic created in 505 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
    anbabubabiluya
    Jun 23, 2025
    1
    我这有的 flutter 应用是小窗白屏,但是分屏正常,更新系统后就这样了,上一个系统版本是正常的,应该是小米系统的问题
    murmur
    murmur
    Jun 23, 2025
    2
    这就奇怪了,flutter 就是个 canvas ,小米怎么兼容啊,要是 rn 还可以怪一下小米
    irrigate2554
    irrigate2554
    Jun 23, 2025
    3
    给 flutter 官方和小米官方都提交一下 bug 吧
    dai269619118
    dai269619118
    OP
    Jun 23, 2025
    4
    @anbabubabiluya 是的 老版本不会 好像是 flutter 的 ui 更新到 m3 之后出现的
    dai269619118
    dai269619118
    OP
    Jun 23, 2025
    5
    @irrigate2554 嗯嗯 我去反馈下
    DiamondYuan
    DiamondYuan
    Jun 23, 2025
    6
    是不是可以设置 app 不允许分屏? 这样 bug 就不会出现了
    Gilfoyle26
    Gilfoyle26
    Jun 23, 2025
    7
    《要对每个文件加兼容代码》那还不如写原生了
    aaronzhang404
    aaronzhang404
    Jun 23, 2025
    8
    小米 15pro
    2.0.206
    flutter 3.27.2
    复现

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