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