Flutter-IOS固有のコードの記述

iOS固有のコードへのアクセスは、iOS固有の言語(Objective-CまたはSwiftとiOS SDK)を使用することを除いて、Androidプラットフォームのコードと似ています。それ以外の点では、コンセプトはAndroidプラットフォームのコンセプトと同じです。

iOSプラットフォームについても前章と同じアプリケーションを書いてみましょう。

  • Android Studio(macOS)で新しいアプリケーションflutter_browser_ios_appを作成しましょう

  • 前の章と同様に、手順2〜6に従います。

  • XCodeを起動し、をクリックします File → Open

  • flutterプロジェクトのiosディレクトリの下にあるxcodeプロジェクトを選択します。

  • 下のAppDelegate.mを開きます Runner → Runner path。次のコードが含まれています-

#include "AppDelegate.h" 
#include "GeneratedPluginRegistrant.h" 
@implementation AppDelegate 

- (BOOL)application:(UIApplication *)application
   didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      // [GeneratedPluginRegistrant registerWithRegistry:self];
      // Override point for customization after application launch.
      return [super application:application didFinishLaunchingWithOptions:launchOptions];
   } 
@end
  • 指定されたURLでブラウザを開くためのメソッドopenBrowserを追加しました。単一の引数urlを受け入れます。

- (void)openBrowser:(NSString *)urlString { 
   NSURL *url = [NSURL URLWithString:urlString]; 
   UIApplication *application = [UIApplication sharedApplication]; 
   [application openURL:url]; 
}
  • didFinishLaunchingWithOptionsメソッドで、コントローラーを見つけてコントローラー変数に設定します。

FlutterViewController* controller = (FlutterViewController*)self.window.rootViewController;
  • didFinishLaunchingWithOptionsメソッドで、ブラウザチャネルをflutterapp.tutorialspoint.com/browse −として設定します。

FlutterMethodChannel* browserChannel = [
   FlutterMethodChannel methodChannelWithName:
   @"flutterapp.tutorialspoint.com/browser" binaryMessenger:controller];
  • 変数weakSelfを作成し、現在のクラスを設定します-

__weak typeof(self) weakSelf = self;
  • ここで、setMethodCallHandlerを実装します。call.methodを照合してopenBrowserを呼び出します。call.argumentsを呼び出してURLを取得し、openBrowserの呼び出し中にそれを渡します。

[browserChannel setMethodCallHandler:^(FlutterMethodCall* call, FlutterResult result) {
   if ([@"openBrowser" isEqualToString:call.method]) { 
      NSString *url = call.arguments[@"url"];   
      [weakSelf openBrowser:url]; 
   } else { result(FlutterMethodNotImplemented); } 
}];
  • 完全なコードは次のとおりです-

#include "AppDelegate.h" 
#include "GeneratedPluginRegistrant.h" 
@implementation AppDelegate 

- (BOOL)application:(UIApplication *)application 
   didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
   
   // custom code starts 
   FlutterViewController* controller = (FlutterViewController*)self.window.rootViewController; 
   FlutterMethodChannel* browserChannel = [
      FlutterMethodChannel methodChannelWithName:
      @"flutterapp.tutorialspoint.com /browser" binaryMessenger:controller]; 
   
   __weak typeof(self) weakSelf = self; 
   [browserChannel setMethodCallHandler:^(
      FlutterMethodCall* call, FlutterResult result) { 
      
      if ([@"openBrowser" isEqualToString:call.method]) { 
         NSString *url = call.arguments[@"url"];
         [weakSelf openBrowser:url]; 
      } else { result(FlutterMethodNotImplemented); } 
   }]; 
   // custom code ends 
   [GeneratedPluginRegistrant registerWithRegistry:self]; 
   
   // Override point for customization after application launch. 
   return [super application:application didFinishLaunchingWithOptions:launchOptions]; 
}
- (void)openBrowser:(NSString *)urlString { 
   NSURL *url = [NSURL URLWithString:urlString]; 
   UIApplication *application = [UIApplication sharedApplication]; 
   [application openURL:url]; 
} 
@end
  • プロジェクト設定を開きます。

  • に移動 Capabilities 有効にします Background Modes

  • 追加 *Background fetch そして Remote Notification**

  • 次に、アプリケーションを実行します。Androidバージョンと同様に機能しますが、Chromeの代わりにSafariブラウザが開きます。