{"id":29053,"date":"2023-08-28T19:32:06","date_gmt":"2023-08-28T14:02:06","guid":{"rendered":"https:\/\/mobisoftinfotech.com\/resources\/?p=29053"},"modified":"2026-04-21T16:45:00","modified_gmt":"2026-04-21T11:15:00","slug":"how-to-add-flutter-screens-to-native-app","status":"publish","type":"post","link":"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app","title":{"rendered":"How to Add Screens Designed in Flutter into Your iOS App (Part 1)"},"content":{"rendered":"<p>While our affection for Flutter is unanimous, transitioning the entire app to Flutter all at once might not always be feasible. However, an effective approach involves integrating the Flutter project into our existing native app as a library or module. This can be seamlessly achieved using the add-to-app feature, allowing us to accomplish precisely that and beyond!<\/p>\n\n\n\n<p>This approach is particularly advantageous when we aim to implement identical functionalities within both our Android and iOS applications using <a href=\"https:\/\/mobisoftinfotech.com\/services\/flutter-app-development-company\">Flutter app development<\/a>. In such scenarios, there&#8217;s no necessity to develop distinct code for each platform. Instead, we can create one Flutter design that works for both iOS and Android. We can then use this design on both platforms without needing to make separate versions. This makes the development process smoother and easier.<\/p>\n\n\n\n<p>Let\u2019s start by implementing a simple demo <a href=\"https:\/\/mobisoftinfotech.com\/services\/ios-app-development-company\">iOS application<\/a> that will have a few screens designed in Flutter. We&#8217;ll embed the Flutter module in our iOS app as a framework.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Create a Flutter Module<\/h2>\n\n\n\n<p>To create a Flutter module, go to your command line interface and directory where you want to create the Flutter module and run the command mentioned below:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">flutter create --template <span class=\"hljs-built_in\">module<\/span> --org com.mobisoft mi_flutter_module<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This command will create a Flutter module with .ios and .android hidden folders.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Write Your Flutter Code<\/h2>\n\n\n\n<p>Design your screens and add all your necessary code files under the lib folder in your Flutter module. In our case, for demonstration purposes, we are going to design a single screen with GridView containing a few feature tiles like Transport, Announcements, and Resources.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><noscript><img decoding=\"async\" width=\"855\" height=\"603\" src=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Write-Your-Flutter-Code-1.webp\" alt=\"writing Flutter code for native app integration\" class=\"wp-image-29083\" srcset=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Write-Your-Flutter-Code-1.webp 855w, https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Write-Your-Flutter-Code-1-300x212.webp 300w, https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Write-Your-Flutter-Code-1-768x542.webp 768w, https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Write-Your-Flutter-Code-1-640x451.webp 640w, https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Write-Your-Flutter-Code-1-150x106.webp 150w\" sizes=\"(max-width: 855px) 100vw, 855px\"><\/noscript><img decoding=\"async\" width=\"855\" height=\"603\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20855%20603%22%3E%3C%2Fsvg%3E\" alt=\"writing Flutter code for native app integration\" class=\"wp-image-29083 lazyload\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20855%20603%22%3E%3C%2Fsvg%3E 855w\" sizes=\"(max-width: 855px) 100vw, 855px\" data-srcset=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Write-Your-Flutter-Code-1.webp 855w, https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Write-Your-Flutter-Code-1-300x212.webp 300w, https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Write-Your-Flutter-Code-1-768x542.webp 768w, https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Write-Your-Flutter-Code-1-640x451.webp 640w, https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Write-Your-Flutter-Code-1-150x106.webp 150w\" data-src=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Write-Your-Flutter-Code-1.webp\"><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Generate iOS Framework from the Flutter Module<\/h2>\n\n\n\n<p><span style=\"font-weight: 400;\">The Flutter documentation explains that there are a couple of methods for making an iOS framework and connecting it to the regular app. However, we&#8217;ll be focusing on Option B mentioned there, which is called &#8220;<\/span><b>Embed frameworks in Xcode<\/b><span style=\"font-weight: 400;\">&#8220;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Before generating the iOS framework, we need to make sure that we have defined an entry point function that will be called from the <a href=\"https:\/\/mobisoftinfotech.com\/services\/react-native-app-development-company\">native app.<\/a>&nbsp;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In our main.dart file located under mi_flutter_module\/lib folder, add the following entry point function. This function will be called from the iOS app.<\/span><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">@pragma(<span class=\"hljs-string\">\"vm:entry-point\"<\/span>)\n<span class=\"hljs-keyword\">void<\/span> loadFromNative() <span class=\"hljs-keyword\">async<\/span> {\nWidgetsFlutterBinding.ensureInitialized();\nrunApp(<span class=\"hljs-keyword\">const<\/span> MyApp());\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><span style=\"font-weight: 400;\">To generate the iOS framework, run the following command in your <span class=\"ui-provider en bai baj bak bal bam ban bao bap baq bar bas bat bau bav baw bax bay baz bba bbb bbc bbd bbe bbf bbg bbh bbi bbj bbk bbl bbm bbn bbo bbp\" dir=\"ltr\">mi_flutter_module<\/span> directory. This command will generate 3 frameworks for Debug, Profile, and Release. For development purposes, you can use the framework under your Debug Directory.<\/span><\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">flutter build ios-framework<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Step 4: Integrating and Embedding Framework in iOS App<\/h2>\n\n\n\n<p><span style=\"font-weight: 400;\">To ensure runtime loading, it&#8217;s essential to embed the generated dynamic frameworks into your app. For embedding just drag and drop the framework into the Frameworks, Libraries, and Embedded content section under your Target -&gt; General.<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><noscript><img decoding=\"async\" width=\"855\" height=\"364\" src=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Integrating-and-Embedding-Framework-in-iOS-App-1.webp\" alt=\"integrating Flutter framework into iOS app\" class=\"wp-image-29084\" srcset=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Integrating-and-Embedding-Framework-in-iOS-App-1.webp 855w, https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Integrating-and-Embedding-Framework-in-iOS-App-1-300x128.webp 300w, https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Integrating-and-Embedding-Framework-in-iOS-App-1-768x327.webp 768w, https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Integrating-and-Embedding-Framework-in-iOS-App-1-640x272.webp 640w, https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Integrating-and-Embedding-Framework-in-iOS-App-1-150x64.webp 150w\" sizes=\"(max-width: 855px) 100vw, 855px\"><\/noscript><img decoding=\"async\" width=\"855\" height=\"364\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20855%20364%22%3E%3C%2Fsvg%3E\" alt=\"integrating Flutter framework into iOS app\" class=\"wp-image-29084 lazyload\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20855%20364%22%3E%3C%2Fsvg%3E 855w\" sizes=\"(max-width: 855px) 100vw, 855px\" data-srcset=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Integrating-and-Embedding-Framework-in-iOS-App-1.webp 855w, https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Integrating-and-Embedding-Framework-in-iOS-App-1-300x128.webp 300w, https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Integrating-and-Embedding-Framework-in-iOS-App-1-768x327.webp 768w, https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Integrating-and-Embedding-Framework-in-iOS-App-1-640x272.webp 640w, https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Integrating-and-Embedding-Framework-in-iOS-App-1-150x64.webp 150w\" data-src=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Integrating-and-Embedding-Framework-in-iOS-App-1.webp\"><\/figure>\n\n\n\n<p><span style=\"font-weight: 400;\">If all the steps for generating the framework are correct, you should be able to build the project successfully.<\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5:&nbsp; Open the Flutter View&nbsp;<\/h2>\n\n\n\n<p><span style=\"font-weight: 400;\">To initiate a Flutter screen from an existing iOS interface, we&#8217;ll leverage the FlutterEngine and FlutterViewController classes.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Let\u2019s begin by incorporating a basic button into the ViewController. This button will serve as the trigger to open the Flutter view upon being clicked.<\/span><\/p>\n<p><b>Create a Flutter Engine:<\/b><span style=\"font-weight: 400;\"> Go to your AppDelegate file and add the following code:<\/span><\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">import UIKit\nimport Flutter\n\n@main\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n    \n    lazy var flutterEngine = FlutterEngine(name: \"flutter_engine\")\n    \n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions:       &#091;UIApplication.LaunchOptionsKey: Any]?) -&gt; Bool {\n        \/\/ Override point for customization after application launch.\n        \n        flutterEngine.run(withEntrypoint: \"loadFromNative\", libraryURI: \"package:home_derma\/main.dart\")\n        \n         return true\n}\n<\/code><\/span><\/pre>\n\n\n<p><span style=\"font-weight: 400;\">We made the following changes to the above code:<\/span><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"font-weight: 400;\">We created an instance of a Flutter engine class with a name.<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">Since we are only showing one Flutter screen, we prepared only one FlutterEngine. But if you want to show more than one Flutter screen, you&#8217;ll need to make separate engines for each of them.<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">We added a flutter run statement, with arguments:&nbsp;<\/span>\n<ul>\n<li><b>withEntrypoint<\/b>: Pass entryPoint function name which we had configured in the flutter module\u2019s main.dart file.<\/li>\n<li><b>libraryURI<\/b>: Pass the module\u2019s dart file path. Otherwise, it\u2019ll simply open an empty blur screen.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><b>Open Flutter View as a UIViewController: <\/b><span style=\"font-weight: 400;\">&nbsp;Opening Flutter view on the button, click &#8211;<\/span><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">@IBAction func miFlutterModuleButtonTapped(_ sender: Any) {\n        \n        <span class=\"hljs-keyword\">let<\/span> flutterEngine = (UIApplication.shared.delegate <span class=\"hljs-keyword\">as<\/span>!    AppDelegate).flutterEngine\n        <span class=\"hljs-keyword\">let<\/span> flutterViewController = FlutterViewController(engine: flutterEngine, <span class=\"hljs-attr\">nibName<\/span>: nil, <span class=\"hljs-attr\">bundle<\/span>: nil)\n        flutterViewController.modalPresentationStyle = .fullScreen\n        present(flutterViewController, <span class=\"hljs-attr\">animated<\/span>: <span class=\"hljs-literal\">true<\/span>, <span class=\"hljs-attr\">completion<\/span>: nil)\n }\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><span style=\"font-weight: 400;\">Quite straightforward, wouldn&#8217;t you agree?&nbsp;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">&nbsp;We\u2019re all set! You can now run the application and Voila!<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><noscript><img decoding=\"async\" width=\"855\" height=\"603\" src=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Open-the-Flutter-View-1.webp\" alt=\"opening Flutter view inside native iOS app\" class=\"wp-image-29085\" srcset=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Open-the-Flutter-View-1.webp 855w, https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Open-the-Flutter-View-1-300x212.webp 300w, https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Open-the-Flutter-View-1-768x542.webp 768w, https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Open-the-Flutter-View-1-640x451.webp 640w, https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Open-the-Flutter-View-1-150x106.webp 150w\" sizes=\"(max-width: 855px) 100vw, 855px\"><\/noscript><img decoding=\"async\" width=\"855\" height=\"603\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20855%20603%22%3E%3C%2Fsvg%3E\" alt=\"opening Flutter view inside native iOS app\" class=\"wp-image-29085 lazyload\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20855%20603%22%3E%3C%2Fsvg%3E 855w\" sizes=\"(max-width: 855px) 100vw, 855px\" data-srcset=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Open-the-Flutter-View-1.webp 855w, https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Open-the-Flutter-View-1-300x212.webp 300w, https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Open-the-Flutter-View-1-768x542.webp 768w, https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Open-the-Flutter-View-1-640x451.webp 640w, https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Open-the-Flutter-View-1-150x106.webp 150w\" data-src=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/Open-the-Flutter-View-1.webp\"><\/figure>\n\n\n\n<p><span style=\"font-weight: 400;\">We have now successfully integrated the Flutter screens into your Native iOS application. But wait, how can you come back to your native application?&nbsp;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">To achieve this, we are going to use the <\/span><b>FlutterMethodChannel<\/b><span style=\"font-weight: 400;\"> class provided by the Flutter framework.<\/span><\/p>\n<p><b>FlutterMethodChannel<\/b><span style=\"font-weight: 400;\"> is a class in the Flutter framework, which is used for communication between Dart code (the programming language used in Flutter) and platform-specific code (such as Java, Kotlin for Android, and Swift, Objective-C for iOS) in your Flutter app.<\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Create a Helper Class called CloseFlutterModuleHelper with a Method Channel in Your Flutter Module<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">CloseFlutterModuleHelper<\/span> <\/span>{\n  <span class=\"hljs-comment\">\/\/ Create a static constant MethodChannel instance with a specific channel name.<\/span>\n  <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">const<\/span> methodChannel = MethodChannel(<span class=\"hljs-string\">'com.mobisoft.FlutterNativeModuleApp'<\/span>);\n\n\n  <span class=\"hljs-comment\">\/\/ Private constructor to prevent direct instantiation of the class.<\/span>\n  CloseFlutterModuleHelper._privateConstructor();\n\n\n  <span class=\"hljs-comment\">\/\/ A static method to close a Flutter screen using platform-specific code.<\/span>\n  <span class=\"hljs-keyword\">static<\/span> Future&lt;<span class=\"hljs-keyword\">void<\/span>&gt; closeFlutterScreen() <span class=\"hljs-keyword\">async<\/span> {\n    <span class=\"hljs-keyword\">try<\/span> {\n      <span class=\"hljs-comment\">\/\/ Invoke a method named 'dismissFlutterModule' on the MethodChannel.<\/span>\n      <span class=\"hljs-keyword\">await<\/span> methodChannel.invokeListMethod(<span class=\"hljs-string\">'dismissFlutterModule'<\/span>);\n    } on PlatformException <span class=\"hljs-keyword\">catch<\/span> (e) {\n      <span class=\"hljs-comment\">\/\/ If an exception occurs during method invocation, print the error.<\/span>\n      debugPrint(e.toString());\n    }\n  }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><span style=\"font-weight: 400;\">Here&#8217;s what the above code does:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">We have created a CloseFlutterModuleHelper class. Its purpose is to close the Flutter screen.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">MethodChannel instance named <\/span><b>methodChannel<\/b><span style=\"font-weight: 400;\"> is created. This channel is used for communication between Dart code and platform-specific code. The channel name &#8216;<\/span><b>com.mobisoft.FlutterNativeModuleApp<\/b><span style=\"font-weight: 400;\">&#8216; identifies the channel and should match the channel set up on the platform side.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">The closeFlutterScreen method is defined as a static method. It is responsible for initiating the process to close a Flutter screen using platform-specific code. Inside the closeFlutterScreen method, there&#8217;s a try block. Within this block, the methodChannel is used to invoke a method named <\/span><b>&#8216;dismissFlutterModule&#8217;<\/b><span style=\"font-weight: 400;\">.&nbsp;<\/span><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 7: Update Your AppDelegate to Listen to Callbacks from Your Flutter Module<\/h2>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">import UIKit\nimport Flutter\n@main\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n    \n    var methodChannel: FlutterMethodChannel!\n    var window: UIWindow?\n    lazy var flutterEngine = FlutterEngine(name: \"flutter_engine\")\n    \n    \n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: &#091;UIApplication.LaunchOptionsKey: Any]?) -&gt; Bool {\n        \n        flutterEngine.run(withEntrypoint: \"loadFromNative\", libraryURI: \"package:mi_flutter_module\/main.dart\")\n        \n        let controller : FlutterViewController = FlutterViewController(engine: flutterEngine, nibName: nil, bundle: nil)\n        \n        methodChannel = FlutterMethodChannel(name: \"com.mobisoft.FlutterNativeModuleApp\",\n                                             binaryMessenger: controller.binaryMessenger)\n        methodChannel.setMethodCallHandler ({ (call: FlutterMethodCall, result: @escaping FlutterResult) -&gt; Void in\n            switch call.method {\n            case \"dismissFlutterModule\":\n                \n                NotificationCenter.default.post(name: Notification.Name(\"DismissFlutterModule\"),\n                                                object: nil,\n                                                userInfo: nil)\n            default: result(FlutterMethodNotImplemented)\n            }\n        })\n        return true\n    }\n}\n<\/code><\/span><\/pre>\n\n\n<p><span style=\"font-weight: 400;\">Here&#8217;s what the above code does:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">We need to create a FlutterViewController instance using the initialized FlutterEngine. This controller will host the Flutter UI within the native iOS app.<\/span><\/li>\n<\/ul>\n<p><b>Setting up Method Channel:<\/b><span style=\"font-weight: 400;\"> We are setting up a methodChannel with a unique name (&#8220;com.mobisoft.FlutterNativeModuleApp&#8221;) (This should be the same as defined in our Flutter module) for communication between native and Flutter code. The binaryMessenger here refers to the channel of communication.<\/span><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">methodChannel = FlutterMethodChannel(name: <span class=\"hljs-string\">\"com.mobisoft.FlutterNativeModuleApp\"<\/span>, <span class=\"hljs-attr\">binaryMessenger<\/span>: controller.binaryMessenger)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><b>Method Call Handler:<\/b><span style=\"font-weight: 400;\"> We are setting a method call handler on the methodChannel. This handler processes incoming method calls from the Flutter side. In this case, it responds to the method called &#8220;<\/span><b>dismissFlutterModule<\/b><span style=\"font-weight: 400;\">&#8221; by posting a notification named &#8220;<\/span><b>DismissFlutterModule<\/b><span style=\"font-weight: 400;\">\u201d.<\/span><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">    methodChannel.setMethodCallHandler({ (call: FlutterMethodCall, <span class=\"hljs-attr\">result<\/span>: @escaping     FlutterResult) -&gt; Void <span class=\"hljs-keyword\">in<\/span>\n\n\n    <span class=\"hljs-comment\">\/\/ ...<\/span>\n})\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><span style=\"font-weight: 400;\">Here is how our updated ViewController code looks like &#8211;<\/span><\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">class ViewController: UIViewController {\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        NotificationCenter.default.addObserver(self, selector: #selector(self.dismissView),\n                                               name: Notification.Name(\"DismissFlutterModule\"),\n                                               object: nil)\n    }\n    \n    @IBAction func miFlutterModuleButtonTapped(_ sender: Any) {\n        \n        let flutterEngine = (UIApplication.shared.delegate as! AppDelegate).flutterEngine\n        let flutterViewController = FlutterViewController(engine: flutterEngine, nibName: nil, bundle: nil)\n        flutterViewController.modalPresentationStyle = .fullScreen\n        present(flutterViewController, animated: true, completion: nil)\n    }\n    \n    @objc func dismissView() {\n        self.dismiss(animated: true)\n    }\n}\n<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Summing It Up<\/h2>\n\n\n\n<p><span style=\"font-weight: 400;\">I hope you enjoyed this tutorial on How to add screens designed in Flutter into a Native App. To download the code for this app, please <a href=\"https:\/\/cdn.mobisoftinfotech.com\/assets\/images\/blog\/flutter-app\/flutter-native-app.zip\" download data-wplink-edit=\"true\">click here<\/a>.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In the next <\/span><span style=\"font-weight: 400;\">Part 2<\/span><span style=\"font-weight: 400;\">, we will cover How to add Flutter screens in Android with a focus on optimizing performance and user experience. <\/span><span style=\"font-weight: 400;\">Feel free to contact us if you have any questions or feedback. If you&#8217;re seeking a dedicated <\/span><a href=\"https:\/\/mobisoftinfotech.com\/services\/flutter-app-development-company\"><span style=\"font-weight: 400;\">Flutter app development company<\/span><\/a><span style=\"font-weight: 400;\"> to guide you through this transformative journey, our experts are just a click away.<\/span><span style=\"font-weight: 400;\"> Together, we can elevate your app&#8217;s performance, aesthetics, and user experience to new heights.<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/mobisoftinfotech.com\/contact-us?utm_source=blog&amp;utm_medium=referral&amp;utm_campaign=how-to-add-flutter-screens-to-native-app-cta1 \"><noscript><img decoding=\"async\" width=\"800\" height=\"340\" src=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/03\/cta2.jpg\" alt=\"Flutter app development services call to action banner\" class=\"wp-image-37688\"><\/noscript><img decoding=\"async\" width=\"800\" height=\"340\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20800%20340%22%3E%3C%2Fsvg%3E\" alt=\"Flutter app development services call to action banner\" class=\"wp-image-37688 lazyload\" data-src=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/03\/cta2.jpg\"><\/a><\/figure>\n\n\n<div class=\"modern-author-card\">\n    <div class=\"author-card-content\">\n        <div class=\"author-info-section\">\n            <div class=\"author-avatar\">\n                <noscript><img decoding=\"async\" src=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/prashant.png\" alt=\"Prashant Telangi\"><\/noscript><img decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"Prashant Telangi\" data-src=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/prashant.png\" class=\" lazyload\">\n            <\/div>\n            <div class=\"author-details\">\n                <h3 class=\"author-name\">Prashant Telangi<\/h3>\n                <p class=\"author-title\">Head of Technology, Mobile<\/p>\n                <a href=\"javascript:void(0);\" class=\"read-more-link read-more-btn\" onclick=\"toggleAuthorBio(this); return false;\">Read more <noscript><img decoding=\"async\" src=\"\/assets\/images\/blog\/Vector.png\" alt=\"expand\" class=\"read-more-arrow down-arrow\"><\/noscript><img decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"expand\" class=\"read-more-arrow down-arrow lazyload\" data-src=\"\/assets\/images\/blog\/Vector.png\"><\/a>\n                <div class=\"author-bio-expanded\">\n                    <p>Prashant Telangi brings over 15 years of experience in Mobile Technology, He is currently serving as Head of Technology, Mobile at <a href=\"https:\/\/mobisoftinfotech.com\" target=\"_blank\">Mobisoft Infotech<\/a>. With a proven history in IT and services, he is a skilled, passionate developer specializing in Mobile Applications. His strong engineering background underscores his commitment to crafting innovative solutions in the ever-evolving tech landscape.<\/p>\n                    <div class=\"author-social-links\"><div class=\"social-icon\"><a href=\"https:\/\/www.linkedin.com\/in\/prashant-telangi-83816918\/\" target=\"_blank\" rel=\"nofollow noopener\"><i class=\"icon-sprite linkedin\"><\/i><\/a>\n                     <a href=\"https:\/\/twitter.com\/PrashantAnna\" target=\"_blank\" rel=\"nofollow noopener\"><i class=\"icon-sprite twitter\"><\/i><\/a>\n                     <a href=\"https:\/\/www.facebook.com\/prashant.telangi\/\" target=\"_blank\" rel=\"nofollow noopener\"><i class=\"icon-sprite facebook\"><\/i><\/a><\/div><\/div>\n                    <a href=\"javascript:void(0);\" class=\"read-more-link read-less-btn\" onclick=\"toggleAuthorBio(this); return false;\" style=\"display: none;\">Read less <noscript><img decoding=\"async\" src=\"\/assets\/images\/blog\/Vector.png\" alt=\"collapse\" class=\"read-more-arrow up-arrow\"><\/noscript><img decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"collapse\" class=\"read-more-arrow up-arrow lazyload\" data-src=\"\/assets\/images\/blog\/Vector.png\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n        <div class=\"share-section\">\n            <span class=\"share-label\">Share Article<\/span>\n            <div class=\"social-share-buttons\">\n                <a href=\"https:\/\/www.facebook.com\/sharer\/sharer.php?u=https%3A%2F%2Fmobisoftinfotech.com%2Fresources%2Fblog%2Fhow-to-add-flutter-screens-to-native-app\" target=\"_blank\" class=\"share-btn facebook-share\"><i class=\"fa fa-facebook-f\"><\/i><\/a>\n                <a href=\"https:\/\/www.linkedin.com\/sharing\/share-offsite\/?url=https%3A%2F%2Fmobisoftinfotech.com%2Fresources%2Fblog%2Fhow-to-add-flutter-screens-to-native-app\" target=\"_blank\" class=\"share-btn linkedin-share\"><i class=\"fa fa-linkedin\"><\/i><\/a>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>While our affection for Flutter is unanimous, transitioning the entire app to Flutter all at once might not always be feasible. However, an effective approach involves integrating the Flutter project into our existing native app as a library or module. This can be seamlessly achieved using the add-to-app feature, allowing us to accomplish precisely that [&hellip;]<\/p>\n","protected":false},"author":15,"featured_media":29068,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_s2mail":"","footnotes":""},"categories":[286],"tags":[3958,1808,1809,3957,3959,3960,3956],"class_list":["post-29053","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-android-and-ios","tag-flutter-app-development","tag-flutter-app-development-company","tag-flutter-design","tag-ios-and-android","tag-ios-application","tag-ios-frameworkes"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to Add Flutter Screens to Your iOS App (Part 1)<\/title>\n<meta name=\"description\" content=\"Easily integrate Flutter-designed screens into your iOS app. Learn to add screens designed in Flutter into your iOS app with this step-by-step tutorial.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Add Flutter Screens to Your iOS App (Part 1)\" \/>\n<meta property=\"og:description\" content=\"Easily integrate Flutter-designed screens into your iOS app. Learn to add screens designed in Flutter into your iOS app with this step-by-step tutorial.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app\" \/>\n<meta property=\"og:site_name\" content=\"Mobisoft Infotech\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-28T14:02:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-21T11:15:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/og-how-to-add-flutter-screens-to-native-app.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1000\" \/>\n\t<meta property=\"og:image:height\" content=\"525\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Prashant Telangi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/og-how-to-add-flutter-screens-to-native-app.webp\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Prashant Telangi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app#article\",\"isPartOf\":{\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app\"},\"author\":{\"name\":\"Prashant Telangi\",\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/#\/schema\/person\/d7a32c3195dc5efe2829391045ffc070\"},\"headline\":\"How to Add Screens Designed in Flutter into Your iOS App (Part 1)\",\"datePublished\":\"2023-08-28T14:02:06+00:00\",\"dateModified\":\"2026-04-21T11:15:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app\"},\"wordCount\":1115,\"image\":{\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app#primaryimage\"},\"thumbnailUrl\":\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/how-to-add-flutter-screens-to-native-app.webp\",\"keywords\":[\"android and ios\",\"Flutter app development\",\"Flutter app development company\",\"Flutter design\",\"ios and android\",\"ios application\",\"iOS frameworkes\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app\",\"url\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app\",\"name\":\"How to Add Flutter Screens to Your iOS App (Part 1)\",\"isPartOf\":{\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app#primaryimage\"},\"image\":{\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app#primaryimage\"},\"thumbnailUrl\":\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/how-to-add-flutter-screens-to-native-app.webp\",\"datePublished\":\"2023-08-28T14:02:06+00:00\",\"dateModified\":\"2026-04-21T11:15:00+00:00\",\"author\":{\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/#\/schema\/person\/d7a32c3195dc5efe2829391045ffc070\"},\"description\":\"Easily integrate Flutter-designed screens into your iOS app. Learn to add screens designed in Flutter into your iOS app with this step-by-step tutorial.\",\"breadcrumb\":{\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app#primaryimage\",\"url\":\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/how-to-add-flutter-screens-to-native-app.webp\",\"contentUrl\":\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/how-to-add-flutter-screens-to-native-app.webp\",\"width\":855,\"height\":392,\"caption\":\"how to add screens designed in flutter into native app\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/mobisoftinfotech.com\/resources\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Add Screens Designed in Flutter into Your iOS App (Part 1)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/#website\",\"url\":\"https:\/\/mobisoftinfotech.com\/resources\/\",\"name\":\"Mobisoft Infotech\",\"description\":\"Discover Mobility\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/mobisoftinfotech.com\/resources\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/#\/schema\/person\/d7a32c3195dc5efe2829391045ffc070\",\"name\":\"Prashant Telangi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/cdde432a920f6002154a0769008dfecabe1f464d11187612020b889ad41808e7?s=96&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/cdde432a920f6002154a0769008dfecabe1f464d11187612020b889ad41808e7?s=96&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/cdde432a920f6002154a0769008dfecabe1f464d11187612020b889ad41808e7?s=96&r=g\",\"caption\":\"Prashant Telangi\"},\"sameAs\":[\"http:\/\/www.mobisoftinfotech.com\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Add Flutter Screens to Your iOS App (Part 1)","description":"Easily integrate Flutter-designed screens into your iOS app. Learn to add screens designed in Flutter into your iOS app with this step-by-step tutorial.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app","og_locale":"en_US","og_type":"article","og_title":"How to Add Flutter Screens to Your iOS App (Part 1)","og_description":"Easily integrate Flutter-designed screens into your iOS app. Learn to add screens designed in Flutter into your iOS app with this step-by-step tutorial.","og_url":"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app","og_site_name":"Mobisoft Infotech","article_published_time":"2023-08-28T14:02:06+00:00","article_modified_time":"2026-04-21T11:15:00+00:00","og_image":[{"width":1000,"height":525,"url":"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/og-how-to-add-flutter-screens-to-native-app.webp","type":"image\/webp"}],"author":"Prashant Telangi","twitter_card":"summary_large_image","twitter_image":"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/og-how-to-add-flutter-screens-to-native-app.webp","twitter_misc":{"Written by":"Prashant Telangi","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app#article","isPartOf":{"@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app"},"author":{"name":"Prashant Telangi","@id":"https:\/\/mobisoftinfotech.com\/resources\/#\/schema\/person\/d7a32c3195dc5efe2829391045ffc070"},"headline":"How to Add Screens Designed in Flutter into Your iOS App (Part 1)","datePublished":"2023-08-28T14:02:06+00:00","dateModified":"2026-04-21T11:15:00+00:00","mainEntityOfPage":{"@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app"},"wordCount":1115,"image":{"@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app#primaryimage"},"thumbnailUrl":"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/how-to-add-flutter-screens-to-native-app.webp","keywords":["android and ios","Flutter app development","Flutter app development company","Flutter design","ios and android","ios application","iOS frameworkes"],"articleSection":["Blog"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app","url":"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app","name":"How to Add Flutter Screens to Your iOS App (Part 1)","isPartOf":{"@id":"https:\/\/mobisoftinfotech.com\/resources\/#website"},"primaryImageOfPage":{"@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app#primaryimage"},"image":{"@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app#primaryimage"},"thumbnailUrl":"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/how-to-add-flutter-screens-to-native-app.webp","datePublished":"2023-08-28T14:02:06+00:00","dateModified":"2026-04-21T11:15:00+00:00","author":{"@id":"https:\/\/mobisoftinfotech.com\/resources\/#\/schema\/person\/d7a32c3195dc5efe2829391045ffc070"},"description":"Easily integrate Flutter-designed screens into your iOS app. Learn to add screens designed in Flutter into your iOS app with this step-by-step tutorial.","breadcrumb":{"@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app#primaryimage","url":"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/how-to-add-flutter-screens-to-native-app.webp","contentUrl":"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2023\/08\/how-to-add-flutter-screens-to-native-app.webp","width":855,"height":392,"caption":"how to add screens designed in flutter into native app"},{"@type":"BreadcrumbList","@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/how-to-add-flutter-screens-to-native-app#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/mobisoftinfotech.com\/resources\/"},{"@type":"ListItem","position":2,"name":"How to Add Screens Designed in Flutter into Your iOS App (Part 1)"}]},{"@type":"WebSite","@id":"https:\/\/mobisoftinfotech.com\/resources\/#website","url":"https:\/\/mobisoftinfotech.com\/resources\/","name":"Mobisoft Infotech","description":"Discover Mobility","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/mobisoftinfotech.com\/resources\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/mobisoftinfotech.com\/resources\/#\/schema\/person\/d7a32c3195dc5efe2829391045ffc070","name":"Prashant Telangi","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/cdde432a920f6002154a0769008dfecabe1f464d11187612020b889ad41808e7?s=96&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/cdde432a920f6002154a0769008dfecabe1f464d11187612020b889ad41808e7?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cdde432a920f6002154a0769008dfecabe1f464d11187612020b889ad41808e7?s=96&r=g","caption":"Prashant Telangi"},"sameAs":["http:\/\/www.mobisoftinfotech.com"]}]}},"_links":{"self":[{"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/posts\/29053","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/comments?post=29053"}],"version-history":[{"count":25,"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/posts\/29053\/revisions"}],"predecessor-version":[{"id":48981,"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/posts\/29053\/revisions\/48981"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/media\/29068"}],"wp:attachment":[{"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/media?parent=29053"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/categories?post=29053"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/tags?post=29053"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}