i am building an app with firebaseauth and firebasestore. On the startup I am storing a constant value of the current user. From the uid it takes the id and gets the object out of the firebasestore database for more user data.
CustomUserData.withData({
required this.uid,
required this.firstname,
required this.lastname,
required this.birthday,
required this.shortname,
required this.rawData,
required this.isPassive,
required this.lastLogin,
required this.role,
required this.buildNumber,
This my CustomuserData class.
Now I want to store this object as a provider from riverpod. But I don't know how to set this value on the startup to listens in the whole app after ist. Currently I am always accessing my static variable.
Do you know any working solution ?
CodePudding user response:
You can do that. Simply wrap your MaterialApp or whatever your top level widget is with the provider.
class DBViewer extends StatelessWidget {
const DBViewer({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(create: (context) => ProController()),
ChangeNotifierProvider(create: (context) => TableController()),
],
builder: (context, _) {
Provider.of<ProController>(context, listen: false).init();
return AnimatedBuilder(
animation: dbService.darkModeListenable,
builder: (context, child) {
return MaterialApp(
My app is using providers from provider package, but should be same for riverpod as well.
CodePudding user response:
you can try it so:
final myReceivedDataProvider = FutureProvider<CustomUserData>((ref) async {
return CustomUserData.withData(...);
});
class MyPage extends ConsumerWidget {
const MyPage({
Key? key,
}) : super(key: key);
@override
Widget build(BuildContext context, WidgetRef ref) {
final data = ref.watch(myReceivedDataProvider);
return data.when(
data: (CustomUserData data) {
// TODO
return Text('$data');
},
error: (e, s) {
return Text('$e, $s');
},
loading: () => CircularProgressIndicator(),
);
}
}