Flutter开发中无需手动切换Uri.http/Uri.https的解决方案
解决Flutter开发/上线环境Uri自动切换问题
不用手动逐个修改Uri创建方式,推荐以下几种高效方案:
方案1:封装网络工具类 + 环境配置
把Uri创建逻辑统一封装,通过环境配置自动切换http/https,后续只需修改配置文件,无需改动业务代码。
步骤:
- 定义环境配置类,区分开发与生产环境:
class EnvConfig { final String baseUrl; final bool useHttps; EnvConfig({required this.baseUrl, required this.useHttps}); // 开发环境配置 static EnvConfig dev = EnvConfig( baseUrl: "localhost:8080", useHttps: false, ); // 生产环境配置 static EnvConfig prod = EnvConfig( baseUrl: "your-production-domain.com", useHttps: true, ); } // 上线时只需将此处切换为EnvConfig.prod final currentEnv = EnvConfig.dev;
- 封装Uri创建方法:
Uri buildUri(String path) { return currentEnv.useHttps ? Uri.https(currentEnv.baseUrl, path) : Uri.http(currentEnv.baseUrl, path); }
- 业务代码中直接调用:
// 开发/上线环境通用,无需修改 final loginUri = buildUri("api/v1/login");
方案2:通过命令行传递环境变量(适配CI/CD)
利用Flutter的--dart-define参数传递环境标识,代码中根据标识自动适配Uri方式,适合自动化打包场景。
步骤:
- 运行/打包时传递环境变量:
# 开发环境运行 flutter run --dart-define=ENV=dev # 生产环境打包 flutter build apk --dart-define=ENV=prod
- 代码中读取环境变量并创建Uri:
String getEnv() { return const String.fromEnvironment("ENV", defaultValue: "dev"); } Uri buildUri(String path) { final env = getEnv(); return env == "prod" ? Uri.https("your-production-domain.com", path) : Uri.http("localhost:8080", path); }
方案3:直接使用Uri.parse(最简洁)
统一用Uri.parse创建链接,只需维护不同环境的完整baseUrl,无需区分http/https方法:
// 开发环境baseUrl // final baseUrl = "http://localhost:8080"; // 生产环境baseUrl final baseUrl = "https://your-production-domain.com"; // 业务代码中直接拼接 final loginUri = Uri.parse("$baseUrl/api/v1/login");
上线时仅需替换baseUrl的值即可。
内容的提问来源于stack exchange,提问作者Abhinav
相关产品推荐
相关产品推荐

