IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> iOS Native跳转到Flutter页面 -> 正文阅读

[移动开发]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()
}

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)
            }
        }
    }

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,
    );
  }
}
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('这是我的页面'),
      ),
    );
  }
}

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-02-22 20:43:02  更:2022-02-22 20:45:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年9日历 -2024/9/22 16:47:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码