Flutter開発実践~リリース環境とデバッグデバッグ環境構成実装~

Flutter開発実践~リリース環境とデバッグデバッグ環境構成実装~

開発では、リリースやデバッグ関連のリクエストなどの構成の分離が頻繁に発生します。前回の実装はここに記録されています。
実装する前に、git_it を確認する必要があります。

一、ゲット

開発プロセス中に、アプリのロジックの一部をウィジェットから分離する必要があります。状態管理にはgit_itとproviderのどちらも使用できますが、ここではgit_itを使用しますが、git_itを使用する理由は、取得時にコンテキストに依存する必要がないためです。

GetIt は、Splat からインスピレーションを得た追加機能を備えた、Dart および Flutter プロジェクト用のシンプルなサービス ロケーターです。これは、たとえば UI からオブジェクトにアクセスするために、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>();

リリースおよびデバッグ関連のリクエストには git_it を使用する必要があります。

2、Configを実現する

リリース関連のリクエスト構成とデバッグ関連のリクエスト構成を区別するには、ConfigManager を実装する必要があります。

/// 定义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、リリース ReleaseConfigMgr の設定を実現する

リリース環境の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. デバッグ設定 DebugConfigMgr の実装

デバッグ構成の実装 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();
  }
}

3. get_it を使用して、リリースおよびデバッグに対応する構成を設定します。

get_it を使用して、リリースおよびデバッグに対応する構成を設定します。
デバッグ構成とリリース構成が異なるため、main.dart と main_debug.dart を使用して異なるエントリを表しています。

3.1、main.dartで設定する

// リリース

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 で設定する

// デバッグ

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) を直接使用してリクエスト サーバー アドレスを取得します。

文字列 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);
  }

4. まとめ

Flutter 開発の実践 - リリース環境とデバッグ環境構成の実装。GetIt を使用して構成します。異なる環境では異なる構成構成を実装できます。たとえば、リリース リクエストのアドレスは固定されており、デバッグの場合は開発環境を切り替えてより多くの処理を行うことができます。追加操作。

学習記録、日々改善を続けてください。

おすすめ

転載: blog.csdn.net/gloryFlow/article/details/131642290