如何为不同的 API 链接配置 Flutter Flavor
Posted
技术标签:
【中文标题】如何为不同的 API 链接配置 Flutter Flavor【英文标题】:How to configure Flutter Flavor for different API links 【发布时间】:2021-09-18 01:25:48 【问题描述】:我有 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 类?
提前谢谢你。
【问题讨论】:
【参考方案1】:我发现的唯一方法是使用 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);
【讨论】:
以上是关于如何为不同的 API 链接配置 Flutter Flavor的主要内容,如果未能解决你的问题,请参考以下文章
在 Flutter 中使用 Firebase 动态链接邀请链接到不同的组