flutter开发实战-Release环境与Debug调试环境配置实现
在开发中,我们经常遇到Release与Debug相关请求等配置隔离。这里记录之前的实现方案。
在实现之前,我们需要先看下git_it
一、get_it
在开发过程中,需要App的部分逻辑与Widget分离。git_it和provider都可以用作状态管理,这里使用的是git_it,我使用git_it缘由就是获取时不强制依赖context。
GetIt是一个用于 Dart 和 Flutter 项目的简单服务定位器,其中包含一些受到 Splat 启发的附加功能。 它可以用来代替 InheritedWidget 或 Provider 比如从你的用户界面来访问对象。
1.1 引入git_it
pubspec.yaml引入git_it
get_it: ^7.6.0
1.2 使用git_it
GetIt getIt = GetIt.instance;
// 或者
GetIt getIt = GetIt.I;
//重新自定义一个新的
GetIt getIt = GetIt.asNewInstance();
注册
GetIt gitIt = GetIt.instance;
//在GetIt里注册工厂类TokenFetcher
gitIt.registerFactory<TokenFetcher>(() => TokenFetcherImpl());
调用获取
var tokenFetcher = gitIt.get<TokenFetcher>();
这里简单介绍使用方式,Release与Debug相关请求需要用到git_it。
二、实现Config
Release与Debug相关请求配置进行区分,我们需要实现一个CongfigManager
/// 定义config配置的key常量
class ConfigConstant {
static String kAppHost = "appHost";
}
// 定义枚举,网络请求环境,DEV、PRE、PRO
enum ConfigEnv {
dev, // Dev服务器环境
pre, // Pre服务器环境 预发布环境
pro, // Pre服务器环境 线上生产环境
}
/// 管理网络请求相关服务
abstract class ConfigManager extends ChangeNotifier {
void init();
String get(String key);
int getImAppId();
}
2.1、实现Release的配置ReleaseConfigMgr
实现Release环境的ConfigManager
class ReleaseConfigMgr extends ConfigManager {
ReleaseConfigMgr() {
init();
}
String get(String key) {
// 根据key获取请求的服务地址
// TODO: implement get
if (ConfigConstant. kAppHost == key) {
return "https://app-s.ifour.cn/";
}
return "";
}
void init() {
// TODO: implement init
}
int getImAppId() {
// TODO: implement getImAppId
return 111111111;
}
}
2.2、实现Debug的配置DebugConfigMgr
实现Debug的配置DebugConfigMgr
class DebugConfigMgr extends ConfigManager {
ConfigEnv _env = ConfigEnv.dev;
DebugConfigMgr() {
init();
}
String get(String key) {
// TODO: implement get
if (ConfigEnv.dev == _env) {
if (ConfigConstant. kAppHost == key) {
return "https://app-dev.ifour.cn/";
}
} else if (ConfigEnv.pre == _env) {
if (ConfigConstant. kAppHost == key) {
return "https://app-pre.ifour.cn/";
}
} else if (ConfigEnv.pro == _env) {
if (ConfigConstant. kAppHost == key) {
return "https://app-s.ifour.cn/";
}
}
return "";
}
int getImAppId() {
// TODO: implement getImAppId
// 从本地取出相应的保存环境类型
if (ConfigEnv.dev == _env) {
/// IM sdk appId Dev环境
return 111111111;
} else if (ConfigEnv.pre == _env) {
/// IM sdk appId Pre环境
return 111111112;
} else if (ConfigEnv.pro == _env) {
/// IM sdk appId Pro环境
return 111111113;
}
return 0;
}
void init() {
// TODO: implement init
// 初始化的时候从本地取出
}
// 设置环境
setEnv(ConfigEnv env) {
// TODO: implement setEnv
_env = env;
// 更新本地存储的环境类型
notifyListeners();
}
}
三、使用get_it设置Release、debug对应的config
使用get_it设置Release、debug对应的config。
由于我们debug与release配置不同,我这里使用的是main.dart与main_debug.dart表示不同的入口
3.1、在main.dart配置
// release
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
Global.init().then((e) {
OnePlatform.app = () => const MyApp();
});
// 设置请求地址及IM
GetIt.instance.registerSingleton<ConfigManager>(ReleaseConfigMgr(),
signalsReady: true);
// 初始化IM配置
IMManager().configIM(imSDKAppId: GetIt.instance<ConfigManager>().getImAppId());
}
3.2、在main_debug.dart配置
// debug
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
Global.init().then((e) {
OnePlatform.app = () => const MyApp();
});
// 设置请求地址及IM
GetIt.instance.registerSingleton<ConfigManager>(debugConfigMgr,
signalsReady: true);
// 初始化IM配置
IMManager().configIM(imSDKAppId: GetIt.instance<ConfigManager>().getImAppId());
}
3.3、代码中具体使用获取请求地址
代码中具体使用获取请求地址,可以直接使用GetIt.instance().get(ConfigConstant.kAppHost)获取请求服务器地址
String requestUrl = GetIt.instance().get(ConfigConstant.kAppHost) + url;
具体请求就可以使用
static Future<ResponseData?> getAppInfo(String url, {required AppInfoReq req}) async {
Map<String, dynamic>? params;
if (req != null) {
params = req.toJson();
}
String requestUrl = GetIt.instance<ConfigManager>().get(ConfigConstant.kAppHost) + url;
return await SDHttp.getInstance().get(requestUrl, params: params);
}
四、小结
flutter开发实战-Release环境与Debug调试环境配置实现,使用的是GetIt进行配置,不同环境实现不同的config配置即可,比如release请求地址固定的,如果是debug可以切换开发环境来处理更多额外的操作。文章来源:https://www.toymoban.com/news/detail-561214.html
学习记录,每天不停进步。文章来源地址https://www.toymoban.com/news/detail-561214.html
到了这里,关于flutter开发实战-Release环境与Debug调试环境配置实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!