Flutter Widget测试报错:BuildContext未定义mounted getter如何修复?
BuildContext无mounted getter的错误 环境信息
fvm flutter --version Flutter 3.7.12 • channel stable • https://github.com/flutter/flutter.git Framework • revision 4d9e56e694(3个月前)• 2023-04-17 21:47:46 -0400 Engine • revision 1a65d409c7 Tools • Dart 2.19.6 • DevTools 2.20.1
测试代码
void main() { setupLocator(); const testWidget = MediaQuery( data: MediaQueryData(), child: MaterialApp( home: CommitteeHubView(), ), ); testWidgets("CommitteeHubView", (WidgetTester tester) async { await tester.pumpWidget(testWidget); expect(find.text('Committee Hub'), findsOneWidget); }); }
报错详情
Error: The getter 'mounted' isn't defined for the class 'BuildContext'. rm.dart:2127 - 'BuildContext' is from 'package:flutter/src/widgets/framework.dart' ('../../../../flutter/packages/flutter/lib/src/widgets/framework.dart'). framework.dart:1 Try correcting the name to the name of an existing getter, or defining a getter or field named 'mounted'. _contextSet.last.mounted ? _contextSet.last.findRenderObject() : null; ^^^^^^^
加载测试文件失败:/Users/jaehyuckchoi/Desktop/resvu/untitled folder/communitilink_flutter_app/test/view/committee_hub/committee_hub_view_test.dart:测试文件编译失败
✖ loading /Users/jaehyuckchoi/Desktop/resvu/untitled folder/communitilink_flutter_app/test/view/committee_hub/committee_hub_view_test.dart
Exited (1)
修复方法
原因分析
mounted是Flutter中State类的属性,而Flutter 3.7.x版本中BuildContext本身并没有mounted getter——context.mounted是Flutter 3.10及以上版本才新增的语法糖。报错代码中直接对BuildContext实例调用.mounted,导致编译失败。
具体解决方案
调整代码逻辑,使用
State类的mounted属性
如果_contextSet中存储的是State实例,直接调用_contextSet.last.mounted是正确的;但如果存储的是BuildContext,则需要修改为通过State来判断挂载状态。比如在StatefulWidget的State类内部,直接使用mounted(即this.mounted)即可,无需通过context调用。错误示例:
_contextSet.last.mounted // _contextSet.last是BuildContext实例正确示例(如果是在State类中):
mounted // 直接使用State类的mounted属性升级Flutter版本到3.10+
如果不想修改代码,可以将Flutter升级到3.10或更高版本,该版本新增了BuildContext.mounted的语法糖,直接调用context.mounted即可生效。执行以下命令升级:fvm flutter upgrade检查第三方依赖库
若报错代码来自第三方库,说明该库可能使用了Flutter 3.10+的新特性。此时可以:- 查找该库支持Flutter 3.7.x的兼容版本并降级依赖
- 或者跟随库的要求升级Flutter版本
内容的提问来源于stack exchange,提问作者Jaehyuck Choi

