flutter - 我无法将数据持久保存在HiveBox的本地存储中,当我重新加载页面时,本地数据库中的所有内容都为空

标签 flutter dart hive persistence

我是 Dart 新手。我需要获取Web API的数据并将其作为LocalStorage放在Hive.box中。我可以获取Api数据,并将其放在Hive中,但是我无法在另一个页面中保存该数据,例如,我不能在另一个页面中使用localStorage变量...问题是HiveBox返回null。
Main.dart-打开盒子

Future _abrirCaixa() async {
  var dir = await getApplicationDocumentsDirectory();
  Hive.init(dir.path);
  return await Hive.openBox('localStorage');
}

void main() {
  _abrirCaixa();
  runApp(MaterialApp(
    debugShowCheckedModeBanner: false,
    home: MyApp(),
  ));
}
Login.dart中的RaisedButton
Padding(
                padding: const EdgeInsets.only(top: 16.0),
                child: ButtonTheme(
                  height: 40.0,
                  child: RaisedButton(
                    onPressed: () async {
                      if (controladorUsuario.text.isEmpty ||
                          controladorSenha.text.isEmpty) {
                        camposVazios.camposVazios(context);
                      } else {
                        await fazerLogin(context);
                        infoAddADM();
                        infoAddCond();
                      }
                    },
                    // await infoAddCond();
                    // await infoAddADM();

                    child: Text(
                      "Conectar",
                      style: TextStyle(color: white),
                    ),
                    color: mainColor,
                  ),
                ),
              ),
fazerLogin()=>在sessionValidation中,我将所有数据放入LocalStorage
[...]
 var dados = await Session.sessionValidation(login, senha);

    print('------------------------------');
    print(localStorage.values.toString());
    Navigator.push(
      context,
      MaterialPageRoute(
        builder: (context) => TestePage(),
      ),
    );
[...]
TestPage.dart
class _TestePageState extends State<TestePage> {
  @override
  Widget build(BuildContext context) {
    print('--------------//---------------------');
    print(localStorage.values.toString());

    return Container();
  }
}
对我有什么返回:
At first: 

I/flutter (14463): ------------------------------
I/flutter (14463): (3, Adm ConectCon, 53644, 4, 0, Condomínio SID, 509, 140, ..., null, 90377)
I/flutter (14463): --------------//---------------------
I/flutter (14463): (3, Adm ConectCon, 53644, 4, 0, Condomínio SID, 509, 140, ..., null, 90377)

After a hot reload: 

I/flutter (14463): --------------//---------------------
I/flutter (14463): ()

最佳答案

我对代码有些困惑,但是您可以尝试以下操作:

void main() async{
  await _abrirCaixa();
  runApp(MaterialApp(
    debugShowCheckedModeBanner: false,
    home: MyApp(),
  ));
}
您可以进行异步处理,然后可以等待_abrirCaixa()方法的使用(这是 future 的方法)。这应该解决HiveBox为null的错误。

关于flutter - 我无法将数据持久保存在HiveBox的本地存储中,当我重新加载页面时,本地数据库中的所有内容都为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64228877/

相关文章:

flutter - 没有为 Flutter 中的类 TagColumn 定义 Getter _text

flutter - 将字符串值从一个有状态小部件更改为另一个有状态小部件

使用Provider时出现Flutter 'No Overlay widget exists above EditableText'错误

mysql - Sqoop将mysql表新添加的列导入到现有的hive表

java - -DskipTests 和 -Dmaven.test.skip=true 有什么区别

dart - Flutter Streams,如何从流中访问之前发出的数据

flutter - Dart FFI 到底是如何实现的?它们与普通函数调用一样便宜,还是在幕后做繁重的工作?

三角形的 flutter 颜色半容器

performance - 如何提高Dart进行二进制数据转换的性能?

hadoop - 无法在 Hive 2.3.0 中创建具有约束的 Hive 表