---
title: 初始化
canonical: https://developer.unico.io/zh-CN/dual-api/developers/sdks-and-tools/flutter/initialization
locale: zh-CN
generated_by: markdown-export
---

## 初始化位置

在**应用加载时**初始化 SDK — 通常在 `main()` 中，或在入口 widget 的 `initState()` 中。请参阅[最佳实践](/developers/sdks-and-tools/flutter/resources)，了解为何**不应**在采集按钮点击时初始化。

## 嵌入凭据

使用 Onboarding 团队提供的凭据，为每个平台实例化一个 `UnicoConfig` 对象：

```dart
final _configIos = UnicoConfig(
    getBundleIdentifier: "Your BundleIdentifier Ios",
    getHostKey: "Your HostKey Ios");

final _configAndroid = UnicoConfig(
    getBundleIdentifier: "Your BundleIdentifier Android",
    getHostKey: "Your HostKey Android");

void initUnicoCamera() {
  // UnicoCheck() 返回一个 UnicoCheckBuilder — 使用它来链式配置并调用 build()
  _unicoCheck = new UnicoCheck(
      listener: this,
      unicoConfigIos: _configIos,
      unicoConfigAndroid: _configAndroid);
}
```

## 实现 UnicoListener

在您的 widget 状态类中实现 `UnicoListener` 接口，并使用应用的业务逻辑覆盖回调方法：

```dart
class _MyHomePageState extends State<MyHomePage> implements UnicoListener {

  late UnicoCheckBuilder _unicoCheck;

  @override
  void onErrorUnico(UnicoError error) {}

  @override
  void onUserClosedCameraManually() {}

  @override
  void onSystemChangedTypeCameraTimeoutFaceInference() {}

  @override
  void onSystemClosedCameraTimeoutSession() {}
}
```

:::warning[必须实现的监听方法]
上述四个监听方法必须在您的项目中创建（即使没有任何逻辑）。否则，项目将无法成功编译。
:::

## 环境选择

环境的选择在初始化时确定。使用 `UnicoEnvironment` 枚举：

- `UnicoEnvironment.PROD` — 生产环境
- `UnicoEnvironment.UAT` — UAT 环境

```dart
_unicoCheck.setEnvironment(unicoEnvironment: UnicoEnvironment.UAT);
```

有关可用环境类型的完整列表，请参阅 [API 参考 > 初始化 API](/developers/sdks-and-tools/flutter/api-reference/initialization-api)。

## 生命周期

SDK 与后端的认证需要几秒钟。请**尽早初始化**（应用冷启动时），而非在用户点击采集按钮时初始化 — 否则用户会感受到点击与相机打开之间的延迟。