2018年,谷歌发布了一款新的跨平台移动UI框架:Flutter。该框架是构建谷歌下一代物联网操作系统FuchsiaOS的SDK,主打跨平台、高保真、高性能。开发者可以通过Dart语言开发App,可以实现一套代码同时运行在iOS、Android、浏览器、Windows、Mac等7个平台,Flutter使用Native引擎渲染视图,并提供了丰富的组件和接口,这无疑为开发者和用户提供了良好的体验。Flutter借助先进的工具链和编译器,成为少数同时支持JIT和AOT的语言之一,开发期调试效率高,发布期运行速度快、执行性能好,在代码执行效率上可以媲美原生App,也成了目前最受业界关注的框架之一。
特来电App iOS 目前支持源码及 framework 形式集成 Flutter, 可以修改本地Podfile文件内容来修改集成方式进行开发及调试,发布时使用 framework 集成。app 内部基于FlutterBoost自己实现了一套原生与 Flutter 交互的代码,包括数据读取,存储,网络请求,原生与 Flutter 通信等。
App 加载 Flutter 页面通过路由形式打开:
iOS 打开 Flutter 页面
[FlutterBoost.instance open:@"about_page" arguments:@{@"wxInstalled":@([WXApi isWXAppInstalled])} routerOperation:^(TLDFlutterRouterOperation *operation) {
operation.pageDesc = @"App设置#关于#关于";
}];
Flutter页面
'about_page': (settings, uniqueId) {
return PageRouteBuilder(
settings: settings,
pageBuilder: (_, __, ___) => AboutPage(params: settings.arguments));
}
原生与Flutter无法直接传递消息,而是通过Flutter交互来通信,Flutter交互为异步调用。
iOS注册:
[flutterMethodChannel setMethodCallHandler:^(FlutterMethodCall * _Nonnull call, FlutterResult _Nonnull result) {
[TLDFlutterChancelHandler methodCallHandler:call result:result];
}];
Flutter调用
Map tokenInfo = await methodChannel.invokeMethod('commonHandler-getToken');
Flutter页面网络请求通过交互调用原生封装的网络框架来实现, 页面主要关注展示。
特来电 app 集成 Flutter 目前已有4年多, 线上运行稳定, 平时功能开发完成后在安卓及 iOS 平台运行效果基本一致。 后期如果在Flutter热更新方面完善后,可以极大缩短发版时间。