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(); }, ), ); } }
代码说明
- initState加载数据:启动时从Hive取出
task数据,若存在则更新tasks数组,通过setState触发界面重建,这样ListView就能显示已保存的内容 - late修饰Box:避免在初始化前访问box的潜在问题
- 处理空数据:首次打开App时
box.get('task')会返回null,通过判断确保tasks始终是列表类型,防止报错
内容的提问来源于stack exchange,提问作者Izzat Sultanov
相关产品推荐
相关产品推荐

