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
相关产品推荐
相关产品推荐

