INEEDACHACHA

Secret Client (feat. dotenv, get_it, injectable) 본문

Flutter

Secret Client (feat. dotenv, get_it, injectable)

INEEDACHACHA 2025. 6. 24. 09:57
export '../secret/secret.dart';
export '../secret/secret_client.dart';
export '../secret/secret_exception.dart';

enum SecretKey { kakaoSDKAppKey, appURL, webURL, googlePlist, rsaPublicKey }

extension SecretKeyExtension on SecretKey {
  String get envKey {
    switch (this) {
      case SecretKey.kakaoSDKAppKey:
        return 'KAKAO_SDK_APP_KEY';
      case SecretKey.appURL:
        return 'APP_URL';
      case SecretKey.webURL:
        return 'WEB_URL';
      case SecretKey.googlePlist:
        return 'GOOGLE_PLIST';
      case SecretKey.rsaPublicKey:
        return 'RSA_PUBLIC_KEY';
    }
  }
}
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:injectable/injectable.dart';
import 'package:platform/secret/secret.dart';

abstract interface class SecretClient {
  String value(SecretKey key);
  List<String> checkSetup();
}

@LazySingleton(as: SecretClient)
class SecretClientImpl implements SecretClient {
  @override
  String value(SecretKey key) {
    final result = dotenv.env[key.envKey];
    if (result == null || result.isEmpty) {
      throw SecretException(key.envKey);
    }
    return result;
  }

  @override
  List<String> checkSetup() {
    return SecretKey.values.map((key) => value(key)).toList();
  }
}
class SecretException implements Exception {
  final String key;

  SecretException(this.key);

  @override
  String toString() => 'Secret "$key" is not defined in the .env file.';
}
  • 상기와 같이 추상 인터페이스를 만들어서 구현부와 인터페이스를 분리시켰다.

'Flutter' 카테고리의 다른 글

Flutter Google Fonts에 대해서  (0) 2025.05.08