Flutter - Usando SharedPreferences
Hoje veremos o que é e como usar o recurso SharedPreferences do Flutter. |
|
O que é o Flutter ?
O Flutter é um SDK de aplicativo móvel do Google que ajuda a criar aplicativos móveis modernos para iOS e Android usando uma única (quase) base de código.
Se você não conhece o Flutter veja o meu artigo : Flutter - Primeiros contatos e impressões
O que é SharedPreferences ?
O recurso
SharedPreferences é usado para armazenar dados no
formato chave-valor no Android e iOS.
No Flutter SharedPreferences utiliza o NSUserDefaults
no iOS e o SharedPreferences no Android, fornecendo
um armazenamento persistente para dados simples.
Porque e como usar ?
O recurso SharedPreferences é usado para armazenar pequenas quantidades de dados como dados primitivos: int, double, bool, string e stringList.
Esses dados geralmente estão associados ao aplicativo; portanto, quando o usuário desinstalar o aplicativo, os dados também serão excluídos.
Assim ao invés um banco de dados para armazenar pequenas quantidades de informação como nome de usuário, variáveis int, double, bool e string, podemos usar de as SharedPreferences.
Como usar ?
Para poder usar esse recurso temos que usar o plugin shared_preferences referenciando-o no arquivo pubspec.yaml na seção dependencies.
... dependencies: flutter: sdk: flutter shared_preferences: ^0.4.3 ... |
A seguir quando for utilizar o recurso sem seu código basta adicionar o seguinte import:
import 'package:shared_preferences/shared_preferences.dart';
|
Salvando e Lendo dados usando SharedPreferences
A primeira coisa a fazer para poder ler e escrever usando o recurso e obter uma instância do SharedPreferences:
SharedPreferences prefs = await SharedPreferences.getInstance();
|
Agora que temos a instância prefs criada podemos usá-la para ler e salvar dados nos diversos formatos:
int
// salvar
prefs.setInt('idade', 42);
// ler
final idade = prefs.getInt('idade') ?? 0;
|
double
// salvar
prefs.setDouble('valor', 1.99);
// ler
final valor = prefs.getDouble('valor') ?? 0.0;
|
bool
// salvar
prefs.setBool('ativo', true);
// ler
final ativo = prefs.getBool('ativo') ?? false;
|
string
// salvar
prefs.setString('nome', 'Macoratti');
// ler
final nome = prefs.getString('nome') ?? '';
|
stringList
// salvar
prefs.setStringList('cursos', ['Fisica','Quimica','Ingles']);
// ler
final cursos = prefs.getStringList('curso') ?? [];
|
Nota: Para ler os dados estamos usando o operador ?? que vai obter o valor se não for null, e , se for null obtém o valor definido.
Exemplo prático : Salvando e lendo o contador
Para ver um exemplo prático bem simples vamos criar um novo projeto no Flutter e mostrar como podemos salvar e ler os dados de um contador que é incrementado ao se clicar em um botão usando o código gerado para a aplicação padrão do Flutter e fazer alguns ajustes para usar o SharedPreferences.
Após criar o projeto vamos incluir a referência ao plugin no arquivo pubspec.yaml :
A seguir no arquivo main.dart na pasta lib vamos incluir o código destacado em azul:
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Usando SharedPreferences',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'SharedPreferences'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
_counter = (prefs.getInt('counter') ?? 0) + 1;
await prefs.setInt('counter', _counter);
setState(() {
_counter++;
});
}
@override
void initState() {
_leContador();
super.initState();
}
_leContador() async{
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
_counter = (prefs.getInt('counter') ?? 0);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Você clicou no botão :',
),
Text(
'$_counter vezes' ,
style: Theme.of(context).textTheme.display1,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Incrementar',
child: Icon(Icons.add),
),
);
}
}
|
No método _incrementCounter() incluimos o código que cria uma instância de SharedPreferences , lê os valores armazenados previamente em SharedPreferences e incrementa o valor e a seguir salva o contador:
void _incrementCounter() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
_counter = (prefs.getInt('counter') ?? 0) + 1;
await prefs.setInt('counter', _counter);
setState(() {
_counter++;
});
}
|
Para poder ler o valor armazenado na inicialização definimos o método initState() chamando o método _leContador():
@override
void initState() {
_leContador();
super.initState();
}
|
O método _leContador cria uma instância de SharedPreferences() e lê o valor armazenado em counter exibindo na interface:
_leContador() async{
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
_counter = (prefs.getInt('counter') ?? 0);
});
}
|
Assim, inicialmente o valor será zero mas depois poderemos parar nossa aplicação e ler o último valor armazenado do contador (counter) em SharedPreferences:
Abaixo temos o projeto em execução :
Pegue o código dos arquivos dart usados no projeto aqui: main_sharedpreferences.dart
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
Flutter - Apresentando o widget MaterialApp - Macoratti
Flutter - Apresentando Flutter Studio - Macoratti
Flutter - Lista Básica - Macoratti
Flutter - Apresentando Widgets - Macoratti
Flutter - Obtendo dados da Web - Macoratti