You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter+Hive列表仅显示最后一项问题求助

问题分析与修复方案

核心问题

  1. 数据覆盖问题:AddWeight页面的Database实例未加载Hive中已有数据就直接添加新项,导致每次保存都会用新的单元素数组覆盖原有数据,最终仅保留最后一次添加的记录。
  2. 页面未刷新:从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 12:02:17