Flutter开发中在初始化器访问widget变量向User构造传参报错如何解决
错误原因
- 你给
_widgetOptions添加了static修饰符,静态成员属于类本身,初始化阶段State实例还未创建完成,无法访问属于实例的widget属性 - 静态成员初始化时机远早于State的
initState生命周期,此时还未绑定父组件传递的参数,自然无法获取到widget.token的值
解决方案
直接移除_widgetOptions的static修饰符,将列表初始化逻辑移到initState生命周期中即可,修改后的代码参考:
class HomeScreenState extends State<HomeScreen> { int _selectedIndex = 2; static const TextStyle optionStyle = TextStyle(fontSize: 30, fontWeight: FontWeight.bold); // 移除static,添加late修饰做延迟初始化 late List<Widget> _widgetOptions; @override void initState() { super.initState(); // 在initState中初始化列表,此时已经可以正常访问widget属性 _widgetOptions = <Widget>[ User(widget.token), const Profile(), News(), SingleChildScrollView( child: Search(), ), ChartAl('null', 'Line'), ]; } @override Widget build(BuildContext context) { // 原有build逻辑保持不变 } }
如果你的_widgetOptions内容会随其他状态变化,也可以直接把列表构建逻辑放在build方法内部,不需要提前声明成员变量。
内容的提问来源于stack exchange,提问作者partizani
相关产品推荐
相关产品推荐

