概述

需要实现native跳转到flutter 指定的路由页面。

iOS 工程中发现 FlutterViewController  setInitialRouter 无效,在我的需求里面是: 在iOS现有工程集成flutter项目,然后可以跳转到任意的 业务页面。

在iOS 之中实例化页面有两种方式,如下:

1. 通过全局统一的方式进行实例子化:(无效)

swift 代码:

  1. @objc func handleButtonAction() {
  2. let flutterEngine = (UIApplication.shared.delegate as? AppDelegate)?.flutterEngine
  3. let flutterViewController = FlutterViewController(engine: flutterEngine, nibName: nil, bundle: nil)!
  4. flutterViewController.setInitialRoute("test1")
  5.  
  6. self.navigationController?.pushViewController(flutterViewController, animated: true)
  7. }

这种方式显示效果最好,app 已启动,就会直接加载数据,是我所需要的一种,渲染效果几乎和native 一致,毫无违和感,交互非常流畅。

但是如果我想之前跳转到指定页面如:“test1” 路由页面,却发现不起作用;

2、通过全局统一pushrouter方式:(有效,效果差)

swift pushRouter:

  1. @objc func handleButtonAction() {
  2. let flutterEngine = (UIApplication.shared.delegate as? AppDelegate)?.flutterEngine
  3. let flutterViewController = FlutterViewController(engine: flutterEngine, nibName: nil, bundle: nil)!
  4. flutterViewController.pushRoute("test1")
  5. self.navigationController?.pushViewController(flutterViewController, animated: true)
  6. }

上面代码虽然有效,但是效果不是很好,而且有明显的push 状态。所以不是我们想要的

3、通过new FlutterViewController 方式设置(有效)

  1. @objc func handleButtonAction2(){
  2. let flutterViewController = FlutterViewController()
  3. flutterViewController.setInitialRoute("test1")
  4.  
  5. self.navigationController?.pushViewController(flutterViewController, animated: true)
  6. }

有效,但是每次渲染都有一闪的效果,在交互上比native差一点。

4、flutter 路由代码

  1. class MyApp extends StatelessWidget {
  2. // This widget is the root of your application.
  3. @override
  4. Widget build(BuildContext context) {
  5. return MaterialApp(
  6. title: 'Flutter rokid',
  7. debugShowCheckedModeBanner: false,// 显示和隐藏
  8. theme: ThemeData(
  9. // This is the theme of your application.
  10. //
  11. // Try running your application with "flutter run". You'll see the
  12. // application has a blue toolbar. Then, without quitting the app, try
  13. // changing the primarySwatch below to Colors.green and then invoke
  14. // "hot reload" (press "r" in the console where you ran "flutter run",
  15. // or press Run > Flutter Hot Reload in a Flutter IDE). Notice that the
  16. // counter didn't reset back to zero; the application is not restarted.
  17. primarySwatch: Colors.blue,
  18. ),
  19. home: PlaygroundPage(title: '若琪实验室'),
  20. routes: <String ,WidgetBuilder>{
  21. "test": (_) => new PlaygroundPage(title: "我是内部路由测试test00",),
  22. "test1": (_) => new PlaygroundPage(title: "我是内部路由测试test01",)
  23. },
  24. );
  25. }
  26. }

参考资料:

https://www.gitmemory.com/issue/flutter/flutter/29554/492593645

