在小部件的代码中,我需要在Android / iOS上分支以显示特定于每个平台的小部件,并调用特定于平台的API(例如,Android小部件将调用仅适用于Android的API)。
if (Platform.isAndroid) {
return WidgetAndroid(...);
} else if (Platform.isIOS) {
return WidgetIOS(...);
}
如何使用Flutter小部件测试来测试显示正确的小部件?
我知道我可以检查该小部件是否存在,但是如何在特定平台上运行测试。
expect(find.byType(WidgetIOS), findsOneWidget);
答案 0 :(得分:1)
Platform.isAndroid
和Platform.isIOS
在运行false
时均返回testWidgets
。
我们可以在测试中应用的一些建议:
else
的情况下测试if
,以便在测试期间运行。Platform
,该方法可以进行模拟,这可能是最好的长期解决方案。答案 1 :(得分:0)
就像Miguel提到的那样,您不能直接嘲笑它。
如果使用provider框架,则可以在测试中使用依赖项注入来实现此目的,而无需在窗口小部件中暴露其他参数。
创建一个用于注入的类:
class PlatformInfo {
final bool isIos;
final bool isAndroid;
PlatformInfo({@required this.isAndroid,@required this.isIos});
}
在顶级MultiProvider
小部件中,设置提供商绑定:
Provider<PlatformInfo>.value(
value: PlatformInfo(isAndroid: Platform.isAndroid, isIos: Platform.isIOS),
),
在小部件中使用它:
Provider.of<PlatformInfo>(context).isIos