import 'dart:io' show Platform; import 'package:device_info_plus/device_info_plus.dart'; import 'package:flutter/foundation.dart' show TargetPlatform, defaultTargetPlatform, kIsWeb, visibleForTesting; /// If you want to override the [kIsWeb] use [overrideIsWeb] but it's only /// for testing bool isWeb({ @visibleForTesting bool? overrideIsWeb, }) { return overrideIsWeb ?? kIsWeb; } /// [supportWeb] is a parameter that ask you if we should care about web support /// if the value is true then we will return the result no matter if we are /// on web or using a native app to run the flutter app bool isMobile({ required bool supportWeb, TargetPlatform? platform, bool? overrideIsWeb, }) { if (isWeb(overrideIsWeb: overrideIsWeb) && !supportWeb) return false; platform ??= defaultTargetPlatform; return {TargetPlatform.iOS, TargetPlatform.android}.contains(platform); } /// [supportWeb] is a parameter that ask you if we should care about web support /// if the value is true then we will return the result no matter if we are /// on web or using a native app to run the flutter app bool isDesktop({ required bool supportWeb, TargetPlatform? platform, bool? overrideIsWeb, }) { if (isWeb(overrideIsWeb: overrideIsWeb) && !supportWeb) return false; platform ??= defaultTargetPlatform; return {TargetPlatform.macOS, TargetPlatform.linux, TargetPlatform.windows} .contains(platform); } /// [supportWeb] is a parameter that ask you if we should care about web support /// if the value is true then we will return the result no matter if we are /// on web or using a native app to run the flutter app bool isKeyboardOS({ required bool supportWeb, TargetPlatform? platform, bool? overrideIsWeb, }) { platform ??= defaultTargetPlatform; return isDesktop( platform: platform, supportWeb: supportWeb, overrideIsWeb: overrideIsWeb) || platform == TargetPlatform.fuchsia; } /// [supportWeb] is a parameter that ask you if we should care about web support /// if the value is true then we will return the result no matter if we are /// on web or using a native app to run the flutter app bool isAppleOS({ required bool supportWeb, TargetPlatform? platform, bool? overrideIsWeb, }) { if (isWeb(overrideIsWeb: overrideIsWeb) && !supportWeb) return false; platform ??= defaultTargetPlatform; return { TargetPlatform.macOS, TargetPlatform.iOS, }.contains(platform); } /// [supportWeb] is a parameter that ask you if we should care about web support /// if the value is true then we will return the result no matter if we are /// on web or using a native app to run the flutter app bool isMacOS({ required bool supportWeb, TargetPlatform? platform, bool? overrideIsWeb, }) { if (isWeb(overrideIsWeb: overrideIsWeb) && !supportWeb) return false; platform ??= defaultTargetPlatform; return TargetPlatform.macOS == platform; } /// [supportWeb] is a parameter that ask you if we should care about web support /// if the value is true then we will return the result no matter if we are /// on web or using a native app to run the flutter app bool isIOS({ required bool supportWeb, TargetPlatform? platform, bool? overrideIsWeb, }) { if (isWeb(overrideIsWeb: overrideIsWeb) && !supportWeb) return false; platform ??= defaultTargetPlatform; return TargetPlatform.iOS == platform; } /// [supportWeb] is a parameter that ask you if we should care about web support /// if the value is true then we will return the result no matter if we are /// on web or using a native app to run the flutter app bool isAndroid({ required bool supportWeb, TargetPlatform? platform, bool? overrideIsWeb, }) { if (isWeb(overrideIsWeb: overrideIsWeb) && !supportWeb) return false; platform ??= defaultTargetPlatform; return TargetPlatform.android == platform; } Future isIOSSimulator({ bool? overrideIsWeb, }) async { if (!isAppleOS(supportWeb: false, overrideIsWeb: overrideIsWeb)) { return false; } final deviceInfo = DeviceInfoPlugin(); final osInfo = await deviceInfo.deviceInfo; if (osInfo is IosDeviceInfo) { final iosInfo = osInfo; return !iosInfo.isPhysicalDevice; } return false; } bool isFlutterTest({ bool? overrideIsWeb, }) { if (isWeb(overrideIsWeb: overrideIsWeb)) return false; return Platform.environment.containsKey('FLUTTER_TEST'); }