{"id":13395,"date":"2025-09-10T07:17:03","date_gmt":"2025-09-10T07:17:03","guid":{"rendered":"https:\/\/www.bacancytechnology.com\/qanda\/?p=13395"},"modified":"2025-09-10T07:17:47","modified_gmt":"2025-09-10T07:17:47","slug":"flutter-widget-tests-with-platform-branching","status":"publish","type":"post","link":"https:\/\/www.bacancytechnology.com\/qanda\/flutter\/flutter-widget-tests-with-platform-branching","title":{"rendered":"Flutter Widget Tests with Platform Branching"},"content":{"rendered":"<p>You can <strong>override the platform<\/strong> in your Flutter widget tests by setting<br \/>\ndebugDefaultTargetPlatformOverride before pumping your widget.<\/p>\n<p>Platform.isAndroid \/ Platform.isIOS comes from dart:io, but <strong>Flutter widgets <\/strong>use Theme.of(context).platform (or defaultTargetPlatform) internally \u2014 so for UI branching, you should rely on defaultTargetPlatform instead of Platform.isAndroid to make testing easier.<\/p>\n<h2>Example:<\/h2>\n<h3>Your widget:<\/h3>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"dart\">\r\nimport 'package:flutter\/foundation.dart';\r\nimport 'package:flutter\/material.dart';\r\n\r\nclass PlatformWidget extends StatelessWidget {\r\n  @override\r\n  Widget build(BuildContext context) {\r\n    if (defaultTargetPlatform == TargetPlatform.android) {\r\n      return WidgetAndroid();\r\n    } else if (defaultTargetPlatform == TargetPlatform.iOS) {\r\n      return WidgetIOS();\r\n    }\r\n    return SizedBox();\r\n  }\r\n}\r\nclass WidgetAndroid extends StatelessWidget {\r\n  @override\r\n  Widget build(BuildContext context) =&gt; Text('Android Widget');\r\n}\r\nclass WidgetIOS extends StatelessWidget {\r\n  @override\r\n  Widget build(BuildContext context) =&gt; Text('iOS Widget');\r\n}\r\n<\/pre>\n<h3>Widget test:<\/h3>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"dart\">\r\nimport 'package:flutter\/foundation.dart';\r\nimport 'package:flutter\/material.dart';\r\nimport 'package:flutter_test\/flutter_test.dart';\r\n\r\nvoid main() {\r\n  tearDown(() {\r\n    \/\/ Always reset after test to avoid leaking platform state\r\n    debugDefaultTargetPlatformOverride = null;\r\n  });\r\n\r\n  testWidgets('Shows Android widget on Android', (WidgetTester tester) async {\r\n    debugDefaultTargetPlatformOverride = TargetPlatform.android;\r\n\r\n    await tester.pumpWidget(MaterialApp(home: PlatformWidget()));\r\n\r\n    expect(find.byType(WidgetAndroid), findsOneWidget);\r\n    expect(find.byType(WidgetIOS), findsNothing);\r\n  });\r\n\r\n  testWidgets('Shows iOS widget on iOS', (WidgetTester tester) async {\r\n    debugDefaultTargetPlatformOverride = TargetPlatform.iOS;\r\n\r\n    await tester.pumpWidget(MaterialApp(home: PlatformWidget()));\r\n\r\n    expect(find.byType(WidgetIOS), findsOneWidget);\r\n    expect(find.byType(WidgetAndroid), findsNothing);\r\n  });\r\n}\r\n<\/pre>\n<h2>Key Points:<\/h2>\n<ul>\n<li>Use defaultTargetPlatform instead of Platform.isAndroid for widgets \u2013 it\u2019s easier to override in tests.<\/li>\n<li>In tests, set debugDefaultTargetPlatformOverride = TargetPlatform.android (or iOS) before pumping the widget.<\/li>\n<li>Call debugDefaultTargetPlatformOverride = null; in tearDown() so one test\u2019s platform setting doesn\u2019t affect others.<\/li>\n<li>If you must use Platform.isAndroid for native API calls, keep UI branching on defaultTargetPlatform for testability.<\/li>\n<\/ul>\n<p>This way, your widget test can easily simulate Android or iOS without running on those devices.<\/p>\n<div class=\"qanda-read-box\"><div class=\"bg-light read-more-icon\"><img decoding=\"async\" src=\"https:\/\/assets.bacancytechnology.com\/qanda\/wp-content\/uploads\/2025\/04\/24061434\/read-txt.png\" alt=\"Also Read\"><p><\/p><h3>Also Read:<\/h3><a href=\"https:\/\/www.bacancytechnology.com\/blog\/flutter-open-source-projects\" target=\"_blank\">Flutter Open Source Projects<\/a><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>You can override the platform in your Flutter widget tests by setting debugDefaultTargetPlatformOverride before pumping your widget. Platform.isAndroid \/ Platform.isIOS comes from dart:io, but Flutter widgets use Theme.of(context).platform (or defaultTargetPlatform) internally \u2014 so for UI branching, you should rely on defaultTargetPlatform instead of Platform.isAndroid to make testing easier. Example: Your widget: import &#8216;package:flutter\/foundation.dart&#8217;; import &#8216;package:flutter\/material.dart&#8217;; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":13396,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[15],"tags":[],"class_list":["post-13395","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-flutter"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.bacancytechnology.com\/qanda\/wp-json\/wp\/v2\/posts\/13395"}],"collection":[{"href":"https:\/\/www.bacancytechnology.com\/qanda\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bacancytechnology.com\/qanda\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bacancytechnology.com\/qanda\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bacancytechnology.com\/qanda\/wp-json\/wp\/v2\/comments?post=13395"}],"version-history":[{"count":2,"href":"https:\/\/www.bacancytechnology.com\/qanda\/wp-json\/wp\/v2\/posts\/13395\/revisions"}],"predecessor-version":[{"id":13398,"href":"https:\/\/www.bacancytechnology.com\/qanda\/wp-json\/wp\/v2\/posts\/13395\/revisions\/13398"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.bacancytechnology.com\/qanda\/wp-json\/wp\/v2\/media\/13396"}],"wp:attachment":[{"href":"https:\/\/www.bacancytechnology.com\/qanda\/wp-json\/wp\/v2\/media?parent=13395"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bacancytechnology.com\/qanda\/wp-json\/wp\/v2\/categories?post=13395"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bacancytechnology.com\/qanda\/wp-json\/wp\/v2\/tags?post=13395"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}