Skip to content

Instantly share code, notes, and snippets.

@Klerith
Last active March 10, 2023 22:27
Show Gist options
  • Select an option

  • Save Klerith/8f6c75db4fb0696f6cdd5852b377b1e1 to your computer and use it in GitHub Desktop.

Select an option

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);
}
}
@kevin05vm

Copy link
Copy Markdown

Hola Fernando puedes agregar un comentario con esta linea:
WidgetsFlutterBinding.ensureInitialized();
antes del final prefs = new PreferenciasUsuario();
para los que les da el error de : FlutterError (ServicesBinding.defaultBinaryMessenger was accessed before the binding was initialized.

@MarFelix

Copy link
Copy Markdown

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

@Pedroadlcruz

Copy link
Copy Markdown

@kevin05vm muchas gracias por el aporte

@rafabelalcazar

Copy link
Copy Markdown

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

@MacaCar96

Copy link
Copy Markdown

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
Copy Markdown

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

dwlince commented Apr 13, 2020

Copy link
Copy Markdown

Gracias por el curso profe, sigue así 👍

@zhelon

zhelon commented Jun 14, 2020

Copy link
Copy Markdown

@kevin05vm Gracias por el fix

@cabreu145

Copy link
Copy Markdown

@kevin05vm tnks

@larturi

larturi commented Sep 19, 2020

Copy link
Copy Markdown

Gracias!

@EriickM

EriickM commented Jun 10, 2021

Copy link
Copy Markdown

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

@martin-ronquillo

Copy link
Copy Markdown

@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
Copy Markdown

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

@martin-ronquillo

Copy link
Copy Markdown

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

@mmorenoITESA

Copy link
Copy Markdown

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

Muchas gracias @restablue

@GeeksCesar

Copy link
Copy Markdown

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

OscarS7 commented Jun 23, 2021

Copy link
Copy Markdown

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
Copy Markdown

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

@arejula27

Copy link
Copy Markdown

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
Copy Markdown

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
Copy Markdown

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

@C4monta3z

Copy link
Copy Markdown

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