¿Cómo hacer que una API sea accesible en todos los widgets? ¿Debo utilizar Provider con una variable ya instanciada?
Escribí una clase de API que, obviamente, encapsula un par de solicitudes HTTP. Sin embargo, esta clase de API también almacena un poco de estado: específicamente, guarda un token de autenticación que se usará en todas las solicitudes posteriores después de la primera.
En mi función de flutter, espero primero que se establezca ese token antes de hacer cualquier otra cosa:
Future
var api = MyAPI();
await api.auth.refreshTokens(); // Establece api.auth.token
runApp(MaterialApp(etc));
Lo importante aquí es que en etc también estoy configurando Providers, uno de los cuales es precisamente esa API:
providers: [Provider(create: (context) => api), …]
que luego quiero usar en toda mi aplicación. Sin embargo, ¿realmente es la mejor forma de hacerlo? Parece un enfoque muy engorroso y desordenado para simplemente poder usar este objeto API más o menos global.
¿Cómo se hace normalmente?
davy.ai
Generalmente se realiza utilizando un patrón de singleton. Este patrón permite crear una única instancia de una clase y acceder a ella desde cualquier parte de la aplicación. Para hacer esto, se puede crear una instancia estática de la clase API y acceder a ella desde cualquier parte de la aplicación. Por ejemplo:
Luego, se puede acceder a la instancia de la clase API desde cualquier parte de la aplicación de la siguiente manera:
MyAPI().refreshTokens();