import 'package:flutter/material.dart'; import 'package:miaoji_zhang/shared/api/api_client.dart'; import 'package:miaoji_zhang/shared/services/guest_merge_service.dart'; import 'package:miaoji_zhang/shared/services/session_store.dart'; import 'package:miaoji_zhang/shared/widgets/app_controls.dart'; Future offerLocalDataRecovery( BuildContext context, { Map? guestSnapshot, }) async { final session = SessionStore.instance; Map? accountSnapshot; try { accountSnapshot = await session.pendingAccountSnapshot(); } catch (error) { if (context.mounted) { _showMessage(context, '本机历史数据读取失败:${apiErrorMessage(error)}'); } } if (accountSnapshot != null && context.mounted) { final shouldMerge = await showJzConfirmSheet( context, title: '发现本机历史数据', message: '检测到旧账号或旧后端留下的本地账单。为防止不同服务器的数据互相覆盖,这些数据已单独保留。是否导入当前账号的“本机历史数据”账本?', confirmLabel: '导入数据', ); if (shouldMerge) { try { final result = await GuestMergeService.merge( accountSnapshot, ledgerName: '本机历史数据', ); await session.clearPendingAccountSnapshot(); if (context.mounted) { _showMessage(context, '已导入 ${result.transactionCount} 笔本机历史账单'); } } catch (error) { if (context.mounted) { _showMessage(context, '本机历史数据暂未导入:${apiErrorMessage(error)}'); } } } } if (guestSnapshot?['hasData'] == true && context.mounted) { final shouldMerge = await showJzConfirmSheet( context, title: '发现游客数据', message: '是否将本机游客账单、分类和预算导入当前账号?数据会放入独立的“游客数据”账本,原游客数据仍保留在本机。', confirmLabel: '导入数据', ); if (shouldMerge) { try { final result = await GuestMergeService.merge(guestSnapshot!); if (context.mounted) { _showMessage(context, '已导入 ${result.transactionCount} 笔游客账单'); } } catch (error) { if (context.mounted) { _showMessage(context, '游客数据暂未导入:${apiErrorMessage(error)}'); } } } } } void _showMessage(BuildContext context, String message) { ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(message))); }