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

Flutter集成测试中如何判断当前处于指定页面?

Flutter集成测试:判断当前页面(HomePage/OnBoardingPage)

你已经给两个页面设置了唯一Key,接下来直接通过expect断言结合findsOneWidget/findsNothing就能判断当前显示的是哪个页面。

核心实现逻辑

通过你定义的homePageFinder和onBoardingFinder,用断言验证目标页面是否存在:

  • 如果页面存在,用expect(finder, findsOneWidget)
  • 如果页面不存在,用expect(finder, findsNothing)

完整测试示例

测试未登录场景(进入引导页)

testWidgets('未登录时进入引导页', (tester) async {
  // 先模拟未登录状态(根据你的登录逻辑处理,比如清空本地登录缓存)
  // 示例:await SharedPreferences.getInstance().then((prefs) => prefs.clear());

  app.main();
  await tester.pumpAndSettle();

  final homePageFinder = find.byKey(const Key("homePage"));
  final onBoardingFinder = find.byKey(const Key("onBoarding"));

  // 断言引导页存在,首页不存在
  expect(onBoardingFinder, findsOneWidget);
  expect(homePageFinder, findsNothing);
});

测试已登录场景(进入首页)

testWidgets('已登录时进入首页', (tester) async {
  // 先模拟已登录状态(根据你的登录逻辑处理,比如设置登录标记)
  // 示例:await SharedPreferences.getInstance().then((prefs) => prefs.setBool('isLoggedIn', true));

  app.main();
  await tester.pumpAndSettle();

  final homePageFinder = find.byKey(const Key("homePage"));
  final onBoardingFinder = find.byKey(const Key("onBoarding"));

  // 断言首页存在,引导页不存在
  expect(homePageFinder, findsOneWidget);
  expect(onBoardingFinder, findsNothing);
});

注意事项

  • 确保页面的根Widget确实设置了对应的Key,比如HomePage的根组件要加Key("homePage"),OnBoardingPage同理
  • await tester.pumpAndSettle()必须调用,它会等待页面渲染完成、路由动画结束,避免异步加载导致判断出错
  • 模拟登录状态的代码要和你的业务逻辑匹配,比如用SharedPreferences、Hive或其他状态管理工具来设置登录标记

内容的提问来源于stack exchange,提问作者Ardeshir ojan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 04:44:51