Assim como foi feito para o hive, poderíamos (como uma alternativa) criar um serviço (SharedPreferencesService) para encapsular a lógica de acesso ao pacote shared_preferences:
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() {
runApp(MyApp());
}
// Serviço para lidar com SharedPreferences
class SharedPreferencesService {
final String tokenKey = 'authToken';
Future<void> saveToken(String token) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString(tokenKey, token);
print('Token salvo!');
}
Future<String?> getToken() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getString(tokenKey);
}
}
class MyApp extends StatelessWidget {
final SharedPreferencesService _prefsService = SharedPreferencesService();
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Exemplo de SharedPreferences com Service'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
await _prefsService.saveToken('meuTokenDeAutenticacao');
},
child: Text('Salvar Token'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
String? authToken = await _prefsService.getToken();
print('Token recuperado: $authToken');
},
child: Text('Buscar Token'),
),
],
),
),
),
);
}
}Neste exemplo, criamos o SharedPreferencesService, que encapsula as operações de salvar e buscar o token de autenticação. O serviço é responsável por interagir com o shared_preferences.
O restante do aplicativo usa esse serviço para executar operações no SharedPreferences. Pressionando o botão "Salvar Token", ele usará o serviço para salvar o token e, ao pressionar o botão "Buscar Token", ele buscará e exibirá o token armazenado (no console).