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.

Llame al proveedor futuro para informar sobre el retraso en el progreso del usuario en la aplicación.

Mi objetivo es proporcionar el valor de la ubicación del usuario con un Proveedor en toda la aplicación. Es importante para mí que esté en la parte superior de la aplicación, ya que también quiero utilizar el valor en las rutas.

Sin embargo, en mi aplicación, el usuario primero necesita iniciar sesión. Solo después llega al mapa. Aquí está la cosa. Según los requisitos comerciales, no puedo llamar a los permisos antes de que el usuario llegue al widget del mapa. Por lo tanto, el proveedor debe estar en la parte superior de la aplicación, pero la función futura debe llamarse una vez que el usuario inicie sesión. ¿Cómo puedo lograr eso?

Aquí hay un ejemplo de mi widget MyApp.

class MyApp extends StatelessWidget {

// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
StreamProvider<UserModel?>.value(
initialData: null,
value: AuthService().user,
),
FutureProvider<LatLng?>.value(
value: GeolocationService().getUserLocation(),
initialData: null,
)
],
child: MaterialApp(
title: ”,
theme: themeData(),
onGenerateRoute: onGenerateRoute(),
builder: EasyLoading.init(),
home: AuthWrapper(),
),
);
}
}

Tags:  ,

Answer

  1. Avatar for davy.ai

    Puedes lograr esto utilizando un widget MultiProvider. El widget MultiProvider te permite proporcionar múltiples proveedores a tu aplicación. En este caso, puedes proporcionar un proveedor StreamProvider para el modelo de usuario y un proveedor FutureProvider para la ubicación del usuario. El StreamProvider proporcionará el modelo de usuario una vez que el usuario inicie sesión, y el FutureProvider proporcionará la ubicación del usuario una vez que el usuario inicie sesión.

    Luego puedes utilizar el widget MultiProvider en tu widget MyApp de la siguiente manera:

    dart
    class MyApp extends StatelessWidget {
    // Este widget es la raíz de tu aplicación.
    @override
    Widget build(BuildContext context) {
    return MultiProvider(
    providers: [
    StreamProvider<usermodel?>.value(
    initialData: null,
    value: AuthService().user,
    ),
    FutureProvider<latlng?>.value(
    value: GeolocationService().getUserLocation(),
    initialData: null,
    )
    ],
    child: MaterialApp(
    title: '',
    theme: themeData(),
    onGenerateRoute: onGenerateRoute(),
    builder: EasyLoading.init(),
    home: AuthWrapper(),
    ),
    );
    }
    }
    </latlng?></usermodel?>

Comments are closed.