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

小米HyperOS 2悬浮窗中Flutter应用加尺寸约束后白屏问题咨询

Flutter应用在HyperOS 2悬浮窗模式下添加尺寸约束后白屏问题

在搭载HyperOS 2的小米Redmi K80 Pro设备上运行Flutter应用时,出现持续性白屏问题:当给应用根组件添加尺寸约束(如使用带MediaQuery派生尺寸或固定值的SizedBox),应用在悬浮窗模式下会完全白屏;无约束时显示正常,全屏模式下也可正常运行。

代码示例

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: SizedBox(
          width: 100,
          height: 100,
          child: Center(
            child: Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

观察到的行为

  • 全屏模式下应用运行无异常;
  • 悬浮窗模式下添加尺寸约束后UI完全空白;
  • 日志中重复出现VRI.reportNextDraw和Surface错误,提示窗口resize时存在渲染问题,日志片段如下:
E/BinderMonitor( 7845): err open binder_delay errno=13
W/ample.untitled6( 7845): type=1400 audit(0.0:248188): avc:  denied  { write } for  name="binder_delay" dev="proc" ino=4026533067 scontext=u:r:untrusted_app:s0:c11,c258,c512,c768 tcontext=u:object_r:proc_mi_log:s0 tclass=file permissive=0 app=com.example.untitled6
D/VRI[MainActivity]( 7845): vri.reportNextDraw android.view.ViewRootImpl.handleResized:2768 android.view.ViewRootImpl.-$$Nest$mhandleResized:0 android.view.ViewRootImpl$W.resized:12716 android.app.servertransaction.WindowStateResizeItem.execute:64 android.app.servertransaction.WindowStateTransactionItem.execute:59 
D/VRI[MainActivity]( 7845): vri.reportNextDraw android.view.ViewRootImpl.performTraversals:4936 android.view.ViewRootImpl.doTraversal:3547 android.view.ViewRootImpl$TraversalRunnable.run:11558 android.view.Choreographer$CallbackRecord.run:1747 android.view.Choreographer$CallbackRecord.run:1756 
D/VRI[MainActivity]( 7845): vri.Setup new sync=wmsSync-VRI[MainActivity]#5
D/VRI[MainActivity]( 7845): vri.reportDrawFinished
E/Surface ( 7845): freeAllBuffers: 1 buffers were freed while being dequeued!
I/HandWritingStubImpl( 7845): refreshLastKeyboardType: 1
I/HandWritingStubImpl( 7845): getCurrentKeyboardType: 1
I/ample.untitled6( 7845): ProcessProfilingInfo new_methods=19 is saved saved_to_disk=1 resolve_classes_delay=8000
D/VRI[MainActivity]( 7845): vri.reportNextDraw android.view.ViewRootImpl.handleResized:2768 android.view.ViewRootImpl.-$$Nest$mhandleResized:0 android.view.ViewRootImpl$W.resized:12716 android.app.servertransaction.WindowStateResizeItem.execute:64 android.app.servertransaction.WindowStateTransactionItem.execute:59 
D/VRI[MainActivity]( 7845): vri.Setup new sync=wmsSync-VRI[MainActivity]#7
D/VRI[MainActivity]( 7845): vri.reportDrawFinished
D/VRI[MainActivity]( 7845): vri.reportNextDraw android.view.ViewRootImpl.handleResized:2768 android.view.ViewRootImpl.-$$Nest$mhandleResized:0 android.view.ViewRootImpl$W.resized:12716 android.app.servertransaction.WindowStateResizeItem.execute:64 android.app.servertransaction.WindowStateTransactionItem.execute:59 
D/VRI[MainActivity]( 7845): vri.Setup new sync=wmsSync-VRI[MainActivity]#9
D/VRI[MainActivity]( 7845): vri.reportDrawFinished
I/HandWritingStubImpl( 7845): refreshLastKeyboardType: 1
I/HandWritingStubImpl( 7845): getCurrentKeyboardType: 1
D/VRI[MainActivity]( 7845): vri.reportNextDraw android.view.ViewRootImpl.handleResized:2768 android.view.ViewRootImpl.-$$Nest$mhandleResized:0 android.view.ViewRootImpl$W.resized:12716 android.app.servertransaction.WindowStateResizeItem.execute:64 android.app.servertransaction.WindowStateTransactionItem.execute:59 
D/VRI[MainActivity]( 7845): vri.reportNextDraw android.view.ViewRootImpl.performTraversals:4936 android.view.ViewRootImpl.doTraversal:3547 android.view.ViewRootImpl$TraversalRunnable.run:11558 android.view.Choreographer$CallbackRecord.run:1747 android.view.Choreographer$CallbackRecord.run:1756 
D/VRI[MainActivity]( 7845): vri.Setup new sync=wmsSync-VRI[MainActivity]#12
D/VRI[MainActivity]( 7845): vri.reportDrawFinished
E/Surface ( 7845): freeAllBuffers: 1 buffers were freed while being dequeued! 

设备/环境

  • 系统:小米HyperOS 2(具体版本未知,日志提及freeform缩放逻辑);
  • Flutter版本:稳定通道(从代码结构推断);
  • 复现性:重启应用或设备后问题仍持续。

已尝试的排查操作

  1. 使用固定值(如width:300)替代MediaQuery,问题依旧;
  2. 验证Flutter组件树结构,布局调试无错误;
  3. 尝试开启debugRepaintRainbowEnabled强制软件渲染,无改善。

咨询问题

  1. 这是否是HyperOS 2与Flutter布局系统在多窗口模式下的已知兼容问题?
  2. 针对悬浮窗中的尺寸约束,是否有替代组件、平台配置等解决方案?
  3. 该问题是否与HyperOS的freeform窗口栈管理有关(日志中有所体现)?

补充说明:有屏幕录制演示该问题。因日程紧张,可能无法及时回复,感谢理解与支持!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 05:04:58