我正在开发一个Flutter应用程序,我首先要说的是,我是一个初学者,我处于移动开发的初期,我正在使用Hive在设备上存储数据,在调试时,我看到当我添加数据时,Hive正确更新,但是当我关闭并重新启动应用程序时,我失go 了一切,下面我将把打开盒子的主类的代码和使用蜂巢存储数据的另一个类的代码放在一起,项目的其他类不接触蜂巢,有人能帮助我吗?
主类:
import 'package:flutter/material.dart';
import 'package:todo/pages/home_page.dart';
import 'package:hive_flutter/hive_flutter.dart';
void main() async {
//init the hive
await Hive.initFlutter();
//open a box
var box = await Hive.openBox('myBox');
//run the app
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: HomePage(),
theme: ThemeData(primarySwatch: Colors.purple),
);
}
}
主页类:
import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:todo/pages/topic_page.dart';
import 'package:todo/util/dialog_box.dart';
import 'package:todo/util/topic_tile.dart';
class Topic {
String topicName;
List todo = [
["Add your first To-Do", false]
];
Topic(this.topicName);
void addTodo(List todoList) {
todo.add(todoList);
}
void removeTodo(int index) {
todo.removeAt(index);
}
String getName() {
return topicName;
}
List getTodo() {
return todo;
}
}
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
//reference the box
final _myBox = Hive.box('mybox');
//text controller
final _controller = TextEditingController();
//Database
List topic = [];
@override
void initState() {
if (_myBox.get("TOPIC") != null) {
topic = _myBox.get("TOPIC");
}
super.initState();
}
//update the topic
void updateTopic() {
_myBox.put("TOPIC", topic);
}
//save new task
void saveNewTopic() {
setState(() {
topic.add(Topic(_controller.text));
_controller.clear();
});
Navigator.of(context).pop();
}
//new topic function
void createNewTopic() {
showDialog(
context: context,
builder: (context) {
return DialogBox(
text: "Add a new topic",
controller: _controller,
onSave: saveNewTopic,
onCancel: () => Navigator.of(context).pop(),
);
});
updateTopic();
}
//delete task
void deleteTopic(int index) {
setState(() {
topic.removeAt(index);
});
updateTopic();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Color.fromARGB(255, 255, 190, 93),
appBar: AppBar(
title: const Align(
alignment: Alignment.center,
child: Text(
"Topic",
style: TextStyle(fontSize: 32, color: Colors.white),
))),
floatingActionButton: FloatingActionButton(
onPressed: createNewTopic,
child: Icon(Icons.add),
),
body: ListView.builder(
itemCount: topic.length,
itemBuilder: (context, index) {
return GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => TopicPage(topic: topic[index]),
),
);
},
child: TopicTile(
topicName: topic[index].getName(),
deleteFunction: (context) => deleteTopic(index),
),
);
}));
}
}