Flutter+Hive列表仅显示最后一项问题求助
问题分析与修复方案
核心问题
- 数据覆盖问题:
AddWeight页面的Database实例未加载Hive中已有数据就直接添加新项,导致每次保存都会用新的单元素数组覆盖原有数据,最终仅保留最后一次添加的记录。 - 页面未刷新:从
AddWeight返回HomePage时,未重新加载数据,无法实时更新列表内容。
具体修复步骤
1. 完善Database类的loadData方法
处理Hive中无初始数据的情况,避免weightList变为null:
import 'package:hive_flutter/hive_flutter.dart'; class Database { final _myBox = Hive.box("mybox"); List weightList = []; void loadData() { // 若Hive中无数据,返回空数组而非null weightList = _myBox.get("WEIGHTLIST") ?? []; } void saveData() { _myBox.put("WEIGHTLIST", weightList); } }
2. 修改AddWeight页面的保存逻辑
保存前先加载已有数据,再追加新项,同时优化导航方式:
void _saveWeightAndDate() { // 先加载数据库中已有的所有数据 db.loadData(); setState(() { db.weightList.add([_currentValue, formattedDate]); }); db.saveData(); // 直接返回上一页(避免栈中堆积多个HomePage实例) Navigator.pop(context); }
3. 让HomePage返回时自动刷新数据
在HomePage的悬浮按钮点击事件中,监听返回动作并重新加载数据:
floatingActionButton: FloatingActionButton( backgroundColor: Color(0xff006B8F), onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (context) => const AddWeight(), ), ).then((_) { // 从AddWeight返回后,重新加载数据并刷新页面 db.loadData(); setState(() {}); }); }, child: const Icon(Icons.add), ),
内容的提问来源于stack exchange,提问作者Biobrolly
相关产品推荐
相关产品推荐

