[Flutter]环境判断

方式一(推荐)

常量kReleaseMode,它会根据你的应用是以什么模式编译的来获取值。bool.fromEnvironment会从Dart编译时的环境变量中获取值。对于'dart.vm.product'这个特定的环境变量,它是由Dart VM设置的,用来标明当前是否在产品环境下运行。

  • 当应用以Release模式编译时(例如运行flutter build apk或flutter build ios),kReleaseMode会被设置为true。

  • 当应用在Debug模式或Profile模式下运行时,kReleaseMode会被设置为false。

kReleaseMode是foundation库的一部分,这意味着你不需要手动定义它,可以直接使用。这个变量与其他几个常量一起,帮助开发者编写依赖于构建模式的代码:

  • kDebugMode: 当应用在Debug模式下运行时为true。

  • kProfileMode: 当应用在Profile模式下运行时为true。

  • kReleaseMode: 当应用在Release模式下运行时为true。

// const bool kReleaseMode = bool.fromEnvironment('dart.vm.product');
if (kReleaseMode) {print("dart.vm.product-现在是release环境.");
} else {print("dart.vm.product-现在是debug环境.");
}

1.在Main.dart选择Start Debugging运行

还用Android Studio和Xcode运行一样默认会是debug环境

打印结果:

I/flutter (23746): dart.vm.product-现在是debug环境.

2.使用flutter run运行

$ flutter run

打印结果:

I/flutter (24584): dart.vm.product-现在是debug环境.

3.使用flutter run --debug运行

$ flutter run --debug

打印结果:

I/flutter (30485): dart.vm.product-现在是debug环境.

4.在终端使用flutter run --release运行

$ flutter run --release

打印结果:

I/flutter (26343): dart.vm.product-现在是release环境.

5.使用flutter build apk打包安装

$ flutter build apk

提示:

dart.vm.product-现在是release环境.

6.使用flutter build apk --debug打包安装

$ flutter build apk --debug

提示:

dart.vm.product-现在是debug环境.

7.打包debug或release的ipa用Xcode打开项目操作

在Xcode中,默认情况下运行或构建应用会使用Debug配置,这意味着如果你直接通过Xcode的运行按钮(通常是顶部左侧的一个播放按钮)启动应用,它将默认使用Debug模式。这也意味着你的kReleaseMode将会是false。

如果你想要通过Xcode显式地打包一个Debug模式的ipa文件,你可以遵循以下步骤:

  • 打开你的Flutter项目中的ios文件夹。你可以在终端使用open ios/Runner.xcworkspace命令来打开Xcode项目,或者直接在Finder中找到Runner.xcworkspace文件并双击打开。

  • 确保你的设备或者是一个有效的模拟器是当前选中的目标设备。

  • 前往Xcode的顶部菜单栏,选择Product > Scheme > Edit Scheme。

  • 在左侧菜单中选择Archive,然后在右侧的Build Configuration中选择Debug。(左侧选择Run的话,就是修改运行后的安装包环境)

  • 关闭Scheme编辑器,然后去到Product > Archive来创建一个新的归档。   注意:归档操作通常用于准备Release模式的构建,但是你可以改变Scheme设置来创建Debug模式的归档。

  • 一旦归档完成,Xcode的Organizer窗口会打开,显示你的新归档。

  • 在Organizer中,选择你的归档,然后点击右边的Export按钮来导出ipa文件。

  • 在导出流程中,确保选择正确的导出选项,比如Development来保持Debug模式。

在这个过程完成后,你将会得到一个Debug模式的ipa文件,它包含了调试符号和不是针对性能优化的编译。你可以将这个ipa文件安装到你的设备上,用于测试目的。记住Debug模式的构建并不适合发布到App Store或其他分发渠道。

最后,不管是通过Xcode还是通过命令行工具,kReleaseMode的值始终由构建配置来决定,当使用Release配置构建时,kReleaseMode为true;当使用Debug配置构建时,kReleaseMode为false。

注意:经过验证,打包debug环境的ipa,安装到手机上启动不了,打包release安装没问题。

方式二

若你不想用kReleaseMode判断环境,你还可以用“ENV”甚至自定义一个变量来判断环境。

使用String.fromEnvironment('ENV')判断环境时,若编译时没用--dart-define指定环境变量(flutter run --dart-define=ENV=DEBUG 或这样 flutter build apk --dart-define=ENV=RELEASE),默认会返回空字符串。

在Flutter开发中,--dart-define是一个命令行标志,它允许开发者在编译时向 Dart 代码注入环境变量或配置数据。这使得你可以在不同的开发环境中(如开发、测试、生产)指定不同的变量值,而无需更改源代码。

下面的代码中,我们通过判断environment是否等于’DEBUG’,让环境默认为Release环境。

// 在你的代码中,确保 environment 声明前面有 const 关键字。如果没有 const,则不会在编译时查找环境变量的值,而是会默认为空字符串。
const String environment = String.fromEnvironment('ENV');
if (environment == 'DEBUG') {print("ENV-现在是debug环境. environment = $environment");
} else {print("ENV-现在是release环境. environment = $environment");
}

