Flutter Widget测试抛出WindowsException 0x00000000问题求助
Flutter Widget测试抛出WindowsException(0x00000000)的解决思路
问题场景
在Widget测试中使用ChangeNotifierProvider包裹MaterialApp和Page组件,Page内部通过Consumer监听PageViewModel,执行测试时抛出WindowsException: Error 0x00000000: The operation completed successfully.
测试代码:
await tester.pumpWidget( ChangeNotifierProvider<PageViewModel>( create: (_) => PageViewModel(), child: MaterialApp( home: Scaffold( body: Page(), ), ), ), );
Page组件核心代码:
return Consumer<PageViewModel>( builder: (context, model, child) => Scaffold() );
可能的解决步骤
排查PageViewModel中的平台相关代码:测试环境是纯Dart虚拟机,不支持原生平台调用(比如Windows API、平台通道MethodChannel)。如果
PageViewModel初始化或内部逻辑中包含这类代码,会触发这种异常。建议在测试时mock掉平台相关依赖,或者将平台逻辑抽离到单独的类中,测试时替换为模拟实现。调整Provider层级:将
ChangeNotifierProvider移到MaterialApp内部,避免上下文传递问题:await tester.pumpWidget( MaterialApp( home: ChangeNotifierProvider<PageViewModel>( create: (_) => PageViewModel(), child: Scaffold( body: Page(), ), ), ), );确保测试完成异步操作:在
pumpWidget后调用tester.pumpAndSettle(),等待所有帧和异步任务完成:await tester.pumpWidget(...); await tester.pumpAndSettle();检查代码语法和Provider版本:确认
Consumer的builder函数语法完整(比如结尾的分号、逗号),同时升级provider包到最新稳定版,旧版本可能存在测试环境的兼容性问题。更换测试运行环境:如果是Windows平台本地测试出现问题,尝试在其他平台(如macOS、Linux)运行测试,或者使用CI环境的测试镜像,排查是否是本地环境的配置问题。
内容的提问来源于stack exchange,提问作者MDias
相关产品推荐
相关产品推荐

