Как передавать данные из swift в флаттер, используя канал событий? - PullRequest
0 голосов
/ 11 января 2020

Я создаю приложение, в котором я передаю данные со стороны android и iOS в сторону флаттера, и там я отображаю данные в пользовательском интерфейсе.

Я уже выполнил часть android. Часть android отправляет данные на флаттер и отображает их в пользовательском интерфейсе. Но проблема в том, как добиться того же для iOS быстрой стороны.

Android код, который работает для меня:

new EventChannel(getFlutterView(), "Eventchannelname").setStreamHandler(
            new EventChannel.StreamHandler() {
                @Override
                public void onListen(Object args, EventChannel.EventSink events) {
                    Log.w(TAG, "adding listener");
                    mEventSink = events; // I use mEventsink.success(data) to pass the data to flutter side

                @Override
                public void onCancel(Object args) {
                    Log.w(TAG, "cancelling listener");
                }
            }
    );

Как мне добиться то же самое в родном коде Swift. Я погуглил его и не нашел ничего, что могло бы мне помочь.

Я хочу, чтобы в swift было то же, что я делал в android java: я хочу захватить события в локальной переменной, а затем использовать это где Мне нужно отправить данные на флаттер.

1 Ответ

2 голосов
/ 15 января 2020

просто вызовите mEventSink как функцию

mEventSink(data)

Используйте константу FlutterEndOfEventStream, чтобы сообщить об окончании потока

mEventSink(FlutterEndOfEventStream)

, если вы собираетесь для отправки ошибки на сторону флаттера используйте

mEventSink(FlutterError(code: "ERROR_CODE",
                             message: "Detailed message",
                             details: nil))

Ссылка на API DO C

Полный быстрый пример

let eventChannel = FlutterEventChannel(name: "your.channel.id", binaryMessenger: messenger!)                                                                            
        eventChannel.setStreamHandler(SwiftStreamHandler())      

.... 

class SwiftStreamHandler: NSObject, FlutterStreamHandler {                                                                                                                                  
    public func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? {                                                                     
        events(true) // any generic type or more compex dictionary of [String:Any]
        events(FlutterError(code: "ERROR_CODE",
                             message: "Detailed message",
                             details: nil)) // in case of errors
        events(FlutterEndOfEventStream) // when stream is over
        return nil                                                                                                                                                                           
    }                                                                                                                                                                                        

    public func onCancel(withArguments arguments: Any?) -> FlutterError? {                                                                                                                   
        return nil                                                                                                                                                                           
    }                                                                                                                                                                                        
}               
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...