How to show Airplay panel programmatically on iOS using flutter

499

Here is a example how to open the AirPlayPanel in objective c.

Setup flutter

First you have to create a channel. To start communicating to the native code.

All channel names used in a single app must be unique; prefix the channel name with a unique ‘domain prefix

static const platform = const MethodChannel('stack.M123.dev/airplay');

Then you have to invoke a method on the method channel.

  Future<void> _openAirPlay() async {
    try {
      await platform.invokeMethod('openAirPlay');
    } on PlatformException catch (e) {
      print('error');
    }


  }

Native part

Now the flutter part is done.

First you have to add suppport for swift. For this open the ios folder in the flutter root with XCode.

Expand Runner > Runner in the Project navigator.

Open the AppDelegate.m located under Runner > Runner in the Project navigator.

Create a FlutterMethodChannel and add a handler inside the application didFinishLaunchingWithOptions: method. Make sure to use the same channel name as was used on the Flutter client side.

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

@implementation AppDelegate
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
  FlutterViewController* controller = (FlutterViewController*)self.window.rootViewController;

  FlutterMethodChannel* airPlayChannel= [FlutterMethodChannel
                                          methodChannelWithName:@"stack.M123.dev/airplay"
                                          binaryMessenger:controller.binaryMessenger];

  [airPlayChannel setMethodCallHandler:^(FlutterMethodCall* call, FlutterResult result) {
    // Note: this method is invoked on the UI thread.
      if ([@"getBatteryLevel" isEqualToString:call.method]) {
int returnValue = [weakSelf openAirPlay];


  result(@(returnValue));

  }];

  [GeneratedPluginRegistrant registerWithRegistry:self];
  return [super application:application didFinishLaunchingWithOptions:launchOptions];
}

Add the method in the AppDelegate class, just before @end

- (int)openAirPlay {
    //Open air play
    return (int)(100);
  
}

Discalimer: I am not a IOS developer so the steps are mostly theoretical. I am following the official guide from Flutter. It can be found in full length here.

Share:
499
user6597752
Author by

user6597752

Updated on December 27, 2022

Comments

  • user6597752
    user6597752 over 1 year

    The desired output looks like this,

    desired output

    how to show this on click event programmatically using flutter(even with native code if possible), it's really appreciated if anyone could show an example. If there is no direct approach to this then a platform specific example using MethodChannel is also very welcome. Native code example must be in Objective C.

    Additionally I have tried to use flutter_to_airplay but project fails to run and also has other functionalities that are not needed in this context, what is needed is showing Airplay panel only.

    (Answer by M123 native code completely not working)