Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Problema com o uso do local storage

Mesmo usando função assíncrona e o wait a funcionalidade de salvar e ler do local storage não funciona.

Segue o trecho responsável:

class I18NMessagesCubit extends Cubit<I18NMessagesState> {
  final LocalStorage storage = LocalStorage('local_storage_v1.json');
  final String _viewKey;

  I18NMessagesCubit(this._viewKey) : super(const InitI18NMessagesState());

  reload(I18NWebClient client) async {
    emit(const LoadingI18NMessagesState());
    final items = await getStorageItems();
    debugPrint('Loaded $_viewKey: $items');
    if (items != null) {
      emit(LoadedI18NMessagesState(I18NMessages(items)));
      return;
    }
    await client.findAll().then(saveAndRefresh);
  }

  saveAndRefresh(Map<String, dynamic> messages) async {
    await storage.ready.catchError((e) {
      debugPrint(e);
    });
    await storage.setItem(_viewKey, messages);
    debugPrint('Saving $_viewKey: $messages');
    final state = LoadedI18NMessagesState(I18NMessages(messages));
    emit(state);
  }

  Future getStorageItems() async {
    await storage.ready.catchError((e) {
      debugPrint(e);
    });
    final items = await storage.getItem(_viewKey);
    return items;
  }
}

Obs: nunca é captado erros no catch erro, e retorno do items é sempre nulo.

1 resposta
solução!

Oi estudante, tudo bem?

Desculpe a demora em retornar

Primeiramente, verifique se você está importando corretamente a biblioteca do Local Storage no seu arquivo. Certifique-se de que a importação está correta e que você está utilizando a versão correta da biblioteca.

Além disso, é importante garantir que o Local Storage esteja pronto antes de realizar qualquer operação de leitura ou escrita. No seu código, você está utilizando o método await storage.ready.catchError((e) { debugPrint(e); }); para esperar até que o Local Storage esteja pronto. No entanto, você não está tratando possíveis erros que possam ocorrer durante esse processo.

Uma sugestão é adicionar um bloco try-catch para capturar possíveis exceções e imprimir o erro no console. Dessa forma, você poderá identificar se há algum problema durante a inicialização do Local Storage.

Aqui está um exemplo de como você pode fazer isso:

try {
  await storage.ready;
} catch (e) {
  debugPrint('Erro ao iniciar o Local Storage: $e');
}

Além disso, verifique se você está passando corretamente a chave _viewKey para os métodos setItem e getItem. Certifique-se de que a chave está sendo passada corretamente e que não há espaços ou caracteres especiais que possam causar problemas.

Por fim, verifique se você está chamando corretamente o método reload para carregar os itens do Local Storage. Certifique-se de que você está passando uma instância válida de I18NWebClient para o método.

Lembrando que temos uma nova formação com cursos novos e atualizados, indicamos que você a faça: Formação desenvolva seu primeiro app com Flutter.

Espero que essas sugestões possam te ajudar a resolver o problema com o uso do Local Storage. Lembre-se de sempre verificar a documentação da biblioteca e buscar por exemplos e tutoriais que possam te auxiliar.

Um abraço e bons estudos.