如何确定Flutter是否在模拟器中运行

25

它可以像设置应用程序范围常量IS_REAL_DEVICE一样简单,也可以像插件甚至是单独的main.dart文件一样复杂。 - sjsam
5个回答

25

通过使用device info plus插件,您可以获取有关正在运行的设备的各种信息,包括'isPhysicalDevice',适用于AndroidiOS(虽然您必须独立阅读它们)。


仍然没有理由这样做。您不希望在生产环境中推送开发特定的行为。 - Rémi Rousselet
@RémiRousselet 我不完全确定你的意思,但我认为你在做一个假设。这是为了让测试/开发人员在工作时可以同时使用物理设备和模拟器。 - Daniel Brotherston
2
还有一种选择是将平台检查包装在断言中,这样它只会在调试模式下执行(因为在模拟器中您可能只会使用调试模式)。我明白你的意思@Remi,但他仍然必须有一个if(configuration == simulator)或其他东西,以及一个不同的main,并且每次在模拟器上运行时都要记住这一点,这有点麻烦,特别是如果他在一个有多个人的团队中... - rmtmckenzie
2
我们中的一些人同时运行多个设备和模拟器,以实现扩展和设计一致性。某些功能,如推送通知、视频播放和相机,在iOS模拟器上不受支持。使用isSimulator会有所帮助。 - Oliver Dixon
它已被弃用。现在你可以使用https://pub.dev/packages/device_info_plus。 - Caio Santos
显示剩余3条评论

15

5

虽然我来晚了一点,但如果还有其他人需要,这个可以帮到他们。 你可以使用这个包: https://pub.dev/packages/safe_device

Pubspec.yaml文件中添加最新版本,然后导入它:

import 'package:safe_device/safe_device.dart';

然后,您可以检查设备是否为模拟器:

bool isRealDevice = await SafeDevice.isRealDevice;

只是想提一下,上面使用 device_info_plus 的答案更可行,因为它由 Flutter 社区自己维护,并且具有更多功能。但如果你对其他功能不感兴趣,只想检查设备是否为模拟器,那么我目前的答案更可行。 - Albert Logic Einstein

1
我正在使用flutter_is_emulator
import 'package:flutter_is_emulator/flutter_is_emulator.dart';
....
bool isAnEmulator = await FlutterIsEmulator.isDeviceAnEmulatorOrASimulator;

不是最好的解决方案,因为它早于空值安全,所以 isDeviceAnEmulatorOrASimulator 的类型是 Future<bool*>* - Luke Hutchison
由于此软件包已停用,因此这个答案现在没有意义,应该被删除/移除。 - Albert Logic Einstein

0
不可以。但是你可以使用不同的配置文件(例如开发配置文件)来实现相应的功能。
为此,你可以使用不同的 main.dart 文件,例如:main.dev.dart,并使用以下命令运行它:flutter run -t lib/main.dev.dart 。

1
我们中的一些人同时运行多个设备和模拟器,以实现扩展和设计一致性。某些功能,如推送通知、视频播放和相机,在iOS模拟器上不受支持。使用isSimulator会有所帮助。 - Oliver Dixon
“不”听起来很像“我不知道”。在回答问题之前,请进行适当的研究。 你提供的答案与原帖的要求不符。 - Albert Logic Einstein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接