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

Flutter Dart项目运行报错context undefined 新手开发求助

错误原因

你的selectCategory是类的成员方法,方法内部直接访问的context既不是类的成员变量,也没有作为参数传入该方法,因此触发未定义错误。build方法的context参数仅在build方法的作用域内有效,无法直接在类的其他成员方法中访问。

解决方案

方案1:给自定义方法传入context参数

修改selectCategory的方法定义,调用时传入build作用域内的context即可,修改后完整代码如下:

import 'package:flutter/material.dart';

// Dart规范建议类名使用大驼峰,已帮你修正命名
class CategoryItem extends StatelessWidget {
  final String title;
  final Color color;
  const CategoryItem(this.title, this.color, {super.key});

  // 新增BuildContext类型的参数接收上下文
  void selectCategory(BuildContext context) {
    Navigator.of(context);
    // 后续跳转逻辑可直接在这里补充
  }

  @override
  Widget build(BuildContext context) {
    return InkWell(
      // 调用方法时传入当前build作用域的context
      onTap: () => selectCategory(context),
      splashColor: Theme.of(context).primaryColor,
      borderRadius: BorderRadius.circular(15),
      child: Container(
        padding: const EdgeInsets.all(15),
        child: Text(
          title,
          style: Theme.of(context).textTheme.headline6,
        ),
        decoration: BoxDecoration(
          gradient: LinearGradient(
            colors: [
              color.withOpacity(0.7),
              color,
            ],
            begin: Alignment.topLeft,
            end: Alignment.bottomRight,
          ),
          borderRadius: BorderRadius.circular(15),
        ),
      ),
    );
  }
}

方案2:逻辑直接写在onTap匿名函数中

如果跳转逻辑比较短,不需要单独抽方法,可以直接在onTap回调中处理,不需要额外定义方法:

onTap: () {
  Navigator.of(context);
  // 直接补充跳转逻辑即可
},

常见误区说明

你提到导师写同样的代码可以正常运行,大概率是他的代码用的是StatefulWidget,State类本身自带context成员变量,类内所有方法都可以直接访问,而你当前用的是StatelessWidget,没有自带的context成员,必须手动传递。

内容的提问来源于stack exchange,提问作者Pradeep L

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:00:05