es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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 main() async {
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?

Tags:  , ,

Answer

  1. Avatar for 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:

    class MyAPI {
      static final MyAPI _instance = MyAPI._internal();
      MyAPI._internal();
    
      factory MyAPI() {
        return _instance;
      }
    
      Future<void> refreshTokens() async {
        // Establece api.auth.token
      }
    }
    

    Luego, se puede acceder a la instancia de la clase API desde cualquier parte de la aplicación de la siguiente manera:

    MyAPI().refreshTokens();

Comments are closed.