这种劣势也比较明显,因为需要编译时手动指定环境,开发时忘记指定--dart-define=ENV=DEBUG时,就容易误入release环境。比如你在release环境中有埋点,误入后就会制造出很多垃圾数据。

1.使用flutter run --dart-define=ENV=DEBUG运行

$ flutter run --dart-define=ENV=DEBUG
// 或者
$ flutter run --dart-define="ENV=DEBUG"

打印结果:

I/flutter (29771): ENV-现在是debug环境. environment = DEBUG

2.使用flutter build apk --dart-define=ENV=RELEASE打包安装

$ flutter build apk --dart-define=ENV=RELEASE

提示:

ENV-现在是release环境. environment = RELEASE

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/576328.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

I.MX6ULL_Linux_系统篇(25) buildroot文件系统构建

前面我们学习了如何使用 busybox 来构建根文件系统,但是 busybox 构建的根文件系统不齐全,很多东西需要我们自行添加,比如 lib 库文件。在我们后面的驱动开发中很多第三方软件也需要我们自己去移植,这些第三方软件有很多又依赖其他…

Sqoop 的安装与配置

目录 1 下载并解压2 修改配置文件3 添加环境变量4 拷贝 JDBC 驱动5 测试Sqoop是否能够成功连接数据库 下载地址 1 下载并解压 (1)上传安装包 sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz 到 hadoop101 的 /opt/software 路径中 (2&#xf…

儿童护眼大路灯哪个牌子好?教育部认可落地灯品牌推荐点评!

想要孩子在兼顾学习的同时视力保持在最健康的状态,优质的大路灯至关重要。然而。市面上大路灯种类繁多,选购到劣质产品不仅无法提高光线的舒适度,还会对眼睛视力造成影响,最终影响视力健康,这对普遍存在的眼睛酸痛、疲…

HTML5 和 CSS3 提高

一、HTML5 的新特性 HTML5 的新增特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等。这些新特性都有兼容性问题,基本是 IE9 以上版本的浏览器才支持,如果不考虑兼容性问题,可以大量使用这些新特性。 声明…

vue3 渲染一个后端返回的图片字段渲染、table表格内放置图片

一、后端直接返回图片url 当图片字段接口直接返回的是图片url&#xff0c;可以直接放到img标签上 <img v-if"thumbLoader" class"r-image-loader-thumb" :src"resUrl" /> 二、当图片字段接口直接返回的是图片Id 那么就需要去拼一下图片…

Rust编程(四)PackageCrateModule

这一部分的中文教程/文档都很混乱,翻译也五花八门,所以我建议直接看英文官方文档,对于一些名词不要进行翻译,翻译只会让事情更混乱,本篇从实战和实际需求出发,讲解几个名称的关系。 Module & Crate & Package & Workspace 英文中的意思: Cargo:货物 Crate:…

【全栈小5】我的创作纪念日

目录 前言机缘收获粉丝和原创个人成就六边形战士 回顾文章原代码代码优化 憧憬 前言 全栈小5 &#xff0c;有幸再次遇见你&#xff1a; 还记得 2019 年 03 月 29 日吗&#xff1f; 你撰写了第 1 篇技术博客&#xff1a; 《前端 - 仿动态效果 - 展开信息图标》 在这平凡的一天&…

C语言 | qsort()函数使用

目录&#xff1a; 1.qsort介绍 2.使⽤qsort函数 排序 整型数据 3.使⽤qsort函数 排序 结构体数据 4. qsort函数的模拟实现冒泡排序 qsort()函数 是一个 C语言编译器函数库自带的排序函数&#xff0c; 它可以对指定数组&#xff08;包括字符串&#xff0c;二维数组&#x…

linux离线安装jenkins及使用教程

本教程采用jenkins.war的方式离线安装部署&#xff0c;在线下载的方式会遇到诸多问题&#xff0c;不宜采用 一、下载地址 地址&#xff1a;Jenkins download and deployment 下载最新的长期支持版 由于jenkins使用java开发的&#xff0c;所以需要安装的linux服务器装有jdk环…

samba实现linux共享文件夹

一、samba安装 sudo apt install samba 二、配置Samba 编辑Samba配置文件sudo vi /etc/samba/smb.conf 在文件末尾添加以下内容&#xff0c;设置一个简单的共享目录&#xff08;替换path_to_share为实际的共享目录路径&#xff09;&#xff1a; [Share] path /path_to_sha…

聚酰亚胺PI材料难于粘接,用什么胶水粘接?那么让我们先一步步的从认识它开始(十二): 聚酰亚胺PI纤维的优点

聚酰亚胺PI纤维的优点 聚酰亚胺PI纤维具有多种显著的优点&#xff1a; 耐高温性能&#xff1a;高温稳定性&#xff0c;聚酰亚胺PI纤维在高温环境下具有出色的稳定性&#xff0c;能够在高温下保持其物理和化学性质&#xff0c;热稳定性优异&#xff0c;可在-269℃&#xff5e;…

深度学习每周学习总结P3(天气识别)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 数据链接 提取码&#xff1a;o3ix 目录 0. 总结1. 数据导入部分数据导入部分代码详解&#xff1a;a. 数据读取部分a.1 提问&#xff1a;关…