我的问题是我有一个无状态小部件,它返回AppBar
带有 onPressed 事件的 a。在我相应的 widgetTest 中,我点击组件并期望调用 onPressed 方法。然而,事实并非如此。
这是我的小部件:
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
class IconAppBar extends StatelessWidget with PreferredSizeWidget {
final VoidCallback onPressed;
IconAppBar({this.onPressed});
@override
Widget build(BuildContext context) {
return AppBar(
leading: IconButton(
color: Colors.black,
icon: SvgPicture.asset(
"resources/images/icon.svg",
width: 24,
height: 24,
),
onPressed: onPressed,
),
);
}
@override
Size get preferredSize => Size.fromHeight(kToolbarHeight);
}
在测试中,如果组件被点击,我会通过一个简单的 onPressed 测试来创建小部件。
void main() {
testWidgets("Should run onPressed when tapped",
(WidgetTester tester) async {
var counter = 0;
void callback() {
counter++;
}
await tester.pumpWidget(
MediaQuery(
data: MediaQueryData(),
child: MaterialApp(
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
home: IconAppBar(
onPressed: callback,
),
),
),
);
await tester.pump(Duration(milliseconds: 300));
await tester.tap(find.byType(IconAppBar));
await tester.pump(Duration(milliseconds: 300));
expect(counter, 1); // fails because actual counter is 0
});
}
改变tester.pump()
或tester.pumpAndSettle()
没有改变任何东西。该方法未被调用。
在实际设备或模拟器中运行它,onPressed 按预期工作。
还有一个烟雾测试find.byType(IconAppBar)
确实找到了这个小部件。
我真的很感激任何帮助或想法。谢谢!
编辑:似乎这不适用于IconButton
. 我只是将其更改为以FlatButton
SVG 作为其子级的,这很好。