[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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于PaddleNLP的深度学习对文本自动添加标点符号(二)

前言 基于PaddleNLP的深度学习对文本自动添加标点符号的源码版来了,本篇文章主要讲解如何文本自动添加标点符号的原理和相关训练方法,前一篇文章讲解的是使用paddlepaddle已经训练好的一些模型,在一些简单场景下可以通过这些模型进行预测&…

华为防火墙配置指引超详细(包含安全配置部分)以USG6320为例

华为防火墙USG6320 华为防火墙USG6320是一款高性能、高可靠的下一代防火墙,适用于中小型企业、分支机构等场景。该防火墙支持多种安全功能,可以有效抵御网络攻击,保护网络安全。 目录 华为防火墙USG6320 1. 初始配置 2. 安全策略配置 3. 防火墙功能配置 4. 高可用性配…

Git,GitHub,Gitee,GitLab 四者有什么区别?

目录 1. Git 2. GitHub 3. Gitee 4. GitLab 5. 总结概括 1. Git Git 是一个版本管理工具,常应用于本地代码的管理,下载完毕之后,我们可以使用此工具对本地的资料,代码进行版本管理。 下载链接: Git - Downlo…

前端项目在本地localhost可以调取到拍照或麦克风等设备,但是在局域网内IP+端口号访问项目时访问不到设备

前端项目在本地localhost可以调取到拍照或麦克风等设备,但是在局域网内IP端口号访问项目时访问不到设备,调取navigation.mediaDevices时本科可以获取到mediaDevices列表,局域网内ip端口访问时获取不到mediaDevices。 原因: 存在…

vector类(二)

文章目录 vector类的模拟实现1.默认成员变量和函数2.迭代器函数3.空间容量和长度4.[ ]下标调用5.插入操作(尾插)6.调整容量大小7.判空操作8.删除操作9.插入操作10.size空间大小11.消除操作 vector类的模拟实现 1.默认成员变量和函数 首先自定义构造vec…

uni-app(自定义题色变量)

1.安装sass npm i sass -D 2.安装sass-loader npm i sass-loader10.1.1 -D 3.创建自定义文件 在根目录static目录下,创建scss->_them.scss,目录名称及文件名称自定义即可。 4.定义颜色变量 在_them.scss中,自定义颜色变量&#xff0…

纯分享万岳外卖跑腿系统客户端源码uniapp目录结构示意图

系统买的是商业版,使用非常不错有三端uniapp开源代码,自从上次分享uniapp后有些网友让我分享下各个端的uniapp下的各个目录结构说明 我就截图说以下吧,

鸿蒙OS开发实例:【Web网页】

背景 HarmonyOS平台通过Web控件可支持网页加载展示,Web在中是作为专项参考的。 本篇文章将从Android和iOS平台研发角度出发来实践学习API功能 说明 整个示例是以HarmonyOS开发文档网址作为加载目标页面布局增加了三个按钮“后退”,“前进”&#xff…

Redis、Mysql双写情况下,如何保证数据一致

Redis、Mysql双写情况下,如何保证数据一致 场景谈谈数据一致性三个经典的缓存模式Cache-Aside Pattern读流程写流程 Read-Through/Write-Through(读写穿透)Write behind (异步缓存写入) 操作缓存的时候,删除…

Solidity Uniswap V2 Router swapTokensForExactTokens

最初的router合约实现了许多不同的交换方式。我们不会实现所有的方式,但我想向大家展示如何实现倒置交换:用未知量的输入Token交换精确量的输出代币。这是一个有趣的用例,可能并不常用,但仍有可能实现。 GitHub - XuHugo/solidit…

联想 lenovoTab 拯救者平板 Y700 二代_TB320FC原厂ZUI_15.0.677 firmware 线刷包9008固件ROM root方法

联想 lenovoTab 拯救者平板 Y700 二代_TB320FC原厂ZUI_15.0.677 firmware 线刷包9008固件ROM root方法 ro.vendor.config.lgsi.market_name拯救者平板 Y700 ro.vendor.config.lgsi.en.market_nameLegion Tab Y700 #ro.vendor.config.lgsi.short_market_name联想平板 ZUI T # B…

JMM Java内存模型

JMM本身是一个抽象的概念,不是真实存在的,它仅仅是一种规定或者说是规范 1.用来实现线程和主内存直接的抽象关系 2.屏蔽各个硬件平台和操作系统的内存访问差异,使得java程序在各种平台都能达到一致的内存访问效果 JMM的三大特性 可见性 多线程环境下,某个线程修改了变量…

Day55:WEB攻防-XSS跨站CSP策略HttpOnly属性Filter过滤器标签闭合事件触发

目录 XSS跨站-安全防御-CSP XSS跨站-安全防御-HttpOnly XSS跨站-安全防御-XSSFilter(过滤器的意思) 1、无任何过滤 2、实体化 输入框没有 3、全部实体化 利用标签事件 单引号闭合 4、全部实体化 利用标签事件 双引号闭合 5、事件关键字过滤 利用其他标签调用 双引号闭合…

Groovy基础入门

一、Groovy简介 Groovy是运行在JVM中的一种动态语言,可以在Java平台上进行编程,使用方式基本与使用Java代码的方式相同,它的语法与Java语言的语法很相似,与Java相比,Groovy更加灵活、简洁,而且完成同样的功…

Python人工智能:气象数据可视化的新工具

Python是功能强大、免费、开源,实现面向对象的编程语言,在数据处理、科学计算、数学建模、数据挖掘和数据可视化方面具备优异的性能,这些优势使得Python在气象、海洋、地理、气候、水文和生态等地学领域的科研和工程项目中得到广泛应用。可以…

Mybatis别名 动态sql语句 分页查询

给Mybatis的实体类起别名 给Mybatis的xml文件注册mapper映射文件 动态sql语句 1 if 2 choose 3 where 4 foreach 一&#xff09;if 查询指定名称商品信息 语法&#xff1a; SELECT * FROM goods where 11 <if test "gName!null"> and g.g_name like co…

微信小程序被删除的文件一编译又回来了

一开始创建错了位置&#xff0c;就想着删除文件重新创建&#xff0c;但是没想到每次重新编译的时候&#xff0c;之前被删除的js、wsml文件就又回来了&#xff0c;后来发现是我在app.json中的pages里面的代码没有被删除。 因为我最开始创建错了&#xff0c;快捷创建了页面&#…

黑苹果睡眠(电源设置参考),英特尔 NUC9 黑苹果 Sonoma 14.1.1

机型&#xff1a;英特尔 NUC9 i9-9980HK处理器 之前电源配置没设置好&#xff0c;导致经常睡眠被无故唤醒&#xff0c;处理好之后是这样子的设置&#xff0c;我是台式机&#xff0c;其它的不太清楚&#xff0c;可以提供一个参考给大家。 EFI 暂时没时间上传共享&#xff0c;到时…

react-navigation:

我的仓库地址&#xff1a;https://gitee.com/ruanjianbianjing/bj-hybrid react-navigation&#xff1a; 学习文档&#xff1a;https://reactnavigation.org 安装核心包: npm install react-navigation/native 安装react-navigation/native本身依赖的相关包: react-nativ…

计算机网络:物理层 - 信道极限容量

计算机网络&#xff1a;物理层 - 信道极限容量 实际信道中的数字信号奈式准则香农公式练习 实际信道中的数字信号 信号在传输过程中会受到各种因素的影响&#xff0c;如图所示&#xff1a; 这是一个数字信号&#xff0c;当它通过实际的信道后&#xff0c;波形会产生失真&#…