---
title: "在 Flutter SDK 的 Observer 模式下展示流程"
description: "在 Flutter 应用中以 Observer 模式展示流程和付费墙编辑工具付费墙，同时使用自己的代码处理购买。"
---

如果你使用编辑工具自定义了流程或付费墙，就无需在移动应用代码中手动处理其渲染逻辑来向用户展示它。这类流程或付费墙本身已包含展示内容和展示方式的完整定义。

:::warning
本节仅适用于[观察者模式](observer-vs-full-mode)。如果你不在观察者模式下工作，请参阅[展示流程与付费墙](flutter-present-paywalls)主题。
:::
:::info
此功能需要 Adapty Flutter SDK 4.0 或更高版本——此前仅在 iOS 和 Android 原生 SDK 中提供。请参阅[迁移指南](migration-to-flutter-sdk-v4)进行升级。
:::

<details>
   <summary>开始展示流程前（点击展开）</summary>
1. 完成 Adapty 与 [App Store](initial_ios) 以及[与 Google Play](initial-android) 的初始集成。
   2. 安装并配置 Adapty SDK，务必将 `observerMode` 参数设置为 `true`。请参阅 [Flutter SDK 安装指南](sdk-installation-flutter#activate-adapty-module-of-adapty-sdk)。
   3. 在 Adapty 看板中[创建产品](create-product)。
   4. [在编辑工具中配置流程或付费墙](create-paywall)，并为其分配产品。
   5. [创建版位并将流程或付费墙分配给对应版位](create-placement)。
   6. 在移动端应用代码中[获取流程及其配置](flutter-get-pb-paywalls)。
</details>

在观察者模式下，SDK 不会代您发起购买。当用户点击 Adapty 渲染的流程或付费墙中的购买或恢复按钮时，SDK 会调用您的 `AdaptyUIObserverModeResolver`——请在其中用您自己的代码执行购买或恢复操作。

1. 实现 `AdaptyUIObserverModeResolver`：
   ```dart showLineNumbers title="Flutter"
   class MyObserverModeResolver extends AdaptyUIObserverModeResolver {
     @override
     void observerModeDidInitiatePurchase(
       AdaptyUIFlowView view,
       AdaptyPaywallProduct product,
       void Function() onStartPurchase,
       void Function() onFinishPurchase,
     ) {
       onStartPurchase(); // the view shows its loading indicator
       // make the purchase with your own code, then:
       onFinishPurchase(); // the view hides the loading indicator
     }

     @override
     void observerModeDidInitiateRestore(
       AdaptyUIFlowView view,
       void Function() onStartRestore,
       void Function() onFinishRestore,
     ) {
       onStartRestore();
       // restore purchases with your own code, then:
       onFinishRestore();
     }
   }
   ```

`observerModeDidInitiatePurchase` 方法会通知你用户已发起购买，`observerModeDidInitiateRestore` 则通知你用户已发起恢复购买。收到通知后，请触发你自定义的购买或恢复流程。

另外，请记得调用以下回调方法，将购买或恢复流程的进展通知给 AdaptyUI。这对于正确的流程行为（例如显示加载动画等）是必要的：
| 回调函数 | 描述 |
| :----------------- | :------------------------------------------------------------------------------- |
| onStartPurchase()  | 应调用此回调函数，通知 AdaptyUI 购买已开始。  |
| onFinishPurchase() | 应调用此回调函数，通知 AdaptyUI 购买已完成。 |
| onStartRestore()   | 应调用此回调函数，通知 AdaptyUI 恢复购买已开始。   |
| onFinishRestore()  | 应调用此回调函数，通知 AdaptyUI 恢复购买已完成。  |
2. 在展示任何界面之前注册解析器：

   ```dart showLineNumbers title="Flutter"
   AdaptyUI().setObserverModeResolver(MyObserverModeResolver());
   ```

3. 按常规方式创建并展示流程视图：[获取流程并创建其视图](flutter-get-pb-paywalls)，然后[展示它](flutter-present-paywalls)。无需额外参数——一旦注册了解析器，所有由 Adapty 渲染的流程或付费墙都会通过它来处理购买和恢复操作。
:::warning
别忘了[上报交易并将其关联到付费墙](report-transactions-observer-mode-flutter)。否则，Adapty 将无法识别该交易，也无法确定购买来源的付费墙。
:::