flutter - 如何为不同的 API 链接配置 Flutter Flavor
问题描述
我有 3 个用于暂存、开发和生产阶段的不同 API 链接。我尝试以这种方式配置文件以共享链接
//Types of flavors we have
import 'dart:io';
//Types of flavors
enum Flavor {
STAGING,
DEVELOPMENT,
PRODUCTION,
}
class Config {
//Floavor is the way to devide application
//configurations depending on stage we work
static Flavor? appFlavor;
// api url for requests depending on the flavor
// you can use it by typing Config.api_url
static String get api_url {
switch (appFlavor) {
case Flavor.PRODUCTION:
return 'https://api.Link1';
case Flavor.DEVELOPMENT:
return 'https://api.Link2';
case Flavor.STAGING:
return 'https://api.Link3';
default:
return 'https://api.Link2';
}
}
//getting information about platform
//you can use it by typing Config.platform
static String get platform => Platform.isAndroid ? 'ANDROID' : 'IOS';
}
然后我用以下方式在 main.dart 中初始化风味:
void main() {
//Initialising the flavor
Config.appFlavor = Flavor.PRODUCTION;
Bloc.observer = AppBlocObserver();
FlutterError.onError = (details) {
log(details.exceptionAsString(), stackTrace: details.stack);
};
runZonedGuarded(
() => runApp(const IChazy()),
(error, stackTrace) => log(error.toString(), stackTrace: stackTrace),
);
}
但是当我尝试将数据传递给 baseURL 的 Chopper 包时,它显示我应该使用 const 值的错误:
import 'package:chopper/chopper.dart';
import 'package:ichazy/config/flavor_config.dart';
//part 'challenges_api_service.chopper.dart';
@ChopperApi(baseUrl: Config.api_url) //Error Appears here
abstract class ChallengeApiService {}
错误: 常量变量必须用常量值初始化。尝试将初始化程序更改为常量表达式。
我知道我应该使用 const 值来取消此错误,但同时我想切换风格和 API 链接。是否有任何适当的方法可以以某种方式管理这两个目标,也许是通过更改 Config 类?
先感谢您。
解决方案
我发现的唯一方法是在 chopper 包中使用自定义创建方法
@ChopperApi(baseUrl: '/')
abstract class ChallengeApiService extends ChopperService {
@Get()
Future<Response> getChallenges(
@Body() Map<String, dynamic> body,
);
static ChallengeApiService create() {
final client = ChopperClient(
baseUrl: Config.api_url,
services: [_$ChallengeApiService()],
converter: JsonConverter());
return _$ChallengeApiService(client);
}
}
推荐阅读
- java - 为什么我不能从控制台运行休眠 maven 应用程序?
- php - 为什么我的标题标签不会使用 config() 更改?
- joomla - 如何在 Synology NAS 上的共享 Web 中重命名 Joomla 文件夹
- c++ - 通过基类指针检查模板类是否相等
- macos - 为什么有时不是所有的 NSDocument 窗口都打开?
- node.js - 在 AWS 中查询 S3 json 文件
- c++ - vscode“没有可用的重构”c ++,(带有arduino扩展)
- pycharm - 有没有办法查看我的代码效率低下的地方?
- apache-kafka - 更改 Zookeeper 的 log4j.properties 的路径
- ios - CoreMotion 的主线程检查器警告,仅出现在 2018 年型号的 iPhone 上