我可以´在hivebox中,当我重新加载页面时,本地数据库中的所有内容都变为空

2w3rbyxf  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(342)

我是飞镖新手。我需要获取web api的数据并将其作为本地存储放在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(),
      ),
    );
[...]

测试页.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): ()
4si2a6ki

4si2a6ki1#

我对代码有点困惑,但以下是您可以尝试的:

void main() async{
  await _abrirCaixa();
  runApp(MaterialApp(
    debugShowCheckedModeBanner: false,
    home: MyApp(),
  ));
}

您可以使其异步,反过来,您可以等待您的\u abircaixa()方法,这是一个未来。这应该可以解决hivebox为空的错误。

相关问题