Flutter设置全屏时main.dart调用SystemChrome触发system_chrome.dart报错如何解决?
问题原因
报错的核心原因是在main函数中执行SystemChrome.setEnabledSystemUIMode时,Flutter框架的WidgetsBinding尚未完成初始化,用于和原生侧通信的MethodChannel还未准备就绪,直接调用原生通道方法就会触发断言错误。
解决方案
只需要在调用SystemChrome相关方法前,先调用WidgetsFlutterBinding.ensureInitialized()完成框架初始化绑定即可,修改后的main.dart代码如下:
import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; void main() { // 先完成Flutter框架绑定初始化 WidgetsFlutterBinding.ensureInitialized(); SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: []); runApp(const MyApp()); }
补充说明
- 该方案是全局生效的,不需要在每个页面的build方法重复调用相同代码,也能避免build方法重复执行时多次触发系统UI设置的冗余操作
- 如果需要适配不同Android版本的沉浸式效果,也可以替换为
SystemUiMode.edgeToEdge模式,同时配合系统导航栏/状态栏颜色设置实现更适配的全屏效果
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

