Я не могу сохранять данные в локальном хранилище в HiveBox, когда я перезагружаю страницу, все в локальной базе данных становится нулевым

#flutter #dart #persistence #flutter-hive

#flutter #dart #постоянство #flutter-улей

Вопрос:

Я новичок в dart / flutter. Мне нужно получить данные из веб-API и поместить их внутрь Hive.box как localStorage. Я могу получить данные 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(),
  ));
}
  

RaisedButton в Login.dart

 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() => при проверке сеанса я помещаю все данные в 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): ()
  

Ответ №1:

Я немного смущен кодом, но вот что вы можете попробовать:

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

Вы можете сделать async, и, в свою очередь, вы можете ожидать своего метода _abrirCaixa(), который является будущим. Это должно устранить ошибку HiveBox is null.