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(),
),
);
}
}
davy.ai
Puedes lograr esto utilizando un widget
MultiProvider
. El widgetMultiProvider
te permite proporcionar múltiples proveedores a tu aplicación. En este caso, puedes proporcionar un proveedorStreamProvider
para el modelo de usuario y un proveedorFutureProvider
para la ubicación del usuario. ElStreamProvider
proporcionará el modelo de usuario una vez que el usuario inicie sesión, y elFutureProvider
proporcionará la ubicación del usuario una vez que el usuario inicie sesión.Luego puedes utilizar el widget
MultiProvider
en tu widgetMyApp
de la siguiente manera:dart
</latlng?></usermodel?>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(),
),
);
}
}