Flutter报错:实例成员'user'无法在初始化器中访问,该如何解决?
问题原因
Dart 类的实例属性初始化阶段,实例成员还未完成创建赋值,因此不能在声明属性时直接引用其他实例成员作为初始化值。你当前的代码触发报错的两个核心点:
screens列表在声明时直接初始化,尝试引用还未完成赋值的user成员- 你声明的
late User user没有做赋值关联,需要绑定父组件传入的widget.user参数
解决方法
将 screens 的初始化放到 State 的 initState 生命周期中执行即可,这个阶段 State 已经完成挂载,可以正常访问实例成员和父组件传入的参数:
class MainScreen extends StatefulWidget { final User user; MainScreen({Key? key, required this.user}) : super(key: key); @override State createState() => _HomeState(); } class _HomeState extends State<MainScreen> { int currentIndex = 0; // 先声明screens,暂不初始化 late List<Widget> screens; @override void initState() { super.initState(); // 初始化screens列表,直接引用父组件传入的user参数 screens = [ HomeScreen(user: widget.user), Map(), Photo(), Notifications(), Profile() ]; } @override Widget build(BuildContext context) { return Scaffold( body: screens[currentIndex], bottomNavigationBar: ConvexAppBar( backgroundColor: Colors.amber, initialActiveIndex: 2, items: const [ TabItem(icon: Icons.home,title: 'Home'), TabItem(icon: Icons.map, title: 'Map'), TabItem(icon: Icons.photo_camera_rounded, title: 'Photo'), TabItem(icon: Icons.notifications, title: 'Notification'), TabItem(icon: Icons.account_circle_rounded, title: 'Profile'), ], onTap: (index) => setState(() { currentIndex = index; }), ), ); } }
内容的提问来源于stack exchange,提问作者Lorenzo Cutrupi
相关产品推荐
相关产品推荐

