Como salvar no armazenamento local usando Flutter?

96

No Android, se eu tiver as informações que desejo persistir nas sessões, sei que posso usar SharedPreferences ou criar um banco de dados SQLite ou até mesmo gravar um arquivo no dispositivo e lê-lo mais tarde.

Existe uma maneira de salvar e restaurar dados como este apenas usando Flutter? Ou eu precisaria escrever um código específico do dispositivo para Android e iOS como no exemplo de serviços ?

Reagankm
fonte

Respostas:

116

Existem algumas opções:

Seth Ladd
fonte
Escrevi um serviço flutter para acessar SQLite, consulte github.com/ripple182/FlutterSQLiteSample
ripple182
é possível se eu usar o Room? o que acontecerá com ios se eu usar o Room?
MNFS de
1
Isso parece funcionar melhor para preferências compartilhadas: pub.dev/packages/shared_preferences
primeiro de
51

Se você está em uma situação em que deseja salvar um pequeno valor que deseja consultar mais tarde. então você deve armazenar seus dados como dados de valor-chave usando shared_preferences

mas se você quiser armazenar grandes dados, você deve ir com SQLITE

no entanto, você sempre pode usar o banco de dados firebase, que está disponível offline

Já que estamos falando sobre armazenamento local, você sempre pode ler e gravar arquivos no disco

Outras soluções:

Raouf Rahiche
fonte
como decidir quando usar sqflite ou firebase?
stickedoverflow
1
sqflitearmazena-o apenas no telefone. firebaseé sincronizado em um banco de dados central onde você pode realizar consultas em seu backend. firebasetambém facilita a sincronização entre dispositivos.
Feu
Observe que o padrão do Firestore do Firebase é 10 MB e pode ser definido para no mínimo 1 MB e no máximo 100 MB. O acesso offline puro não é recomendado. Se você planeja usar isso apenas como uma opção de armazenamento local e os dados são grandes, pode ser necessário reconsiderar. firebase.google.com/docs/reference/android/com/google/firebase/…
Lander
Essa deve ser a resposta preferida, porque simplesmente explica onde olhar em diferentes cenários.
janpeterka
12

Você pode usar as preferências compartilhadas dos plug-ins oficiais do flutter. https://github.com/flutter/plugins/tree/master/packages/shared_preferences

Ele usa Preferências compartilhadas para Android, NSUserDefaults para iOS.

Furkan Tektas
fonte
1
Isso é ideal para grandes bancos de dados?
temp_
1
@temp_ Não sei muito sobre iOS. Preferências compartilhadas no Android, no entanto, definitivamente não são adequadas para grandes bancos de dados. Eles são gravados como arquivos xml simples no sistema de arquivos e lidos do sistema de arquivos, se solicitado. Eles são usados ​​principalmente para armazenar preferências de aplicativos e coisas semelhantes.
forgemo de
Isso parece funcionar melhor para Preferências compartilhadas: pub.dev/packages/shared_preferences
Dia
6

Uma resposta tardia, mas espero que ajude quem vier aqui mais tarde também😁 ..

Vou fornecer categorias para salvar e seus respectivos melhores métodos ...

  1. Preferências compartilhadas Use isso ao armazenar valores simples no armazenamento, por exemplo, tema de cor, idioma do aplicativo, última posição de rolagem (em aplicativos de leitura) .. essas são configurações simples que você deseja manter quando o aplicativo é reiniciado. Você pode, no entanto, usar isto para armazenar coisas grandes (listas, mapas, imagens), mas isso exigiria serialização e desserialização . Para saber mais sobre essa desserialização e serialização, clique aqui .
  2. arquivos Isso ajuda muito quando você tem dados que são mais definidos por você, por exemplo, arquivos de log, arquivos de imagem e talvez você queira exportar arquivos csv. Ouvi dizer que esse tipo de persistência pode ser lavado por limpadores de armazenamento quando o disco fica sem espaço .. Não tenho certeza, pois nunca o vi .. Isso também pode armazenar quase tudo, mas com a ajuda de serialização e desserialização ..
  3. Salvando em um banco de dados Isso é extremamente útil em dados que são um pouco complexos. E eu acho que isso não é lavado por limpadores de disco, pois é armazenado em AppData (para Android). Neste, seus dados são armazenados em um banco de dados SQLite. Seu plugin é SQFLite . Os tipos de dados que você pode querer inserir aqui são como tudo o que pode ser representado por um banco de dados.
emanuel sanga
fonte
5

Se você precisar armazenar apenas valores simples, como token de API ou dados de login (não senhas!), Aqui está o que usei:

import 'package:shared_preferences/shared_preferences.dart';

asyncFunc() async { // Async func to handle Futures easier; or use Future.then
  SharedPreferences prefs = await SharedPreferences.getInstance();
}
...

// Set
prefs.setString('apiToken', token);

// Get
String token = prefs.getString('apiToken');

// Remove
prefs.remove('apiToken');

Não se esqueça de adicionar shared_preferencesdependência em seu pubspec.yaml (preservar o formato de espaçamento):

dependencies:

  shared_preferences: any
George
fonte
0

Eu acho que se você vai armazenar uma grande quantidade de dados no armazenamento local, você pode usar a biblioteca sqflite. É muito fácil de configurar e usei pessoalmente para alguns projetos de teste e funciona bem.

https://github.com/tekartik/sqflite Este é um tutorial - https://proandroiddev.com/flutter-bookshelf-app-part-2-personal-notes-and-database-integration-a3b47a84c57

Se você deseja armazenar dados na nuvem, pode usar o firebase. É um serviço sólido fornecido pelo google.

https://firebase.google.com/docs/flutter/setup

Ishan Fernando
fonte
0

Para uma solução baseada em JSON agradável e limpa, você também pode usar o armazenamento local .

Shabdar
fonte