第一次打开:

App启动 → 设备登录 → 保存Token → 进入主页

  后续打开:
  App启动 → 检测本地Token → Token有效 → 自动登录 → 进入主页
                        ↓
                    Token失效/无效 → 自动设备登录 → 更新Token → 进入主页
This commit is contained in:
Rust 2025-10-18 14:30:46 +08:00
parent 06a198a975
commit a3b7c418b1
4 changed files with 39 additions and 18 deletions

View File

@ -193,11 +193,16 @@ class KRPackageListItem {
final descriptionJson = json['description'];
KRDescription description;
if (descriptionJson is String) {
try {
description = KRDescription.fromJson(jsonDecode(descriptionJson));
} catch (e) {
KRLogUtil.kr_e('解析描述信息失败: $e');
//
if (descriptionJson.isEmpty) {
description = KRDescription(kr_features: []);
} else {
try {
description = KRDescription.fromJson(jsonDecode(descriptionJson));
} catch (e) {
KRLogUtil.kr_e('解析描述信息失败: $e');
description = KRDescription(kr_features: []);
}
}
} else if (descriptionJson is Map<String, dynamic>) {
description = KRDescription.fromJson(descriptionJson);

View File

@ -622,11 +622,12 @@ class KRLoginView extends GetView<KRLoginController> {
///
void _showDropdown(BuildContext context) {
final theme = Theme.of(context);
final mediaQuery = MediaQuery.of(context);
if (controller.isDropdownVisible) return;
controller.overlayEntry = OverlayEntry(
builder: (_) => Positioned(
width: MediaQuery.of(context).size.width - 40.w,
builder: (BuildContext overlayContext) => Positioned(
width: mediaQuery.size.width - 40.w,
child: CompositedTransformFollower(
link: controller.kr_layerLink,
showWhenUnlinked: false,

View File

@ -100,7 +100,7 @@ class KRPurchaseMembershipController extends GetxController {
await _iniUserInfo();
await kr_getAlreadySubscribe();
await kr_fetchPackages();
await kr_fetchPaymentMethods();
// await kr_fetchPaymentMethods(); // /v1/app/payment/methods
//
kr_showPlanSelector.value = kr_plans.length > 1;
@ -300,11 +300,12 @@ class KRPurchaseMembershipController extends GetxController {
return false;
}
if (kr_selectedPaymentMethodIndex.value < 0 ||
kr_selectedPaymentMethodIndex.value >= kr_paymentMethods.length) {
KRCommonUtil.kr_showToast('请选择支付方式');
return false;
}
//
// if (kr_selectedPaymentMethodIndex.value < 0 ||
// kr_selectedPaymentMethodIndex.value >= kr_paymentMethods.length) {
// KRCommonUtil.kr_showToast('请选择支付方式');
// return false;
// }
return true;
}
@ -312,8 +313,14 @@ class KRPurchaseMembershipController extends GetxController {
///
Future<void> kr_processPurchaseAndCheckout() async {
final selectedPlan = kr_plans[kr_selectedPlanIndex.value];
final selectedPaymentMethod =
kr_paymentMethods[kr_selectedPaymentMethodIndex.value];
// 使 ID (1) 'alipay'
final paymentMethodId = kr_paymentMethods.isNotEmpty && kr_selectedPaymentMethodIndex.value >= 0
? kr_paymentMethods[kr_selectedPaymentMethodIndex.value].id
: 1;
final paymentPlatform = kr_paymentMethods.isNotEmpty && kr_selectedPaymentMethodIndex.value >= 0
? kr_paymentMethods[kr_selectedPaymentMethodIndex.value].platform
: 'alipay';
//
final quantity = kr_getSelectedQuantity();
@ -334,13 +341,13 @@ class KRPurchaseMembershipController extends GetxController {
? await _kr_subscribeApi.kr_renewal(
subscribeId,
quantity,
selectedPaymentMethod.id,
paymentMethodId,
'',
)
: await _kr_subscribeApi.kr_purchase(
selectedPlan.kr_id,
quantity,
selectedPaymentMethod.id,
paymentMethodId,
'',
);
@ -356,7 +363,7 @@ class KRPurchaseMembershipController extends GetxController {
arguments: {
'url': uri,
'order': order,
'payment_type': selectedPaymentMethod.platform,
'payment_type': paymentPlatform,
},
),
);

View File

@ -44,7 +44,7 @@ class HttpUtil {
/// dio进行配置
void initDio() {
Loggy.initLoggy(logPrinter: PrettyPrinter());
Loggy.initLoggy(logPrinter: _KRSimpleLogPrinter());
_dio.interceptors.add(LoggyDioInterceptor(requestBody: true));
_dio.options.baseUrl = AppConfig.getInstance().baseUrl;
//
@ -290,3 +290,11 @@ class MyInterceptor extends Interceptor {
handler.next(err);
}
}
///
class _KRSimpleLogPrinter extends LoggyPrinter {
@override
void onLog(LogRecord record) {
print(record.message);
}
}