Как управлять двумя FlutterEventChannel в Objective - C - PullRequest
0 голосов
/ 09 октября 2019

У меня есть приложение Flutter, и мне нужно соединиться с нативными функциями с помощью FlutterEventChannel , а для чистого кода и ординаты мне нужно два FlutterEventChannel . Вопрос в том, как определить, когда вызывается одно событие. Оно работает с одним событием, но я не знаю, как это сделать с двумя событиями. Это мой AppDelegate.m

#import "AppDelegate.h"
#import <Flutter/Flutter.h>
#import "GeneratedPluginRegistrant.h"

@implementation AppDelegate {
    FlutterEventSink _eventSink;
}

- (BOOL)application:(UIApplication*)application
didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {

    [GeneratedPluginRegistrant registerWithRegistry:self];
    FlutterViewController* controller =
    (FlutterViewController*)self.window.rootViewController;

    FlutterEventChannel* eventFirst = [FlutterEventChannel
        eventChannelWithName:@"my_first_event_channel"
             binaryMessenger:controller];
    [eventFirst setStreamHandler:self];

    FlutterEventChannel* eventSecond = [FlutterEventChannel
        eventChannelWithName:@"my_second_event_channel"
             binaryMessenger:controller];
    [eventSecond setStreamHandler:self];

    return [super application:application didFinishLaunchingWithOptions:launchOptions];
}

- (FlutterError*)onListenWithArguments:(id)arguments
                             eventSink:(FlutterEventSink)eventSink {
  _eventSink = eventSink;
  return nil;
}

- (FlutterError*)onCancelWithArguments:(id)arguments {
  [[NSNotificationCenter defaultCenter] removeObserver:self];
  _eventSink = nil;
  return nil;
}

@end

Я хочу знать, как активировать eventFirst и eventSecond и отличать их

1 Ответ

0 голосов
/ 09 октября 2019

РЕШЕНИЕ

В этом случае мне нужно использовать две реализации отдельно в AppDelegate.m :

#import "AppDelegate.h"
#import <Flutter/Flutter.h>
#import "GeneratedPluginRegistrant.h"

FlutterEventSink eventSinkFirst;
FlutterEventSink eventSinkSecond;

@implementation AppDelegate {

}

- (BOOL)application:(UIApplication*)application
didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {

    [GeneratedPluginRegistrant registerWithRegistry:self];

    FlutterViewController* controller =
    (FlutterViewController*)self.window.rootViewController;

    FirstStreamHandler* firstStreamHandler =
        [[FirstStreamHandler alloc] init];
    FlutterEventChannel* firstEventChannel =
        [FlutterEventChannel eventChannelWithName:@"my_first_event_channel"
                                  binaryMessenger:controller];
    [firstEventChannel setStreamHandler:firstStreamHandler];


    SecondStreamHandler* secondStreamHandler =
        [[SecondStreamHandler alloc] init];
    FlutterEventChannel* secondEventChannel =
        [FlutterEventChannel eventChannelWithName:@"my_second_event_channel"
                                  binaryMessenger:controller];
    [secondEventChannel setStreamHandler:secondStreamHandler];

    return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
@end


@implementation FirstStreamHandler
- (FlutterError*)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)eventSink {
    eventSinkFirst = eventSink;
  return nil;
}

- (FlutterError*)onCancelWithArguments:(id)arguments {
    eventSinkFirst = nil;
  return nil;
}
@end


@implementation SecondStreamHandler
- (FlutterError*)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)eventSink {
    eventSinkSecond = eventSink;
  return nil;
}

- (FlutterError*)onCancelWithArguments:(id)arguments {
    eventSinkSecond = nil;
  return nil;
}
@end

И объявить в AppDelegate.h :

#import <Flutter/Flutter.h>
#import <UIKit/UIKit.h>

@interface AppDelegate : FlutterAppDelegate<MyCustomDelegates>
@end

@interface FirstStreamHandler : NSObject <FlutterStreamHandler>
@end

@interface SecondStreamHandler : NSObject <FlutterStreamHandler>
@end
...