defaultTargetPlatform top-level property

TargetPlatform defaultTargetPlatform

The TargetPlatform that matches the platform on which the framework is currently executing.

This is the default value of ThemeData.platform (hence the name). Widgets from the material library should use Theme.of to determine the current platform for styling purposes, rather than using defaultTargetPlatform. Widgets and render objects at lower layers that try to emulate the underlying platform can depend on defaultTargetPlatform directly. The dart:io.Platform object should only be used directly when it's critical to actually know the current platform, without any overrides possible (for example, when a system API is about to be called).

In a test environment, the platform returned is regardless of the host platform. (Android was chosen because the tests were originally written assuming Android-like behavior, and we added platform adaptations for iOS later). Tests can check iOS behavior by using the platform override APIs (such as ThemeData.platform in the material library) or by setting debugDefaultTargetPlatformOverride.

Tests can also create specific platform tests by and adding a variant: argument to the test and using a TargetPlatformVariant.


// When adding support for a new platform (e.g. Windows Phone, Raspberry Pi),
// first create a new value on the [TargetPlatform] enum, then add a rule for
// selecting that platform here.
// It would be incorrect to make a platform that isn't supported by
// [TargetPlatform] default to the behavior of another platform, because doing
// that would mean we'd be stuck with that platform forever emulating the other,
// and we'd never be able to introduce dedicated behavior for that platform
// (since doing so would be a big breaking change).
TargetPlatform get defaultTargetPlatform => platform.defaultTargetPlatform;