Advertisement

iOS Native跳转到Flutter页面

阅读量:

iOS原生页面跳转到指定Flutter页面

复制代码
 override func viewDidLoad() {

    
     super.viewDidLoad()  
    
      
    
     view.backgroundColor = .white
    
  
    
     let nextBtn = UIButton(type: .custom)
    
     nextBtn.frame = CGRect(x: 0, y: 0, width: 120, height: 50)
    
     nextBtn.setTitle("跳转Flutter", for: .normal)
    
     nextBtn.setTitleColor(.blue, for: .normal)
    
     view.addSubview(nextBtn)
    
     nextBtn.center = view.center
    
     nextBtn.addTarget(self, action: #selector(gotoNextEvent), for: .touchUpInside)
    
     
    
     // Do any additional setup after loading the view.
    
 }
    
  
    
 // iOS 跳转到指定Flutter路由页面
    
 @objc func gotoNextEvent() {
    
     let flutterViewController = FlutterViewController(project:nil,  initialRoute: "mine", nibName: nil, bundle: nil)
    
     self.navigationController?.pushViewController(flutterViewController, animated: true)
    
     flutterSetup()
    
 }
    
    
    
    
    Swift
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-18/RuNsE5IdTcVvJZHrQbWC4kjf93KA.png)

Flutter 返回iOS原生回调

复制代码
  func flutterSetup() {

    
     let navigation = UIApplication.shared.keyWindow?.rootViewController as? UINavigationController
    
     guard let contoller = navigation?.topViewController as? FlutterViewController else {
    
         fatalError("contoller is not type FlutterViewController")
    
     }
    
     let flutterChannel = FlutterMethodChannel(name: "com.flutterToNative.second", binaryMessenger: contoller.binaryMessenger)
    
     flutterChannel.setMethodCallHandler { call, result in
    
         if call.method == "backToNative" {
    
             self.navigationController?.popViewController(animated: true)
    
         } else {
    
             result(FlutterMethodNotImplemented)
    
         }
    
     }
    
     }
    
    
    
    
    Swift
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-18/mIU8yJvEWiQPXOYKs653joATwct9.png)

flutter 对应代码如下:

复制代码
 import 'package:flutter/material.dart';

    
 import 'package:my_app/home.dart';
    
 import 'package:my_app/mine.dart';
    
  
    
 void main() {
    
   runApp(const MyApp());
    
 }
    
  
    
 Map<String, WidgetBuilder> routes = {
    
   "home": (context) => const HomePage(),
    
   "mine": (context) => const MinePage()
    
 };
    
  
    
 class MyApp extends StatelessWidget {
    
   const MyApp({Key? key}) : super(key: key);
    
  
    
   // This widget is the root of your application.
    
   @override
    
   Widget build(BuildContext context) {
    
     return MaterialApp(
    
       title: 'Flutter Demo',
    
       theme: ThemeData(
    
     // This is the theme of your application.
    
     //
    
     // Try running your application with "flutter run". You'll see the
    
     // application has a blue toolbar. Then, without quitting the app, try
    
     // changing the primarySwatch below to Colors.green and then invoke
    
     // "hot reload" (press "r" in the console where you ran "flutter run",
    
     // or simply save your changes to "hot reload" in a Flutter IDE).
    
     // Notice that the counter didn't reset back to zero; the application
    
     // is not restarted.
    
     primarySwatch: Colors.blue,
    
       ),
    
       home: const HomePage(),
    
       initialRoute: 'home',
    
       routes: routes,
    
     );
    
   }
    
 }
    
    
    
    
    Kotlin
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-18/2jx3YvLGnaiMF7yIUDQkBpWHcwzd.png)
复制代码
 import 'package:flutter/material.dart';

    
 import 'package:flutter/services.dart';
    
  
    
 class MinePage extends StatefulWidget {
    
   const MinePage({Key? key}) : super(key: key);
    
  
    
   @override
    
   _MinePageState createState() => _MinePageState();
    
 }
    
  
    
 class _MinePageState extends State<MinePage> {
    
   static const methodChannel = MethodChannel('com.flutterToNative.second');
    
  
    
   @override
    
   Widget build(BuildContext context) {
    
     return Scaffold(
    
       appBar: AppBar(
    
     title: const Text(''),
    
     backgroundColor: Colors.blue,
    
     systemOverlayStyle: SystemUiOverlayStyle.light,
    
     leading: IconButton(
    
       icon: const Icon(Icons.arrow_back_ios),
    
       onPressed: () => {methodChannel.invokeMethod('backToNative')},
    
     ),
    
       ),
    
       body: const Center(
    
     child: Text('这是我的页面'),
    
       ),
    
     );
    
   }
    
 }
    
    
    
    
    Kotlin
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-18/LStsBqbyZgAYCGcDu0iUaKr2oFmf.png)

全部评论 (0)

还没有任何评论哟~