优化:支付页面取消支付的时候恢复页面状态

This commit is contained in:
ivan 2026-04-16 22:26:15 +08:00
parent 8f92b9a61d
commit 01362f00a5
4 changed files with 37 additions and 17 deletions

View File

@ -4,7 +4,6 @@
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="29" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />

View File

@ -54,7 +54,7 @@
]
},
"analytics": {
"debugLogs": false,
"debugLogs": true,
"adjust": {
"appToken": "chflzzr4x5hc",
"environment": "sandbox",

View File

@ -27,7 +27,8 @@ class PurchaseScreen extends StatefulWidget {
State<PurchaseScreen> createState() => _PurchaseScreenState();
}
class _PurchaseScreenState extends State<PurchaseScreen> {
class _PurchaseScreenState extends State<PurchaseScreen>
with WidgetsBindingObserver {
List<PaymentProductItem> _products = [];
bool _loading = true;
String? _loadError;
@ -35,8 +36,17 @@ class _PurchaseScreenState extends State<PurchaseScreen> {
int? _selectedIndex;
ThirdPartyPaymentWatch? _thirdPartyWatch;
void _resetPayingState() {
if (!mounted) return;
setState(() {
_paying = false;
_selectedIndex = null;
});
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
_thirdPartyWatch?.dispose();
super.dispose();
}
@ -44,6 +54,7 @@ class _PurchaseScreenState extends State<PurchaseScreen> {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
// Defer network + setState until after first frame so the route can paint and
// the main isolate stays responsive (avoids input ANR when opening this screen).
WidgetsBinding.instance.addPostFrameCallback((_) {
@ -53,6 +64,14 @@ class _PurchaseScreenState extends State<PurchaseScreen> {
});
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
// app_client Google Play /
if (state == AppLifecycleState.resumed && _paying && mounted) {
_resetPayingState();
}
}
Future<void> _loadProducts({bool isInitial = false}) async {
if (!isInitial) {
setState(() {
@ -243,7 +262,10 @@ class _PurchaseScreenState extends State<PurchaseScreen> {
});
final picked = await _pickPaymentMethod(methods);
if (!mounted || picked == null) return;
if (!mounted || picked == null) {
_resetPayingState();
return;
}
final pm = picked.paymentMethod?.trim() ?? '';
if (pm.isEmpty) {
@ -339,6 +361,7 @@ class _PurchaseScreenState extends State<PurchaseScreen> {
createResponse: created,
createPaymentApp: currentBackendAppType(),
);
_resetPayingState();
return;
}
@ -418,18 +441,16 @@ class _PurchaseScreenState extends State<PurchaseScreen> {
analyticsProduct: item,
);
await NativeIapCoordinator.purchaseGooglePlay(
sink: sink,
userId: uid,
activityId: aid,
storeProductId: pid,
createPaymentApp: currentBackendAppType(),
);
if (mounted) {
setState(() {
_paying = false;
});
try {
await NativeIapCoordinator.purchaseGooglePlay(
sink: sink,
userId: uid,
activityId: aid,
storeProductId: pid,
createPaymentApp: currentBackendAppType(),
);
} finally {
_resetPayingState();
}
}

View File

@ -2,7 +2,7 @@ name: funymee_ai
description: "FunyMee AI Application."
publish_to: 'none'
version: 1.0.0+1
version: 1.0.14+14
environment:
sdk: ^3.11.1