Ausgabe
Ich implementiere Benachrichtigungen in meiner App.
Ich habe ein Cubit, das Zustände ausgibt, wenn die App eine neue Benachrichtigung erhält.
Das ist mein wichtigstes:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiBlocProvider(
providers: [
...
BlocProvider<NotificationCubit>(
create: (context) => sl<NotificationCubit>())
],
child: MaterialApp(
home: Splash(),
onGenerateRoute: Routes.sailor.generator(),
navigatorKey: Routes.sailor.navigatorKey,
));
}
}
Ich verwende get_it
für Abhängigkeitsinjektion.
BlocBuilder<NotificationCubit, NotificationState>
Ich habe versucht, zu meinem Startbildschirm hinzuzufügen , und es funktioniert jedes Mal, wenn der Benutzer die Benachrichtigung erhält.
Mein Ziel ist es, die Benachrichtigung global zu behandeln. Ich habe versucht, einen Listener hinzuzufügen, wenn ich die Elle erstelle, aber das funktioniert nicht:
BlocProvider<NotificationCubit>(
create: (context) => sl<NotificationCubit>()..listen((state) {
if (state is NotificationReceived){
print("Notificaton received");
}
}))
Lösung
Um einen Block global anzuhören, müssen Sie ihn oben platzierenMaterialApp
return MultiBlocProvider(
providers: [
...
BlocProvider<NotificationCubit>(
create: (context) => NotificationCubit()),
],
child: Builder(
builder: (context) =>
BlocListener<NotificationCubit, NotificationState>(
listener: (context, state) {
...
},
child: MaterialApp(
...
)
)),
);
Denken Sie daran, nach der Verwendung Builder
eine andere zustandslose Klasse zu verwenden oder zu erstellenBlocProvider
Beantwortet von – Matteo Antolini
Antwort geprüft von – Pedro (FixError Volunteer)