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 — so for UI branching, you should rely on defaultTargetPlatform instead of Platform.isAndroid to make testing easier.
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
class PlatformWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
if (defaultTargetPlatform == TargetPlatform.android) {
return WidgetAndroid();
} else if (defaultTargetPlatform == TargetPlatform.iOS) {
return WidgetIOS();
}
return SizedBox();
}
}
class WidgetAndroid extends StatelessWidget {
@override
Widget build(BuildContext context) => Text('Android Widget');
}
class WidgetIOS extends StatelessWidget {
@override
Widget build(BuildContext context) => Text('iOS Widget');
}
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
tearDown(() {
// Always reset after test to avoid leaking platform state
debugDefaultTargetPlatformOverride = null;
});
testWidgets('Shows Android widget on Android', (WidgetTester tester) async {
debugDefaultTargetPlatformOverride = TargetPlatform.android;
await tester.pumpWidget(MaterialApp(home: PlatformWidget()));
expect(find.byType(WidgetAndroid), findsOneWidget);
expect(find.byType(WidgetIOS), findsNothing);
});
testWidgets('Shows iOS widget on iOS', (WidgetTester tester) async {
debugDefaultTargetPlatformOverride = TargetPlatform.iOS;
await tester.pumpWidget(MaterialApp(home: PlatformWidget()));
expect(find.byType(WidgetIOS), findsOneWidget);
expect(find.byType(WidgetAndroid), findsNothing);
});
}
This way, your widget test can easily simulate Android or iOS without running on those devices.
Work with our skilled Flutter developers to accelerate your project and boost its performance.
Hire Flutter Developers