Flutter Hive,数据未写入本地

问题描述 投票:0回答:1

我创建了一个简单的应用程序,使用配置单元从本地存储中获取数据,当我尝试调用 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);
  }
}

单击添加按钮时,新名称会显示在列表视图中,但尚未写入本地数据库。

flutter hive local-storage
1个回答
0
投票

您实际上并未将 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();
}

确保在应用程序首次启动时将示例数据保存到框中。

© www.soinside.com 2019 - 2024. All rights reserved.