Flutter使用ScreenUtilInit报invalid constant value错误求助
解决ScreenUtilInit中builder的"invalid constant value"错误
错误原因
你给ScreenUtilInit添加了const修饰,但builder参数接收的是函数对象,函数无法被编译为常量值,因此触发该错误。
修复步骤
- 移除
ScreenUtilInit前的const:由于它包含非常量的builder参数,不符合常量组件的定义要求。 - 检查
GetMaterialApp的const:如果defaultHome不是常量组件,需要同步移除GetMaterialApp前的const。
修改后的代码
class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return ScreenUtilInit( useInheritedMediaQuery: true, designSize: const Size(375, 812), // Size是常量构造,可保留const minTextAdapt: true, splitScreenMode: true, builder: (context, child){ // 若defaultHome是常量组件,可恢复GetMaterialApp前的const return GetMaterialApp( debugShowCheckedModeBanner: false, title: "JobMon", theme: ThemeData( scaffoldBackgroundColor: kLight, iconTheme: IconThemeData(color: kDark), primaryColor: Colors.grey, ), home: defaultHome, ); }, ); } }
补充说明
Flutter中,只有当组件的所有参数都是常量类型(比如数字、字符串、常量构造的对象)时,才能用const修饰组件。builder是动态生成的函数,不属于常量范畴,所以外层ScreenUtilInit不能加const。如果defaultHome是用const声明的组件,GetMaterialApp前的const可以保留。
内容的提问来源于stack exchange,提问作者Samuel Oshio
相关产品推荐
相关产品推荐

