使用flutter_dotenv包在Android模拟器运行项目时出现.env文件找不到的问题
使用flutter_dotenv包在Android模拟器运行项目时出现.env文件找不到的问题
嗨,我之前在Android模拟器上用flutter_dotenv的时候也踩过这个一模一样的坑,给你整理几个靠谱的解决思路,你可以挨个试试:
首先得搞明白为啥会出这问题——Android模拟器里的APP是跑在独立的沙箱环境里的,你本地电脑项目根目录的.env文件,并不会自动同步到模拟器的APP运行目录中,直接用文件路径去读肯定找不到。
方法一:把.env移到assets目录(最稳妥的通用方案)
- 先在项目根目录(和lib文件夹同级的位置)新建一个
assets文件夹,要是已经有了就跳过这步。 - 把你根目录的
.env文件复制到这个assets文件夹里。 - 打开
pubspec.yaml文件,找到flutter节点下的assets部分,把.env的路径加进去,修改后大概是这样:
注意缩进要和前面的flutter: uses-material-design: true assets: - assets/.envuses-material-design保持一致,YAML对缩进要求特别严格! - 最后修改main函数里加载.env的代码,指定assets里的文件路径:
import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:flutter/material.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); // 这里改成assets里的路径 await dotenv.load(fileName: 'assets/.env'); runApp(MyApp()); } - 做完这些后,先执行
flutter clean清理一下项目缓存,然后重新运行项目,基本就能读到文件了。
方法二:用--dart-define参数传递环境变量(适合不想动文件的情况)
要是你不想移动.env文件,也可以在运行项目的时候直接把环境变量通过命令行传递,比如:
flutter run --dart-define=API_KEY=your_secret_key_here
然后在代码里通过String apiKey = const String.fromEnvironment('API_KEY');来获取对应的值,这种方式不需要依赖flutter_dotenv,也不用担心文件找不到的问题。
额外检查项
- 确认你的
.env文件名没写错,比如是不是多打了个点写成.env.,或者漏了点写成env,Android系统是区分文件名大小写的! - 看看pubspec.yaml里的flutter_dotenv依赖是不是正确安装了,执行
flutter pub get确保所有依赖都拉取到位。
备注:内容来源于stack exchange,提问作者Dr. Andrey Belkin




