You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter集成Supabase时,从.env加载API密钥失败如何解决?

问题分析与解决

从报错信息「No host specified in URI/auth/v1/token」可以直接判断:你传入Supabase.initialize的url是空字符串,导致拼接API路径时找不到主机地址。核心问题是**String.fromEnvironment不会自动读取项目根目录的.env文件**——它只能读取编译时通过命令行或IDE配置传入的环境变量,这是你遗漏的关键配置环节。

另外先纠正代码里的拼写错误:Env类里的Static要改成小写的static,否则代码本身无法正常编译。

解决方案一:编译时手动传入环境变量

如果不想依赖第三方包,可以在运行/打包时手动传入变量:

  • 命令行运行项目:
    flutter run --dart-define=SUPABASE_TEST_URL=https://asdfalwekdfdwlkjgfdlkjdsf.supabase.co --dart-define=SUPABASE_TEST_KEY=asdlkfadslgfkhasdlgkhasdlkj...
    
  • 打包APK:
    flutter build apk --dart-define=SUPABASE_TEST_URL=xxx --dart-define=SUPABASE_TEST_KEY=xxx
    
  • IDE(VSCode/Android Studio)配置:在运行配置的「Additional run args」里添加上述--dart-define参数。

解决方案二:用flutter_dotenv自动加载.env文件

如果项目需要长期维护,推荐用flutter_dotenv包简化配置:

  1. 在pubspec.yaml添加依赖:
    dependencies:
      flutter_dotenv: ^5.1.0
    
  2. 同样在pubspec.yaml的flutter区块添加.env文件路径:
    flutter:
      assets:
        - .env
    
  3. 修改main.dart,先加载.env再初始化Supabase:
    Future<void> main() async {
      await dotenv.load(fileName: ".env");
      await Supabase.initialize(
        url: dotenv.env['SUPABASE_TEST_URL']!,
        anonKey: dotenv.env['SUPABASE_TEST_KEY']!,
      );
      runApp(const MainApp());
    }
    
  4. 对应的env.dart也可以改成从dotenv读取:
    abstract class Env {
      static String get supabaseTestUrl => dotenv.env['SUPABASE_TEST_URL']!;
      static String get supabaseTestKey => dotenv.env['SUPABASE_TEST_KEY']!;
    }
    

验证方法

可以在main函数里先打印变量值,确认是否读取成功:

print('URL: ${Env.supabaseTestUrl}');
print('Key: ${Env.supabaseTestKey}');

如果输出为空,说明变量没加载成功,再检查对应配置步骤。

内容的提问来源于stack exchange,提问作者Andy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 16:42:35