Что эквивалентно Xamarin MessagingCenter во Флаттере? - PullRequest
1 голос
/ 03 февраля 2020

При Xamarin мы обычно используем Центр сообщений , чтобы отправить сообщение на любую страницу, когда приложение запущено (запустить приложение или приложение в фоновом режиме).

С Flutter, есть ли у нас какие-либо способы отправить сообщение так же, как с Центром сообщений из Xamarin.Forms?

1 Ответ

0 голосов
/ 04 февраля 2020

Основываясь на моих исследованиях, вы можете использовать Channel для достижения этой цели. enter image description here BasicMessageChannel аналогичный канал.

Собственная часть .

    private final Activity activity;
    private final BasicMessageChannel<String> messageChannel;

    static BasicMessageChannelPlugin registerWith(FlutterView flutterView) {
        return new BasicMessageChannelPlugin(flutterView);
    }

    private BasicMessageChannelPlugin(FlutterView flutterView) {
        this.activity = (Activity) flutterView.getContext();
        this.messageChannel = new BasicMessageChannel<>(flutterView, "BasicMessageChannelPlugin", StringCodec.INSTANCE);
        //Set up a message handler to handle messages from Dart
        messageChannel.setMessageHandler(this);
    }

    @Override
    public void onMessage(String s, BasicMessageChannel.Reply<String> reply) {//Handle messages from Dart
        reply.reply("BasicMessageChannel:" + s);//Can reply by `reply`
        if (activity instanceof IShowMessage) {
            ((IShowMessage) activity).onShowMessage(s);
        }
        Toast.makeText(activity, s, Toast.LENGTH_SHORT).show();
    }

    /**
     * Send Dart a message and receive feedback from Dart
     *
     * @param message  Content of the message to send to Dart
     * @param callback Feedback from Dart
     */
    void send(String message, BasicMessageChannel.Reply<String> callback) {
        messageChannel.send(message, callback);
    }

    @Override
    public void reply(String s) {

    }
}

Часть дротика

import 'package:flutter/services.dart';
static const BasicMessageChannel _basicMessageChannel =
const BasicMessageChannel('BasicMessageChannelPlugin', StringCodec());

//Use BasicMessageChannel to receive messages from Native and reply to Native
_basicMessageChannel
    .setMessageHandler((String message) => Future<String>(() {
          setState(() {
            showMessage = message;
          });
          return "receive Native's message:" + message;
        }));
//use BasicMessageChannelsend message to Native And accept Native's reply
String response;
    try {
       response = await _basicMessageChannel.send(value);
    } on PlatformException catch (e) {
      print(e);
    }

Вот блог об этом. https://stablekernel.com/flutter-platform-channels-quick-start/

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