You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 12:57:28