flutter setInitialRoute: 不生效的更多相关文章

  1. Flutter 异常处理之图片篇

    背景 说到异常处理,你可能直接会认为不就是 try-catch 的事情,至于写一篇文章单独来说明吗? 如果你是这么想的,那么本篇说不定会给你惊喜哦~ 而且本篇聚焦在图片的异常处理. 场景 学以致用,有 ...

  2. 浅谈Flutter(一):搭建Flutter开发环境

    学习内容来自: Flutter中文网  . Flutter实战 -------------------------------------------------------------------- ...

  3. 安装与配置Flutter开发环境

    这篇博客我们介绍了Flutter,并且对比了H5,React Native,Flutter. 由于Flutter是跨平台的开发框架,开发一次可以同时运行在Android和iOS上面,所以我们开发时最好 ...

  4. Flutter 布局(三)- FittedBox、AspectRatio、ConstrainedBox详解

    本文主要介绍Flutter布局中的FittedBox.AspectRatio.ConstrainedBox,详细介绍了其布局行为以及使用场景,并对源码进行了分析. 1. FittedBox Scale ...

  5. Flutter 布局详解

    本文主要介绍了Flutter布局相关的内容,对相关知识点进行了梳理,并从实际例子触发,进一步讲解该如何去进行布局. 1. 简介 在介绍Flutter布局之前,我们得先了解Flutter中的一些布局相关 ...

  6. Flutter(一)安装配置和几个注意点

    Flutter(一)安装配置和几个注意点 记住要仰望星空,不要低头看脚下.无论生活如何艰难,请保持一颗好奇心.你总会找到自己的路和属于你的成功. 愿您的来世灵魂依旧,躯体康健. 一句话来形容Flutt ...

  7. Flutter 知识点

    Flutter:一个移动应用开发框架,它使用 Dart.C++.Skia 开发,对外提供了完全不依赖系统平台的 Widget 的能力,只通过自绘图形的方式工作,具有极其优秀的跨平台性.目前已经支持了 ...

  8. Flutter 安装

    都说程序猿学习是不分平台的,做了一辈子的Xaml,也想看看现在最牛逼的移动技术. 看了看Google 的Flutter,好像很牛逼,不怎么需要Android和IOS基础(应该还是要的), 不过现在是B ...

  9. Flutter开发环境(Window)配置及踩坑记录

    Flutter 是 Google 用以帮助开发者在 iOS 和 Android 两个平台开发高质量原生 UI 的移动 SDK.Flutter 兼容现有的代码,免费且开源,在全球开发者中广泛被使用. F ...

随机推荐

  1. mac 安装brew mac安装expect mac一键登录服务器脚本

    mac 安装brew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/ma ...

  2. HTTPS 加密机制

    目录 1. HTTPS 概述 2. 对称加密 3. 非对称加密 4. 非对称加密改良方案 5. 非对称加密 + 对称加密 6. 中间人攻击 7. 数字证书 8. 数字签名 9. HTTPS 工作原理 ...

  3. LeetCode K个一组翻转链表

    题目链接:https://leetcode-cn.com/problems/reverse-nodes-in-k-group/ 题目大意 略. 分析 逆转每一段,然后和上一段与下一段衔接即可,加头结点 ...

  4. MySQL慢查询日志分割

    mysql> set global slow_query_log=0; Query OK, 0 rows affected (0.00 sec)   mysql> set global s ...

  5. 面试总结【css篇】- css选择器以及优先级

    优先(优先级为): !important > 内联样式 > #id > .class > tag > * > 继承  > 默认 . 当选择器的权重相同时,它将 ...

  6. [已解决]Series object has no attribute explode

    报错代码 s = pd.Series([[1, 2, 3], 'foo', [], [3, 4]]) s 0 [1, 2, 3] 1 foo 2 [] 3 [3, 4] dtype: object s ...

  7. 2019ICPC南京网络赛F Greedy Sequence

    题意:对于1<=i<=n每次找到(pos[i]-k,pos[i]+k)内不大于i的最大那个数,ans[i]=ans[mx]+1,若ans[mx]未知则递归处理ans[mx] PS:这个题比 ...

  8. 如果在vue中实现一个输入框的抖动效果?

    1. 先来理下思路? 1)抖动就是摆动,现实中的钟摆可以很形象. 2)当摆动到临界点后,就会向相反的方向摆动. 3)在没有动力时,摆动会慢慢停止. 2.用法: :start.sync 里面是抖动器名字 ...

  9. cocos2dx 3.9 微信授权登陆后游戏进程结束解决办法

    找到 Cocos2dxActivity.java 文件夹 里面的 onDestroy() 方法 if (mGLSurfaceView != null) {            Cocos2dxHel ...

  10. 笔记45 Hibernate快速入门(二)

    Hibernate O/R 映射 一.多对一 一个Product对应一个Category,一个Category对应多个Product,所以Product和Category是多对一的关系.使用hiber ...