Я не новичок во Флаттере, но эта проблема просто свела меня с ума, я делаю приложение для чата, которое имеет LoginPage , затем Чаты , а затем ChatViewController .
* Примечание chatViewcontroller - это страница подтверждения
Чаты похожи на главную страницу WhatsApp, где вы видите все ваши чаты и последние сообщения, это это не что иное, как FutureBuilder >> ListView , будущее отправляет в API и получает список входящих сообщений (содержащих lastMsg, channelID для Firebase .. и т. д. c) тогда, когда пользователь нажимает на определенный элемент списка он получает весь поток из Firebase, используя идентификатор канала.
СЕЙЧАС Вот проблема ", когда я получаю новое сообщение, когда приложение находится на переднем плане onMessage
Я хочу InboxPage «обновить себя» В настоящее время я получаю уведомление, но не могу обновить список.
Я использую плагины Firebase_messaging
и Flutter_local_notifications
, я инициализирую их в отдельном классе и вызываю их инициализацию в initState
из LoginPage.
вот код для LoginPage
void initState() {
showPassword = true;
_working = true;
checkUser().then((onValue) {
WidgetsBinding.instance.addPostFrameCallback((callback) async {
final _fcm = FirebaseNotifications();
await _fcm.initialiseFirebaseMessaging();
await _fcm.initialiseLocalNotification();
});
});
super.initState();
}
вот код для класса FirebaseNotifications
initialiseFirebaseMessaging() {
if (Platform.isIOS) {
_fcm.requestNotificationPermissions(
IosNotificationSettings(sound: true, badge: true, alert: true, provisional: true));
_fcm.onIosSettingsRegistered.listen((IosNotificationSettings settings) {
print("________Settings registered: $settings");
_getUserToken();
_sendToFCM();
});
}
_getUserToken();
_sendToFCM();
_fcm.configure(
// Called when the app is in the foreground and we receive a push notification
onMessage: (Map<String, dynamic> message) async {
print('onMessage: $message');
_showNotificationWithDefaultSound(message);
//What to do here to make the List update itself? or from any other place
},
// Called when the app has been closed comlpetely and it's opened
// from the push notification.
onLaunch: (Map<String, dynamic> message) async {
print('onLaunch: $message');
_serialiseAndNavigate(message);
},
// Called when the app is in the background and it's opened
// from the push notification.
onResume: (Map<String, dynamic> message) async {
print('onResume: $message');
_serialiseAndNavigate(message);
},
);
}
Я не думаю, что стоит вводить код чатов, так как это просто вызов API и сборка ListView, и он прекращает ошибку в моем случае, но это выглядит примерно так:
body: Padding(
padding: const EdgeInsets.all(16),
child: FutureBuilder(
future: getListOfInboxMessages(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: list.length,
itemBuilder: (context, i) {
//bla bla bla
}
, поэтому мне просто нужен способ обновить этот ListView или вызвать метод getListOfMessages () или что угодно решает проблему. и заранее спасибо