Flutter测试WillPopScope(带返回按钮)

daolsyd0  于 2023-05-30  发布在  Flutter
关注(0)|答案(4)|浏览(169)

在我的主页小部件,当用户点击系统返回按钮,它显示由WillPopScope确认对话框小部件.我想测试这个对话框,但我不知道如何按下测试文件上的后退按钮。

kmpatx3s

kmpatx3s1#

我也遇到了同样的问题,但我的应用程序中没有后退按钮。我想测试一下android系统的后退按钮。我就是这么做的。也许这对遇到和我一样问题的人有帮助。

testWidgets("test onWillPop",(WidgetTester tester) async {
    bool willPopCalled = false;
    await tester.pumpWidget(
      MaterialApp(
        home: Scaffold(
          body: WillPopScope(
            onWillPop: () async {
              willPopCalled = true;
              return false;
            },
            child: Container(),
          ),
        ),
      ),
    );

    final dynamic widgetsAppState = tester.state(find.byType(WidgetsApp));
    await widgetsAppState.didPopRoute();
    await tester.pump();

    expect(willPopCalled, true);
});

灵感来源:https://github.com/flutter/flutter/blob/master/packages/flutter/test/material/will_pop_test.dart

whlutmcx

whlutmcx2#

我不知道如何在测试文件上按后退按钮。
这将帮助您在appbar(应用程序的顶部)上看到返回按钮。它将允许您通过appbar看到返回按钮

return WillPopScope(
  onWillPop: _onWillPop,
  child: Scaffold(
    appBar: AppBar(
      title: Text("Title"),
      centerTitle: true,
      leading: IconButton(
        icon: Icon(Icons.arrow_back, color: Colors.black),
        onPressed: () => _onWillPop(),
      ),
    ),
    body: Body(),
  ),
);

_onWillPop将是您的问题的“确认对话框小部件”。

jdzmm42g

jdzmm42g3#

显然,您无法在测试中访问Navigator。所以我的解决方案是在pumped小部件中的某个地方包含BackButton,并像这样弹出页面:

await tester.pumpWidget(MaterialApp(
  home: Scaffold(
    body: Container(
      child: BackButton(),
    ),
  ),
));

...

await tester.pageBack();
chy5wohz

chy5wohz4#

下面的工作对我来说,因为我想一石二鸟,实际上确保返回按钮(这是在AppBar中默认生成的,不是我添加的)也出现了;

final backButton = find.byTooltip('Back');
await tester.tap(backButton);

然后显然只是pumpAndSettle,并测试您的其他屏幕。

相关问题