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

Flutter中Hive存储数据后重启App无法显示问题求助

问题解决:重启App后Hive保存的数据无法在界面显示

你的核心问题是App启动时没有从Hive中加载已保存的数据到tasks数组,导致界面的ListView没有数据可渲染。以下是修复步骤和完整代码:

关键修复点

  • 在initState方法中,从Hive读取存储的task数据并赋值给tasks,同时处理首次启动无数据的情况(避免null报错)
  • 补全State的泛型声明(_MyAppState extends State<MyApp>),符合Flutter语法规范

修复后的完整代码

import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart';

void main() async {
  await Hive.initFlutter();
  await Hive.openBox('mytasks');
  runApp(const MaterialApp(
    debugShowCheckedModeBanner: false,
    theme: ThemeData(brightness: Brightness.dark),
    home: MyApp(),
  ));
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  List tasks = [];
  late final Box box;

  @override
  void initState() {
    super.initState();
    box = Hive.box('mytasks');
    // 从Hive加载已保存的数据,若无数据则初始化空列表
    final savedTasks = box.get('task');
    if (savedTasks != null) {
      setState(() {
        tasks = savedTasks;
      });
    }
    print(box.get('task'));
  }

  void addData() async {
    await box.put('task', tasks);
    print(box.get('task'));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        centerTitle: true,
        title: const Text('To do app'),
      ),
      body: ListView.builder(
        itemCount: tasks.length,
        itemBuilder: (BuildContext context, int index) {
          return ListTile(title: Text('${tasks[index]}'));
        },
      ),
      floatingActionButton: FloatingActionButton(
        child: const Icon(Icons.add),
        onPressed: () {
          setState(() {
            tasks.add('value');
          });
          addData();
        },
      ),
    );
  }
}

代码说明

  1. initState加载数据:启动时从Hive取出task数据,若存在则更新tasks数组,通过setState触发界面重建,这样ListView就能显示已保存的内容
  2. late修饰Box:避免在初始化前访问box的潜在问题
  3. 处理空数据:首次打开App时box.get('task')会返回null,通过判断确保tasks始终是列表类型,防止报错

内容的提问来源于stack exchange,提问作者Izzat Sultanov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:27:18