fix(mobile-app): 修复待办操作完成后无法正确返回的问题

问题:
- 合同签署成功后使用 context.go('/profile') 直接跳转
- 导致从待办操作或待签合同列表 push 进来时收不到返回值
- 认种向导完成后同样使用 go 跳转,不会返回

修复:
1. contract_signing_page.dart
   - 签署成功后检查 canPop() 判断是否可以返回
   - 如果可以 pop(从待办操作/待签列表进入),返回 pop(true)
   - 否则(从认种流程/KYC流程进入),跳转 go('/profile')

2. pending_actions_page.dart
   - ADOPTION_WIZARD 添加后置检查(通过待签合同判断认种是否完成)
   - 在 _checkIfAlreadyCompleted 中添加 ADOPTION_WIZARD 检查逻辑

兼容性:
- 不影响正常的认种流程(使用 go 进入合同签署)
- 不影响 KYC 流程(使用 go 进入合同签署)
- 待签合同列表页面正常工作

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-01-03 18:21:26 -08:00
parent d81e230639
commit e08959263a
2 changed files with 28 additions and 5 deletions

View File

@ -354,11 +354,15 @@ class _ContractSigningPageState extends ConsumerState<ContractSigningPage> {
});
if (mounted) {
// context canPop context
final outerContext = context;
final canPopBack = outerContext.canPop();
//
await showDialog(
context: context,
barrierDismissible: false,
builder: (context) => AlertDialog(
builder: (dialogContext) => AlertDialog(
title: const Row(
children: [
Icon(Icons.check_circle, color: Colors.green, size: 28),
@ -370,9 +374,14 @@ class _ContractSigningPageState extends ConsumerState<ContractSigningPage> {
actions: [
TextButton(
onPressed: () {
Navigator.of(context).pop(); //
// "我的"
context.go('/profile');
Navigator.of(dialogContext).pop(); //
// pop push true
//
if (canPopBack) {
outerContext.pop(true);
} else {
outerContext.go('/profile');
}
},
child: const Text('完成'),
),

View File

@ -114,7 +114,10 @@ class _PendingActionsPageState extends ConsumerState<PendingActionsPage> {
case 'ADOPTION_WIZARD':
//
final result = await context.push<bool>(RoutePaths.plantingQuantity);
return result == true;
if (result == true) return true;
// true
//
return await _checkIfAlreadyCompleted(action);
case 'SETTLE_REWARDS':
// API
@ -258,6 +261,17 @@ class _PendingActionsPageState extends ConsumerState<PendingActionsPage> {
}
return false;
case 'ADOPTION_WIZARD':
//
//
final contractService = ref.read(contractSigningServiceProvider);
final pendingTasks = await contractService.getPendingTasks();
if (pendingTasks.isNotEmpty) {
debugPrint('[PendingActionsPage] 存在待签合同,认种向导已完成');
return true;
}
return false;
//
default:
return false;