flutter_dotenv | Flutter package
flutter pub add flutter_dotenv
OPENAI_API_KEY=my_api_key
api key나 함부로 공유되어선 안되는 정보를 저장
pubspec.yaml
#아래 코드는 .env 파일이 루트 폴더에 위치할 경우임
assets:
- .env
main.dart
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter/material.dart';
void main async {
//앱 실행시 dotenv 초기화
await dotenv.load();
runApp(const MyApp());
}
api 키 가져오기
class ApiService {
final String apiKey = dotenv.env['OPENAI_API_KEY'] ?? '';
}
dotenv.env 키워드를 통해 저장한 값을 가져올 수 있다. 만약 실패할 경우 null을 반환한다.
api 키를 사용하는 곳은 dart 코드 외에도 Android 폴더의 AndroidManifest 등 다양하다. AndroidManifest 파일에서 이를 사용하는 방식에 대해 소개한다.
카카오톡 로그인 api를 예시로 설명한다.
아래의 코드는 카카오 로그인을 위한 AndroidManifest 코드이다.
<activity
android:name="com.kakao.sdk.flutter.AuthCodeCustomTabsActivity"
android:exported="true">
<intent-filter android:label="flutter_web_auth">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- "kakao${YOUR_NATIVE_APP_KEY}://oauth" 형식의 앱 실행 스킴 설정 -->
<!-- 카카오 로그인 Redirect URI -->
<data android:scheme="kakao${YOUR_NATIVE_APP_KEY}" android:host="oauth"/>
</intent-filter>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</activity>
kakao${YOUR_NATIVE_APP_KEY} 에서 YOUR_NATIVE_APP_KEY 와 같이 추후 교체되는 부분을 Placeholder라고 한다.
Placeholder를 정상적으로 교체하기 위해선 아래의 설정들이 필요하다.
app 수준의 build.gradle 설정
def dotenv = new Properties()
def envFile = file("${rootProject.projectDir}/../.env")
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
if (envFile.exists()) {
envFile.withInputStream { stream -> dotenv.load(stream) }
} else {
throw new FileNotFoundException("Could not find .env file at: ${envFile.path}")
}
rootProject.projectDir 은 Gradle 파일의 루트 디렉토리를 의미하며 android 폴더의 위치이다. 이를 참고하여 자신의 env 폴더 위치로 설정해준다.
이후 app 수준의 build.gradle 내부 defaultConfig 내부에 아래 코드를 작성한다.
def kakaoKey = dotenv['KAKAO_NATIVE_APP_KEY']
if (kakaoKey == null) {
throw new GradleException("KAKAO_NATIVE_APP_KEY not found in .env file")
}
manifestPlaceholders += [YOUR_NATIVE_APP_KEY: kakaoKey]
Attribute application@name at AndroidManifest.xml:4:9-42 requires a placeholder substitution but no value for <applicationName> is provided.
위와 같은 오류가 발생했다면 아래와 같이 코드를 변경해준다.
[변경 전]
manifestPlaceholders = [YOUR_NATIVE_APP_KEY: kakaoKey]
[변경 후]
manifestPlaceholders += [YOUR_NATIVE_APP_KEY: kakaoKey]
[Flutter] Webview 라이브러리 - webview_flutter (0) | 2025.01.03 |
---|---|
[Flutter] 카메라 및 이미지 라이브러리 - ImagePicker (1) | 2024.12.19 |
[Flutter] HTTP 통신 라이브러리 - DIO (0) | 2024.12.18 |