第一次打开:

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']; final descriptionJson = json['description'];
KRDescription description; KRDescription description;
if (descriptionJson is String) { if (descriptionJson is String) {
try { //
description = KRDescription.fromJson(jsonDecode(descriptionJson)); if (descriptionJson.isEmpty) {
} catch (e) {
KRLogUtil.kr_e('解析描述信息失败: $e');
description = KRDescription(kr_features: []); 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>) { } else if (descriptionJson is Map<String, dynamic>) {
description = KRDescription.fromJson(descriptionJson); description = KRDescription.fromJson(descriptionJson);

View File

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

View File

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

View File

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