import 'package:flutter/material.dart'; import 'package:sensors_plus/sensors_plus.dart'; import 'package:vibration/vibration.dart'; import 'dart:async'; import '../models/record.dart'; import './record_page.dart'; import '../widgets/record_list.dart'; import '../data/mock_data.dart'; // 暂时使用模拟数据 import '../services/database_service.dart'; class HomePage extends StatefulWidget { const HomePage({Key? key}) : super(key: key); @override State createState() => _HomePageState(); } class _HomePageState extends State { StreamSubscription? _accelerometerSubscription; DateTime? _lastShakeTime; int _shakeCount = 0; bool _isNavigating = false; final _dbService = DatabaseService(); List records = []; @override void initState() { super.initState(); _initShakeDetection(); _loadRecords(); } /// 加载记录 Future _loadRecords() async { final loadedRecords = await _dbService.getAllRecords(); setState(() { records = loadedRecords; records.sort((a, b) => b.createTime.compareTo(a.createTime)); }); } /// 初始化摇晃检测 void _initShakeDetection() { _accelerometerSubscription = accelerometerEvents.listen((event) { // 主要检测左右摇晃(x轴) if (event.x.abs() > 25) { final now = DateTime.now(); if (_lastShakeTime == null) { _lastShakeTime = now; _shakeCount = 1; } else { // 缩短有效时间窗口,要求更快的摇晃 if (now.difference(_lastShakeTime!) < const Duration(milliseconds: 500)) { _shakeCount++; if (_shakeCount >= 2) { _navigateToRecordPageWithVibration(); _shakeCount = 0; _lastShakeTime = null; } } else { // 重置计数 _shakeCount = 1; } _lastShakeTime = now; } } }); } /// 带震动的记账页面导航 void _navigateToRecordPageWithVibration() async { if (_isNavigating) return; _isNavigating = true; // 添加震动反馈 if (await Vibration.hasVibrator() ?? false) { Vibration.vibrate(duration: 200); } _navigateToRecordPage(); } /// 导航到记账页面 void _navigateToRecordPage([Record? record]) { Navigator.push( context, MaterialPageRoute( builder: (context) => RecordPage( record: record, onSave: (newRecord) async { if (record != null) { await _dbService.updateRecord(newRecord); } else { await _dbService.insertRecord(newRecord); } await _loadRecords(); }, ), maintainState: false, ), ).then((_) { _isNavigating = false; }); } /// 删除记录 void _deleteRecord(String recordId) async { await _dbService.deleteRecord(recordId); await _loadRecords(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('记账本'), ), body: RecordList( records: records, onRecordTap: _navigateToRecordPage, onRecordDelete: _deleteRecord, ), floatingActionButton: FloatingActionButton( onPressed: () => _navigateToRecordPage(), child: const Icon(Icons.add), ), ); } @override void dispose() { _accelerometerSubscription?.cancel(); super.dispose(); } }