Flutter报错:调用非const构造函数时使用const修饰符
问题解决:构造函数非const导致的TabBarView子组件报错
错误原因分析
你在const修饰的TabBarView的children列表中调用UserThreads(scrollController: _scrollController),触发错误的核心原因:
UserThreads的构造函数未声明为const构造;ScrollController是运行时可变对象,根本无法作为const构造的参数(const构造要求所有参数必须是编译时常量);- 你的
UserThreads构造函数本身存在语法错误,参数初始化写法不正确。
分步解决方案
1. 修正UserThreads的构造函数语法错误
原代码中构造函数的参数初始化写法错误,需用this.scrollController绑定类成员变量,同时建议显式声明参数类型避免dynamic隐患:
class UserThreads extends StatefulWidget { final ScrollController scrollController; // 修正后的构造函数 UserThreads({ required this.scrollController, }); @override State<UserThreads> createState() => _UserThreadsState(); }
2. 移除TabBarView的const修饰
由于_scrollController是运行时创建的可变对象,完全不符合const构造的要求,必须去掉TabBarView的const关键字:
// 错误写法(带const) const TabBarView( children: [ UserThreads(scrollController: _scrollController), // 其他子组件 ], ) // 正确写法(移除const) TabBarView( children: [ UserThreads(scrollController: _scrollController), // 其他子组件 ], )
补充说明
如果需要通过const优化组件性能,只有当所有子组件的构造参数都是编译时常量时才能使用const。但ScrollController属于运行时初始化的对象(通常在initState中创建),完全不满足const构造的条件,因此该场景下必须放弃const修饰。
内容的提问来源于stack exchange,提问作者Cliff Odebala Clarke
相关产品推荐
相关产品推荐

