@@ -62,9 +62,19 @@ class SubscriptionPlansController
6262 Future <void > _refresh ({required bool force}) async {
6363 // generation 必须在任何 await 前创建,保证后发请求始终拥有提交权。
6464 final generation = ++ _generation;
65+ AppLogger .log (
66+ 'Subscription' ,
67+ '套餐刷新开始: generation=$generation force=$force ' ,
68+ );
6569 final service = ref.read (purchaseServiceProvider);
6670 final storefront = await _readStorefront (service);
67- if (! _isCurrent (generation)) return ;
71+ if (! _isCurrent (generation)) {
72+ AppLogger .log (
73+ 'Subscription' ,
74+ '套餐刷新丢弃: generation=$generation reason=storefrontOutdated' ,
75+ );
76+ return ;
77+ }
6878 final storefrontChanged =
6979 _lastStorefront != null &&
7080 storefront != null &&
@@ -75,50 +85,108 @@ class SubscriptionPlansController
7585 ref.read (subscriptionPlansNowProvider)().difference (lastSuccessAt) <
7686 subscriptionPlansRefreshInterval;
7787
78- if (! force && ! storefrontChanged && isFresh) return ;
88+ if (! force && ! storefrontChanged && isFresh) {
89+ AppLogger .log (
90+ 'Subscription' ,
91+ '套餐刷新跳过: generation=$generation reason=freshCache '
92+ 'storefront=${storefront ?? "unknown" }' ,
93+ );
94+ return ;
95+ }
7996
8097 final previousPlans = state.valueOrNull;
8198 if (storefrontChanged || previousPlans == null ) {
8299 state = const AsyncLoading ();
83100 }
101+ AppLogger .log (
102+ 'Subscription' ,
103+ '套餐刷新执行: generation=$generation storefront=${storefront ?? "unknown" } '
104+ 'storefrontChanged=$storefrontChanged '
105+ 'previousCount=${previousPlans ?.length ?? 0 }' ,
106+ );
84107
85108 try {
86109 // 先提交不依赖 iOS 促销资格查询的基础价格,缩短首次可见时间。
87110 final fastPlans = await service.fetchPlans (
88111 includeIntroEligibility: false ,
89112 );
90- if (! _isCurrent (generation)) return ;
113+ if (! _isCurrent (generation)) {
114+ AppLogger .log (
115+ 'Subscription' ,
116+ '套餐基础价格丢弃: generation=$generation reason=outdated' ,
117+ );
118+ return ;
119+ }
91120 final storefrontAfterFetch = await _readStorefront (service);
92- if (! _isCurrent (generation)) return ;
121+ if (! _isCurrent (generation)) {
122+ AppLogger .log (
123+ 'Subscription' ,
124+ '套餐基础价格丢弃: generation=$generation '
125+ 'reason=storefrontAfterFetchOutdated' ,
126+ );
127+ return ;
128+ }
93129 if (storefront != null &&
94130 storefrontAfterFetch != null &&
95131 storefront != storefrontAfterFetch) {
96132 // StoreKit 在查询期间完成了跨区切换,当前返回值可能属于旧 storefront。
133+ AppLogger .log (
134+ 'Subscription' ,
135+ '套餐刷新检测到 storefront 切换: before=$storefront '
136+ 'after=$storefrontAfterFetch generation=$generation ' ,
137+ );
97138 state = const AsyncLoading ();
98139 await refresh (force: true );
99140 return ;
100141 }
101142 state = AsyncData (fastPlans);
102143 _lastStorefront = storefrontAfterFetch ?? storefront ?? _lastStorefront;
103144 _lastSuccessAt = ref.read (subscriptionPlansNowProvider)();
145+ AppLogger .log (
146+ 'Subscription' ,
147+ '套餐基础价格刷新成功: generation=$generation count=${fastPlans .length } '
148+ 'ids=${fastPlans .map ((p ) => p .planId ).toList ()}' ,
149+ );
104150
105151 // 再从 SDK 缓存补全促销资格;失败时继续保留已可用的基础价格。
106152 try {
107153 final completePlans = await service.fetchPlans ();
108- if (! _isCurrent (generation)) return ;
154+ if (! _isCurrent (generation)) {
155+ AppLogger .log (
156+ 'Subscription' ,
157+ '套餐完整价格丢弃: generation=$generation reason=outdated' ,
158+ );
159+ return ;
160+ }
109161 state = AsyncData (completePlans);
110162 _lastSuccessAt = ref.read (subscriptionPlansNowProvider)();
163+ AppLogger .log (
164+ 'Subscription' ,
165+ '套餐完整价格刷新成功: generation=$generation '
166+ 'count=${completePlans .length } '
167+ 'ids=${completePlans .map ((p ) => p .planId ).toList ()}' ,
168+ );
111169 } catch (error, stackTrace) {
112170 AppLogger .log ('Subscription' , '套餐促销资格刷新失败,保留基础价格: $error ' );
113171 AppLogger .log ('Subscription' , '$stackTrace ' );
114172 }
115173 } catch (error, stackTrace) {
116- if (! _isCurrent (generation)) return ;
174+ if (! _isCurrent (generation)) {
175+ AppLogger .log (
176+ 'Subscription' ,
177+ '套餐刷新失败但已过期: generation=$generation error=$error ' ,
178+ );
179+ return ;
180+ }
117181 if (! storefrontChanged && previousPlans != null ) {
118182 state = AsyncData (previousPlans);
119183 AppLogger .log ('Subscription' , '套餐刷新失败,保留会话缓存: $error ' );
120184 } else {
121185 state = AsyncError (error, stackTrace);
186+ AppLogger .log (
187+ 'Subscription' ,
188+ '套餐刷新失败,进入错误态: generation=$generation error=$error ' ,
189+ );
122190 }
123191 }
124192 }
0 commit comments