Skip to content

Instantly share code, notes, and snippets.

@Klerith
Last active March 10, 2023 22:27
Show Gist options
  • Save Klerith/8f6c75db4fb0696f6cdd5852b377b1e1 to your computer and use it in GitHub Desktop.
Save Klerith/8f6c75db4fb0696f6cdd5852b377b1e1 to your computer and use it in GitHub Desktop.
Flutter: Configuración singleton para las preferencias del usuario
import 'package:shared_preferences/shared_preferences.dart';
/*
Recordar instalar el paquete de:
shared_preferences:
Inicializar en el main
final prefs = new PreferenciasUsuario();
await prefs.initPrefs();
Recuerden que el main() debe de ser async {...
*/
class PreferenciasUsuario {
static final PreferenciasUsuario _instancia = new PreferenciasUsuario._internal();
factory PreferenciasUsuario() {
return _instancia;
}
PreferenciasUsuario._internal();
SharedPreferences _prefs;
initPrefs() async {
this._prefs = await SharedPreferences.getInstance();
}
// GET y SET del nombre
get nombre {
return _prefs.getString('nombre') ?? '';
}
set nombre( String value ) {
_prefs.setString('nombre', value);
}
// GET y SET de la última página
get ultimaPagina {
return _prefs.getString('ultimaPagina') ?? 'login';
}
set ultimaPagina( String value ) {
_prefs.setString('ultimaPagina', value);
}
}
@MarFelix
Copy link

@kevin05vm tienes toda la razón muchas gracias por tu aporte, seria cuestión de que Fernando lo agregara.

@Pedroadlcruz
Copy link

@kevin05vm muchas gracias por el aporte

@rafabelalcazar
Copy link

Gracias al profe Fernando Herrera 'Crack'. @kevin05vm me ayudaste a solucionar el error.

@MacaCar96
Copy link

Hola fernando... he estado corriendo este código y no ha funcionado. Muestra esto:
Se produjo una excepción. FlutterError (ServicesBinding.defaultBinaryMessenger was accessed before the binding was initialized.

@GabrielAispuro
Copy link

Hola fernando... he estado corriendo este código y no ha funcionado. Muestra esto:
Se produjo una excepción. FlutterError (ServicesBinding.defaultBinaryMessenger was accessed before the binding was initialized.

@MacaCar96 Creo deberías echarle un vistazo a los comentarios anteriores ;) es bueno leer comentarios en GitHub

@dwlince
Copy link

dwlince commented Apr 13, 2020

Gracias por el curso profe, sigue así 👍

@zhelon
Copy link

zhelon commented Jun 14, 2020

@kevin05vm Gracias por el fix

@cabreu145
Copy link

@kevin05vm tnks

@larturi
Copy link

larturi commented Sep 19, 2020

Gracias!

@EriickM
Copy link

EriickM commented Jun 10, 2021

Una duda, usando Null safety se tendría que modificar la linea SharedPreferences _prefs;, cual seria la solución ?

@martin-ronquillo
Copy link

@EriickM creo que agregando el 'late' al inicio, sin embargo al momento de compilar me dio un error en el initPrefs() que dice: _CastError (Null check operator used on a null value)

@mmorenoITESA
Copy link

Hola, tengo el mismo problema que @restablue, alguien ya logro solucionarlo?

@martin-ronquillo
Copy link

@mmorenoITESA en la clase main antes de instanciar preferenciasUsuarios() pon esta linea WidgetsFlutterBinding.ensureInitialized();

@mmorenoITESA
Copy link

@mmorenoITESA en la clase main antes de instanciar preferenciasUsuarios() pon esta linea WidgetsFlutterBinding.ensureInitialized();

Muchas gracias @restablue

@GeeksCesar
Copy link

Hola Comunidad no se si alguien se ha enfrentado con este error ; agradezco si han podido solucionar; [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: MissingPluginException(No implementation found for method getAll on channel plugins.flutter.io/shared_preferences)

@OscarS7
Copy link

OscarS7 commented Jun 23, 2021

Usando null-safety me marca error en la siguiente linea:

GlobalPreferences._internal();

Error:
_Non-nullable instance field 'globalPreferences' must be initialized.
Try adding an initializer expression, or add a field initializer in this constructor, or mark it 'late'.dartnot_initialized_non_nullable_instance_field

Agradezco su ayuda :c

@AyrtonAldayr
Copy link

alguien a podido resolver el problema? para la versión de flutter que están utilizando el null-safety?

@arejula27
Copy link

Usando flutter dos me funcionaba en la version sin centralizar las shared_preferences, pero al pasarlo todo a una clase me da el siguiente error
Captura de pantalla 2021-07-02 a las 15 30 09

Como se ve he tenido que poner la palabre clave late a la instancia de SharePreferences ¿Alguna posible solución?

@arejula27
Copy link

Usando null-safety me marca error en la siguiente linea:

GlobalPreferences._internal();

Error:
_Non-nullable instance field 'globalPreferences' must be initialized. Try adding an initializer expression, or add a field initializer in this constructor, or mark it 'late'.dartnot_initialized_non_nullable_instance_field

Agradezco su ayuda :c

Si pones late funciona:
`late SharedPreferences _prefs;

initPrefs() async {
this._prefs = await SharedPreferences.getInstance();
}`

@arejula27
Copy link

@AyrtonAldayr si miras en mi repo esta la app fincional con null safety

@C4monta3z
Copy link

Usando flutter dos me funcionaba en la version sin centralizar las shared_preferences, pero al pasarlo todo a una clase me da el siguiente error
Captura de pantalla 2021-07-02 a las 15 30 09

Como se ve he tenido que poner la palabre clave late a la instancia de SharePreferences ¿Alguna posible solución?

Captura de Pantalla 2021-07-28 a la(s) 10 39 10 a  m

Hola compañeros consultando el flutter el error es por la actualizacion a flutter 2+

ENCONTRE la siguiente solucion: en el archivo main.dart agrege en el metodo void main() async {
//
WidgetsFlutterBinding.ensureInitialized();//linea que se debe incluir .
final prefs = new PreferenciasUsuario();
await prefs.initPrefs();
//
runApp(MyApp());
//
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment