我有一个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

我想知道如何同时激活事件第一个事件第二个并进行区别

最佳答案

解决方案

在这种情况下,我需要在 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

10-08 04:43