flutter开发实战-Release环境与Debug调试环境配置实现

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可以切换开发环境来处理更多额外的操作。

学习记录,每天不停进步。

猜你喜欢

转载自blog.csdn.net/gloryFlow/article/details/131642290