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

Go_Router重定向逻辑引发购买后无限循环问题求助

GoRouter跳转无限循环问题原因及解决方法

问题原因

购买成功后,RevenueCatProvider中的entitlement状态没有及时更新,导致GoRouter的redirect方法仍然读取到旧的Entitlement.free状态。当调用context.go('/')跳转到首页时,redirect逻辑会再次触发,判断权限仍为免费,又将用户重定向到/trialwall,从而形成无限循环。

同时,当前的redirect逻辑没有排除用户已经在/trialwall页面的情况——即使用户处于试用墙页面,只要权限是免费,就会重复触发跳转,进一步加剧循环问题。

解决方法

1. 购买成功后主动刷新权限状态

在购买成功的回调中,主动获取最新的用户权限信息,并更新RevenueCatProvider中的entitlement值,确保状态同步:

Future<void> _startTrial(BuildContext context) async {
  setState(() {
    _isLoading = true;
  });

  try {
    await Purchases.purchasePackage(widget.offering!.monthly!);
    // 获取最新的用户权限信息
    final customerInfo = await Purchases.getCustomerInfo();
    // 更新Provider中的权限状态
    Provider.of<RevenueCatProvider>(context, listen: false)
        .updateEntitlement(customerInfo);
    context.go('/');
  } catch (e) {
    print("购买失败: $e");
  } finally {
    setState(() {
      _isLoading = false;
    });
  }
}

需要在RevenueCatProvider中添加状态更新方法:

class RevenueCatProvider extends ChangeNotifier {
  Entitlement _entitlement = Entitlement.free;

  Entitlement get entitlement => _entitlement;

  void updateEntitlement(CustomerInfo customerInfo) {
    // 根据实际RevenueCat返回的权限结构调整判断逻辑
    _entitlement = customerInfo.entitlements.active.isNotEmpty 
        ? Entitlement.premium 
        : Entitlement.free;
    notifyListeners();
  }
}

2. 优化redirect逻辑,避免重复跳转

在redirect方法中,判断用户当前是否已经处于/trialwall页面,如果是且权限为免费,则不执行重定向:

redirect: (context, state) async {
  if (prefs.getBool('seen') != true) {
    return '/onboarding';
  }

  var userModel = await DatabaseHelper().getAllUsers();
  if (userModel.isEmpty) {
    return '/input';
  }

  Entitlement entitlement =
      Provider.of<RevenueCatProvider>(context, listen: false).entitlement;

  // 仅当用户不在trialwall页面且权限为免费时,才跳转试用墙
  if (entitlement == Entitlement.free && state.location != '/trialwall') {
    return '/trialwall';
  }

  return '/';
},

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:04:53