flutter boost接入

关于作者: CSDN内容合伙人、技术专家, 从零开始做日活千万级APP,带领团队单日营收超千万。
专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业化变现、人工智能等,希望大家多多支持。

在这里插入图片描述

一、导读

我们继续总结学习flutter boost基础知识,温故知新。

二、概览

FlutterBoost 是阿里系闲鱼技术团队开源的 Flutter 插件,它可以轻松为现有原生应用程序提供 Flutter 混合集成方案。
其理念是将 Flutter 像 WebView 那样来使用。FlutterBoost 帮开发者处理 Native 与 Flutter 页面的映射和跳转,
开发者只需关心页面的名字和参数即可 ( 通常可以是 URL ) 。可以让一个成熟的原生 APP 项目,在不用推翻重做的前提下,
方便快捷的开始 Flutter 混合开发,几乎不影响原有的 Native 项目。同时 FlutterBoost 也是在 Flutter
官方提供的混合开发解决方案上探索出来的最优解,并已在闲鱼 APP 线上环境中运用,承受着亿级用户量的检测,稳定性值得肯定。

三、接入

flutter_boost开源地址

3.1 源码集成方式

1、新建一个文件夹FlutterBoostExample,这个文件夹下面放置另外三个文件夹。 另外三个分别是您的Android工程,iOS工程,以及需要接入的flutter module
2、新建flutter module

在Android Studio 中打开你的Android 项目。
前往File > New > New Project...,此时New Project 弹窗会显示。
选择Flutter。
填写你的Flutter SDK path 并点击Next 继续。
完成你的Flutter 模块配置。

或者使用命令行创建:

flutter create -t module flutter_boost_module

然后在参考官方文档,https://github.com/alibaba/flutter_boost/blob/main/docs/install.md 进行集成。
首先,需要添加FlutterBoost依赖到yaml文件

flutter_boost:
  git:
    url: 'https://github.com/alibaba/flutter_boost.git'
    ref: '4.6.5'

之后在flutter工程下运行flutter pub get dart端就集成完毕了,然后可以在dart端放上一些代码,以下代码基于example3.0
//这里要特别注意,如果你的工程里已经有一个继承自WidgetsFlutterBinding的自定义Binding,则只需要将其with上BoostFlutterBinding
//如果你的工程没有自定义的Binding,则可以参考这个CustomFlutterBinding的做法 //BoostFlutterBinding用于接管Flutter App的生命周期,必须得接入的

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_boost/flutter_boost.dart';

void main() {
   
   
  ///这里的CustomFlutterBinding调用务必不可缺少,用于控制Boost状态的resume和pause
  CustomFlutterBinding();
  runApp(MyApp());
}


///创建一个自定义的Binding,继承和with的关系如下,里面什么都不用写
class CustomFlutterBinding extends WidgetsFlutterBinding with BoostFlutterBinding {
   
   }

class MyApp extends StatefulWidget {
   
   
  
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
   
   
  /// 由于很多同学说没有跳转动画,这里是因为之前exmaple里面用的是 [PageRouteBuilder],
  /// 其实这里是可以自定义的,和Boost没太多关系,比如我想用类似iOS平台的动画,
  /// 那么只需要像下面这样写成 [CupertinoPageRoute] 即可
  /// (这里全写成[MaterialPageRoute]也行,这里只不过用[CupertinoPageRoute]举例子)
  ///
  /// 注意,如果需要push的时候,两个页面都需要动的话,
  /// (就是像iOS native那样,在push的时候,前面一个页面也会向左推一段距离)
  /// 那么前后两个页面都必须是遵循CupertinoRouteTransitionMixin的路由
  /// 简单来说,就两个页面都是CupertinoPageRoute就好
  /// 如果用MaterialPageRoute的话同理

  Map<String, FlutterBoostRouteFactory> routerMap = {
   
   
### FlutterBoost 实现 Flutter 页面跳转至原生页面的数据回传问题 #### 问题原因分析 在使用 `flutter_boost` 进行 Flutter 页面与原生页面之间的跳转时,数据回传可能遇到的问题通常源于以下几个方面: 1. **回调未正确设置** 在通过 `flutter_boost` 跳转到原生页面时,如果未正确配置回调接口,则可能导致无法接收到从原生页面返回的数据。这涉及到在调用原生页面前是否设置了用于接收数据的回调函数[^2]。 2. **生命周期管理不当** 如果 Flutter 页面被销毁或者其状态丢失,在这种情况下即使原生页面尝试发送数据回来也可能失败。这是因为 Flutter Boost 需要保持页面栈的一致性和上下文的有效性来完成数据交换过程[^3]。 3. **平台通道异常** 使用 MethodChannel 或者 Platform Channel 来处理跨平台消息传递过程中可能出现错误编码/解码逻辑失误等问题,进而影响正常的数据流转行为[^1]。 4. **参数序列化问题** 当涉及复杂对象作为参数传输时如果没有遵循双方约定好的格式标准(比如 JSON 序列化),则容易引起解析上的偏差从而造成最终结果不符合预期[^4]。 #### 解决方案建议 针对上述提到的各种潜在因素可以采取如下措施加以改进和完善: - #### 明确设定回调监听器 确保每次发起前往 Native 的请求之前都已绑定好对应的 result handler 方法以便于后续能够捕获来自对方端口反馈过来的信息流。例如可以通过下面这种方式指定一个匿名内部类形式实现 IContainerDelegate 接口中定义的方法以达到目的: ```java // Java (Android Example) container.openPage(new OpenParams(pageName, params), new ContainerDelegate() { @Override public void onResult(String resultCode, Map<String, Object> data) { super.onResult(resultCode, data); Log.d(TAG,"Received Result Code:" + resultCode+", Data:"+data.toString()); } }); ``` - #### 加强页面存活保障机制 考虑引入诸如 retain 属性之类的选项让某些特定场景下的临时过渡型界面得以维持更长时间的存在周期直到真正结束使命为止再予以释放资源回收操作;另外也可以借助 NavigatorObserver 类型的对象监控整个导航链路的变化情况及时作出相应调整动作防止意外中断现象发生. - #### 完善通信协议设计 统一规定所有参与方之间相互交流所使用的语法规则以及数据结构描述方式减少歧义提高兼容度降低误判几率。具体做法包括但不限于采用标准化库函数辅助完成序列化解析工作如 Gson/Fastjson 等工具快速转换JSON字符串表示形式便于两端无缝对接共享信息内容. - #### 测试覆盖全面优化体验效果 构建完整的单元测试套件模拟各种边界条件组合验证实际运行表现是否满足需求规格书中的各项指标要求不断迭代升级直至达成最佳用户体验水平为目标持续努力前行. ```dart /// Dart Side Sample Code For Handling Returned Values From Native Pages. Future<void> navigateToNativeAndHandleResponse(Map<String,dynamic>? args) async{ final response=await FlutterBoost.singleton.open('native_page',params:{'key':'value'}); print('Got Response from native:${response}'); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Android西红柿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值