# 초기화하기

Wepin widget flutter SDK를 초기화하는 방법입니다.

## 초기화하기

먼저 위핀 인스턴스를 생성하고 앱 위젯의 BuildContext와 앱 등록 후 할당 받은 앱 ID와 앱 키로 위핀 위젯을 초기화 합니다.

```dart
import 'package:wepin_flutter/wepin.dart';
import 'package:wepin_flutter/wepin_delegate.dart';
import 'package:wepin_flutter/wepin_inputs.dart';
import 'package:wepin_flutter/wepin_outputs.dart';

final String _appId = "app_id_eg12sf3491azgs520";
final String _appKey = "ak_test_ghq1D5s1sfG234sbnhdsw24mnovk313";
late Wepin _wepin;

@override
void initState() {
  super.initState();
  _wepin = Wepin();
	_handleDeepLink() // 딥링크 처리함수 
}

@override
Widget build(BuildContext context) {
  print('SampleApp_build');
  return MaterialApp(
    home: Scaffold(
      appBar: AppBar(
        title: const Text('Wepin Flutter Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
                onPressed: () => _initialize(context),
                child: const Text('initialize')),
					],
        ),
      ),
    ),
  );
}


void _initialize(BuildContext context) {
    WidgetAttributes widgetAttributes = WidgetAttributes('ko', 'krw');
    WepinOptions wepinOptions =
        WepinOptions(_appId, _appSdkKey, widgetAttributes);
    _wepin.initialize(context, wepinOptions);
  }
```

### WepinOptions

초기화에 사용되는 파라미터 <mark style="color:blue;">`WepinOptions`</mark> 클래스의 인터페이스는 아래와 같습니다.

```dart
public class WepinOptions {
	final String _appId; // 앱 아이디
  final String _appKey; // 앱 키
  final WidgetAttributes _widgetAttributes; // 위젯 속성
}

public class WidgetAttributes {
final String _defaultLanguage;
  final String _defaultCurrency;
}
```

* **appId**: *String*\
  앱 등록시 할당 받은 ID
* **appKey**: *String*\
  앱 등록시 할당 받은 키 값
* **attributes**: *Object (optional)*\
  위핀 위젯의 속성 값
  * **defaultLanguage**: *String*\
    위젯 기본 언어 설정, 기본 값은 `ko`입니다. 현재 지원하는 언어는 `en`, `ko` 이렇게 2가지 입니다.
  * **defaultCurrency:** *String*\
    위젯 기본 통화 설정, 기본 값은 `KRW`입니다. 현재 지원하는 통화는 `USD`, `KRW` 이렇게 2가지 입니다.<br>

## isInitialized

<mark style="color:blue;">`isInitialized`</mark> 메서드를 이용해서 Wepin이 정상적으로 초기화 되었는지 확인할 수 있습니다. &#x20;

반환값은 아래와 같습니다.&#x20;

* *bool*\
  init 결괏값, init이 정상적으로 잘 된 경우 <mark style="color:orange;">`true`</mark> 실패한 경우 <mark style="color:orange;">`false`</mark> 를 반환합니다.

```dart
if(_wepin.isInitialized()) {
    // Success to initialize wepin
}
```

## DeepLink / Universal Link 처리하기

앱의 Info 파일 또는 AndroidManifest에 추가한 URL schemes 을 처리하기 위해 위핀을 사용하는 앱에 아래와 같이 처리하는 코드를 추가합니다.&#x20;

```dart
import 'package:uni_links/uni_links.dart';

StreamSubscription? _sub;

// Handle incoming links - the ones that the app will recieve from the OS
// while already started.

  void _handleDeepLink() {
    if (!kIsWeb) {
      // It will handle app links while the app is already started - be it in
      // the foreground or in the background.
      _sub = uriLinkStream.listen((Uri? uri) {
        if (!mounted) return;
        print('got_uri: $uri');
        _wepin.handleWepinLink(uri!);
      }, onError: (Object err) {
        if (!mounted) return;
        print('got_err: $err');
      });
    }
  }
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.wepin.io/deprecated/flutter-sdk/initialization.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
