From 499646640fa4293ade10b526947d8a43d4f808fb Mon Sep 17 00:00:00 2001 From: "sanskar.gautam" Date: Tue, 20 May 2025 18:25:08 +0530 Subject: [PATCH] feature: launch arguments test screen added --- ios/Runner/AppDelegate.swift | 23 ++++++++++++++++-- lib/launch_arguments_screen.dart | 40 ++++++++++++++++++++++++++++++++ lib/main.dart | 11 ++++++++- 3 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 lib/launch_arguments_screen.dart diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index 6266644..f94dc7f 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -7,7 +7,26 @@ import UIKit _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { - GeneratedPluginRegistrant.register(with: self) - return super.application(application, didFinishLaunchingWithOptions: launchOptions) + GeneratedPluginRegistrant.register(with: self) + // Get root FlutterViewController + guard let controller = window?.rootViewController as? FlutterViewController else { + fatalError("rootViewController is not FlutterViewController") + } + + // Create a MethodChannel named "launch_arguments" + let channel = FlutterMethodChannel(name: "launch_arguments", binaryMessenger: controller.binaryMessenger) + + // Get launch arguments from native iOS + let arguments = ProcessInfo.processInfo.arguments + + // Handle method calls from Flutter + channel.setMethodCallHandler { call, result in + if call.method == "getLaunchArguments" { + result(arguments) + } else { + result(FlutterMethodNotImplemented) + } + } + return super.application(application, didFinishLaunchingWithOptions: launchOptions) } } diff --git a/lib/launch_arguments_screen.dart b/lib/launch_arguments_screen.dart new file mode 100644 index 0000000..b10808a --- /dev/null +++ b/lib/launch_arguments_screen.dart @@ -0,0 +1,40 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +class LaunchArgumentsScreen extends StatefulWidget { + const LaunchArgumentsScreen({Key? key}) : super(key: key); + + @override + State createState() => _LaunchArgumentsScreenState(); +} + +class _LaunchArgumentsScreenState extends State { + List _arguments = []; + + @override + void initState() { + super.initState(); + _fetchArguments(); + } + + Future _fetchArguments() async { + const platform = MethodChannel('launch_arguments'); + final args = await platform.invokeMethod>('getLaunchArguments'); + setState(() { + _arguments = args?.map((e) => e.toString()).toList() ?? []; + }); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: const Text("Launch Arguments")), + body: ListView.builder( + itemCount: _arguments.length, + itemBuilder: (context, index) { + return ListTile(title: Text(_arguments[index])); + }, + ), + ); + } +} diff --git a/lib/main.dart b/lib/main.dart index 864f91d..9881569 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -8,6 +8,7 @@ import 'package:demo_app/swiping_screen.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; +import 'package:demo_app/launch_arguments_screen.dart'; class HackyDrawPointersBinding extends IntegrationTestWidgetsFlutterBinding { HackyDrawPointersBinding() { @@ -17,7 +18,7 @@ class HackyDrawPointersBinding extends IntegrationTestWidgetsFlutterBinding { HackyDrawPointersBinding().framePolicy = LiveTestWidgetsFlutterBindingFramePolicy.fullyLive; assert( - WidgetsBinding.instance is HackyDrawPointersBinding, + WidgetsBinding.instance is HackyDrawPointersBinding, ); return WidgetsBinding.instance; } @@ -116,6 +117,14 @@ class _MyHomePageState extends State { }, child: const Text('Input Test'), ), + ElevatedButton( + onPressed: () { + Navigator.of(context).push( + MaterialPageRoute(builder: (_) => const LaunchArgumentsScreen()), + ); + }, + child: const Text('Launch Argument Test'), + ), ElevatedButton( onPressed: () { Navigator.of(context).push(