флаттер, как обновить виджет, когда приходит новое уведомление - PullRequest
0 голосов
/ 19 марта 2020

Я не новичок во Флаттере, но эта проблема просто свела меня с ума, я делаю приложение для чата, которое имеет 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 () или что угодно решает проблему. и заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...