【问题标题】:How to manage two FlutterEventChannel in Objective - C如何在 Objective-C 中管理两个 FlutterEventChannel
【发布时间】:2020-02-06 04:48:52
【问题描述】:

我有一个 Flutter 应用程序,我需要通过 FlutterEventChannel 与原生函数连接,为了获得干净的代码和坐标,我需要两个 FlutterEventChannel。问题是:如何确定何时调用一个事件,它适用于一个事件,但我不知道如何处理 2 个事件。这是我的 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

我想知道如何同时激活 eventFirsteventSecond 并区分它们

【问题讨论】:

    标签: ios objective-c flutter channel


    【解决方案1】:

    解决方案

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

    【讨论】:

      猜你喜欢
      • 2012-08-08
      • 1970-01-01
      • 2020-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 1970-01-01
      相关资源
      最近更新 更多