我创建了一个简单的应用程序,使用配置单元从本地存储中获取数据,当我尝试调用 updateData 时,数据列表是一个空列表,这是我的代码,我在过去几天尝试了一切,我不知道什么我做错了,请帮忙......提前致谢。
home_page.dart:
import 'package:flutter/material.dart';
import 'package:flutter_hive_ex_14aug/data/database_user_list.dart';
import 'package:hive_flutter/hive_flutter.dart';
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
//reference hive box
var mybox = Hive.box("mybox");
//refence database
DatabaseUserList db = DatabaseUserList();
//init state
@override
void initState() {
//check
if (mybox.get("userList") == null) {
db.createSampleData();
print("userList database is null");
} else {
print("userList database found");
db.loadData();
}
super.initState();
}
TextEditingController _controller = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
body: ListView.builder(
itemCount: db.userList.length,
itemBuilder: (context, index) => Text(db.userList[index][0]),
),
bottomNavigationBar: BottomAppBar(
child: Row(
children: [
Expanded(
child: TextField(
controller: _controller,
)),
Expanded(
child: MaterialButton(
onPressed: () {
setState(() {
db.userList.add([_controller.text]);
print(db.userList);
db.updateData();
// mybox.put("userList", [_controller.text]);
});
},
child: Text("Add"),
),
)
],
),
),
);
}
}
database_user_list.dart:
import 'package:hive_flutter/hive_flutter.dart';
class DatabaseUserList {
//reference hive box
var mybox = Hive.box("mybox");
List userList = [];
void createSampleData() {
userList = [
["Chris"],
["Steve"],
];
}
void loadData() {
mybox.get("userList");
}
//update data
void updateData() {
mybox.put("userList", userList);
}
}
单击添加按钮时,新名称会显示在列表视图中,但尚未写入本地数据库。
您实际上并未将 Hive 框中的数据加载到您的
userList
中。
void loadData() {
userList = mybox.get("userList") ?? [];
}
这会将 Hive 框中的数据加载到您的
userList
中。如果框中不存在“userList”键,则默认为空列表。
此外,在您的
initState
方法中,您应该调用 db.loadData()
@override
void initState() {
if (mybox.get("userList") == null) {
db.createSampleData();
db.updateData(); /// Save the sample data to the box
print("userList database is null");
} else {
print("userList database found");
db.loadData();
}
super.initState();
}
确保在应用程序首次启动时将示例数据保存到框中。