Flutter报错Undefined name 'context',ChangeNotifier类中context为何未定义?
错误原因分析
ZmienneClass 是继承自 ChangeNotifier 的业务逻辑类,不属于 Flutter Widget 树的组成部分,本身不会默认持有 BuildContext 实例。你在 decrementCounter 方法中直接使用的 context 没有提前声明或从外部传入,因此会报未定义错误。
BuildContext 本质是 Widget 在 Widget 树中的位置标记,只有 Widget 本身及对应 State 类会天生持有自身对应的 BuildContext 实例,非 Widget 类使用时必须从外部传入。
修复方案
最简单的实现方式是将 BuildContext 作为方法参数传入:
- 修改
decrementCounter方法定义,新增BuildContext入参
class ZmienneClass extends ChangeNotifier { void decrementCounter(int liczba, BuildContext context) { if (_rundy == 0) { Navigator.push(context, MaterialPageRoute(builder: (context) => resGamePage(title: ""))); } } }
- 在 Widget 中调用该方法时,传入当前 Widget 对应的
context
// StatefulWidget 中调用示例 @override Widget build(BuildContext context) { return ElevatedButton( onPressed: () { // 调用时传入当前上下文 zmienneClass.decrementCounter(1, context); }, child: const Text("执行操作") ); }
注意事项
- 不要在逻辑类中长期存储
BuildContext引用,避免 Widget 销毁后上下文失效引发崩溃 - 如果调用方法前有异步操作,需要先判断当前 Widget 是否仍处于挂载状态,再操作上下文:
onPressed: () async { await someAsyncTask(); // mounted 是 State 类的内置属性,仅 State 类可直接访问 if (!mounted) return; zmienneClass.decrementCounter(1, context); }
内容的提问来源于stack exchange,提问作者Malak
相关产品推荐
相关产品推荐

