пожалуйста, мне нужна ваша помощь в этом случае, в настоящее время я использую следующее в главном файле для перехода к нескольким точкам входа на основе состояний авторизации
main.dart
FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
return MultiProvider(
providers: [
ChangeNotifierProvider<Locations>(
builder: (ctx) => M1(),
),
ChangeNotifierProvider<Users>(
builder: (ctx) => M2(),
),
ChangeNotifierProxyProvider2<M1, M2, Startup>(
builder: (context, m1, m2, startup) =>
Initializer.instance(m1, m2, _firebaseMessaging),
initialBuilder: (context) =>
Initializer.instance(null, null, null),
),
],
child: Consumer<startup>(
builder: (ctx, startup, _) => MaterialApp(
home: Builder(
builder: (context) {
switch (auth.status) {
case Status.Unauthenticated:
return AuthenticationPage();
case Status.Authenticated:
return HomePage();
default:
return AuthenticationPage();
}
},
),
В классе запуска «Proxy Proxy» у меня есть следующее для поддержания статуса аутентификации и обновления токена FCM в базе данных пользователя
Startup.dart
class Startup with ChangeNotifier {
final M1 m1;
final M2 m2;
FirebaseMessaging _firebaseMessaging;
StreamSubscription userAuthSub;
Startup.instance(
this.m2, this.m1, this._firebaseMessaging)
: _firebaseAuth = FirebaseAuth.instance {
if (this.m1 != null && this.m2 != null) {
userAuthSub =
_firebaseAuth.onAuthStateChanged.listen(_onAuthStateChanged);
}
// This is just an example of how _onAuthStateChanged reacts with status and notify listeners after the reload operation
Future<void> _onAuthStateChanged(FirebaseUser firebaseUser) async {
if (firebaseUser == null) {
_status = Status.Unauthenticated;
notifyListeners();
}
Future<bool> reAuthenticate() async {
FirebaseUser user = await _firebaseAuth.currentUser();
await user.reload();
}
}
Я настраиваю Firebase Messaging на домашней странице и реагирую на сообщение, полученное из облачных сообщений Firebase, в основном он перезагружает аутентификацию пользователя, чтобы проверить, отключен пользователь или нет, вызывая функцию внутри провайдера запуска и _onAuthStateChanged обновляет статус, когда это необходимо, как показано ниже:
HomePage.dart
@override
void didChangeDependencies() {
if (!_loading) {
FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) async {
onMessageAlert(message);
}
);
}
Future<void> onMessageAlert(message) async {
await showLockedAccountAlert().then((_) {
Provider.of<Startup>(context, listen: false).reAuthenticate();
});
}
}
Проблема заключается в : когда я pu sh сообщение для клиента, клиент успешно получает сообщение, но когда я закрываю диалоговое окно, showLockedAccountAlert предоставляет Provider.of (context, слушать: ложь) .reAuthenticate (); он запускается, но не обновляет статус до Status.Unauthenticated, например, и не уведомляет слушателей по какой-то причине.
Я не вижу ошибок в журналах,