向Widget传递类参数时出现eventId未定义错误
问题:Flutter传递StatefulWidget必填参数时出现“未定义名称eventId”错误
在尝试将类的必填参数eventId传递给Widget时,遇到了“未定义名称eventId”的错误,请问如何正确传递eventId以在Widget中使用?
错误代码示例:
class EventDetailPageFirebaseQuery extends StatefulWidget { const EventDetailPageFirebaseQuery({super.key, required this.eventId}); final String eventId; @override _EventDetailPageFirebaseQueryState createState() => _EventDetailPageFirebaseQueryState(); } class _EventDetailPageFirebaseQueryState extends State<EventDetailPageFirebaseQuery> { List dataList = []; @override Widget build(BuildContext context) { return Scaffold( body: FutureBuilder( future: FireStoreDataBase().getEventData(eventId: eventId), builder: (context, snapshot) { if (snapshot.hasError) { return const Text( "Something went wrong", ); } if (snapshot.connectionState == ConnectionState.done) { dataList = snapshot.data as List; return buildEventScreen(event: dataList, context); } return const Center(child: CircularProgressIndicator()); }, ), ); } }
错误说明:
代码中直接使用的eventId未被识别,报错提示“Undefined name 'eventId'”。
解决方法
在Flutter的State类中,要访问对应StatefulWidget的成员变量,必须通过widget对象获取。只需把代码中直接使用的eventId替换为widget.eventId即可。
修正后的代码:
class EventDetailPageFirebaseQuery extends StatefulWidget { const EventDetailPageFirebaseQuery({super.key, required this.eventId}); final String eventId; @override _EventDetailPageFirebaseQueryState createState() => _EventDetailPageFirebaseQueryState(); } class _EventDetailPageFirebaseQueryState extends State<EventDetailPageFirebaseQuery> { List dataList = []; @override Widget build(BuildContext context) { return Scaffold( body: FutureBuilder( // 替换为widget.eventId future: FireStoreDataBase().getEventData(eventId: widget.eventId), builder: (context, snapshot) { if (snapshot.hasError) { return const Text( "Something went wrong", ); } if (snapshot.connectionState == ConnectionState.done) { dataList = snapshot.data as List; return buildEventScreen(event: dataList, context); } return const Center(child: CircularProgressIndicator()); }, ), ); } }
原理说明:
EventDetailPageFirebaseQuery作为StatefulWidget,其成员变量eventId属于Widget实例;- 对应的
_EventDetailPageFirebaseQueryState类通过widget属性持有该Widget实例的引用,因此可以通过widget.eventId访问到这个必填参数。
内容的提问来源于stack exchange,提问作者user237462
相关产品推荐
相关产品推荐

