You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter集成Superwall遇多错误:日志打印与订阅状态校验问题

Flutter集成Superwall问题解决方案

错误1:SuperwallDelegate方法未实现

问题分析

提示缺失handleLog、handleSuperwallEvent、paywallWillOpenDeepLink、paywallWillOpenURL等方法的实现,说明当前SuperwallDelegate接口的方法已更新,现有实现类未覆盖全部必填方法。

修复后的Delegate代码

import 'package:superwallkit_flutter/superwallkit_flutter.dart';

class MySuperwallDelegate implements SuperwallDelegate {
  // 实现缺失的handleLog方法
  @override
  void handleLog(LogLevel level, String scope, String message, Map<String, dynamic>? info) {
    print('[Superwall Log] [$level][$scope]: $message');
    info?.forEach((key, value) => print('[Superwall Log] $key: $value'));
  }

  // 实现缺失的handleSuperwallEvent方法
  @override
  void handleSuperwallEvent(SuperwallEvent event) {
    print('[Superwall Event] ${event.name} | Info: ${event.info}');
  }

  // 实现缺失的paywallWillOpenDeepLink方法
  @override
  void paywallWillOpenDeepLink(Uri url) {
    print('[Superwall] Will open deep link: $url');
  }

  // 实现缺失的paywallWillOpenURL方法
  @override
  void paywallWillOpenURL(Uri url) {
    print('[Superwall] Will open URL: $url');
  }

  // 实现剩余缺失的方法
  @override
  void paywallWillOpenUniversalLink(Uri url) {
    print('[Superwall] Will open universal link: $url');
  }

  // 保留已实现的其他方法
  @override
  void onPaywallEvent(PaywallEvent event) {
    print('[Superwall] Event: ${event.name} | Info: ${event.info}');
  }

  @override
  void onPaywallDismissed(PaywallInfo paywallInfo, PaywallCloseReason reason) {
    print('[Superwall] Dismissed: ${paywallInfo.identifier} | Reason: $reason');
  }

  @override
  void onPaywallPresented(PaywallInfo paywallInfo) {
    print('[Superwall] Presented: ${paywallInfo.identifier}');
  }

  @override
  void onPaywallWillPresent(PaywallInfo paywallInfo) {
    print('[Superwall] Will Present: ${paywallInfo.identifier}');
  }

  @override
  void onPaywallActionPerformed(PaywallAction action, PaywallInfo paywallInfo) {
    print('[Superwall] Action: ${action.name} | Paywall: ${paywallInfo.identifier}');
  }

  @override
  void onSubscriptionStatusChange(SubscriptionStatus newStatus) {
    print('[Superwall] Subscription status changed: $newStatus');
  }

  @override
  void onCustomPaywallAction(String actionName, PaywallInfo paywallInfo) {
    print('[Superwall] Custom Action: $actionName | Paywall: ${paywallInfo.identifier}');
  }

  @override
  void onDeepLinkOpened(String url) {
    print('[Superwall] Deep Link Opened: $url');
  }
}

错误2:SubscriptionStatus无active属性

问题分析

SubscriptionStatus枚举的成员名称已更新,旧版本的active已替换为subscribed。

修复后的代码

void checkSubscriptionAndShowPaywall() async {
  try {
    final status = await Superwall.shared.subscriptionStatus;

    print("Superwall subscription status: $status");

    // 使用正确的枚举成员
    if (status == SubscriptionStatus.subscribed) {
      showDialog(
        context: context,
        builder: (context) => AlertDialog(
          title: const Text("Already Subscribed"),
          content: const Text("You are already a premium user!"),
          actions: [
            TextButton(
              onPressed: () => Navigator.pop(context),
              child: const Text("OK"),
            ),
          ],
        ),
      );
    } else {
      Superwall.shared.registerPlacement('campaign_trigger');
    }
  } catch (e) {
    print("Error checking subscription via Superwall: $e");
  }
}

Main.dart初始化代码修复

问题分析

设置Delegate时传入类名而非实例,会导致初始化失败;同时需确保API密钥和RevenueCat配置正确填写。

修复后的初始化代码

void main() {
  runZonedGuarded<Future<void>>(() async {
    WidgetsFlutterBinding.ensureInitialized();

    // Revenuecat Initialization - 填写你的RevenueCat API密钥
    await Purchases.setDebugLogsEnabled(true);
    await Purchases.configure(
      PurchasesConfiguration('your_revenuecat_api_key'),
    );

    // Superwall initialization - 填写你的Superwall API密钥
    String apiKey = 'your_superwall_api_key';
    await Superwall.configure(apiKey);
    await Superwall.shared.setLogLevel(LogLevel.debug);
    // 传入Delegate实例而非类名
    Superwall.shared.setDelegate(MySuperwallDelegate());

    final prefs = await SharedPreferences.getInstance();
    String userId = prefs.getString('user_Id') ??
        'anon_${DateTime.now().millisecondsSinceEpoch}';

    await Purchases.logIn(userId);
    Superwall.shared.identify(userId);

    await Firebase.initializeApp(
      options: DefaultFirebaseOptions.currentPlatform,
    );

    runApp(const YourApp()); // 启动你的根Widget
  }, (error, stackTrace) {
    print('Error in main: $error');
    print(stackTrace);
  });
}

额外说明

  • 确保superwallkit_flutter依赖为最新版本,可在pubspec.yaml中更新版本号后执行flutter pub get
  • 日志打印功能通过handleLog方法实现,修复Delegate后即可正常输出日志

内容的提问来源于stack exchange,提问作者Tanu Purohit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 00:07:05