Android&Flutter混合开发初体验

最近flutter不是一般的火呀,但对于一些成熟的产品来说,完全摒弃原有App的历史沉淀,全面转向Flutter是不现实的。因此使用Flutter去统一Android、iOS技术栈,把它作为已有原生App的扩展能力,通过有序推进来提升移动端的开发效率
(1)创建flutter模块,创建module后会AS会自动进行flutter的相关配置
在这里插入图片描述
(2)将FlutterActivity添加到AndroidManifest.xml

1 <activity 2 android:name="io.flutter.embedding.android.FlutterActivity" 3 android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" 4 android:hardwareAccelerated="true" 5 android:theme="@style/FlutterTheme" 6 android:windowSoftInputMode="adjustResize" />

(3)跳转到flutter页面

startActivity(FlutterActivity.withNewEngine().initialRoute("route").build(this))

(4)你也可以使用缓存的FlutterEngine,可以减少加载延迟
在MyApplication中实例化一个FlutterEngine

1class MyApplication : Application() { 2 3 4 lateinit var flutterEngine: FlutterEngine 5 override fun onCreate() { 6 7 8 super.onCreate() 9 flutterEngine = FlutterEngine(this) 10 flutterEngine.dartExecutor.executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault()) 11 FlutterEngineCache.getInstance().put("my_engine_id", flutterEngine) 12 } 13}

然后在Activity中跳转

1 btn.setOnClickListener { 2 3 4 startActivity(FlutterActivity.withCachedEngine("my_engine_id").build(this)) 5 }

注意:使用withCachedEngine()工厂方法时,请传递与缓存所需的ID相同的ID FlutterEngine

设置缓存引擎时也可以初始路由,修改MyApplication

1 flutterEngine = FlutterEngine(this) 2 flutterEngine.navigationChannel.setInitialRoute("route") //可以借此携带一些字符串数据,可传递到flutter页面 3 flutterEngine.dartExecutor.executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault()) 4 FlutterEngineCache.getInstance().put("my_engine_id", flutterEngine)

对应的dart

1import 'dart:ui'; 2import 'package:flutter/material.dart'; 3 4void main() => runApp(MyApp()); 5 6class MyApp extends StatelessWidget { 7 8 9 @override 10 Widget build(BuildContext context) { 11 12 13 return MaterialApp( 14 title: 'Flutter Demo', 15 theme: ThemeData( 16 primarySwatch: Colors.blue, 17 ), 18 home: _widgetForRoute(window.defaultRouteName), 19 ); 20 } 21} 22 23//路由的选择 24Widget _widgetForRoute(String route) { 25 26 27 switch (route) { 28 29 30 case 'route': 31 return MaterialApp( 32 home: Scaffold( 33 appBar: AppBar( 34 title: Text('Flutter页面'), 35 ), 36 body: Center( 37 child: Text('行走的猪蹄', 38 style: TextStyle(color: Colors.red), 39 textDirection: TextDirection.ltr), 40 ), 41 ), 42 ); 43 default: 44 return Center( 45 child: Text('Unknown route: $route', 46 style: TextStyle(color: Colors.red), 47 textDirection: TextDirection.ltr), 48 ); 49 } 50}
点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

【Flutter实战】初识Flutter

1.2初识Flutter1.2.1Flutter简介Flutter是Google推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过Dart语言开发App,一套代码同时运行在iOS和Android平台。Flutter提供了丰富的组件、接口,开发者可以很快地为Flutter添加native扩展。同时Flu

Flutter与Android混合开发及Platform Channel的使用

1.相对于单独开发Flutter应用,混合开发对于线上项目更具有实际意义,可以把风险控制到最低,也可以进行实战上线。所以介绍集成已有项目2.混合开发涉及原生Native和Flutter进行通信传输,还有插件编写,所以介绍两端通信FlutterPlatformChannel的使用WanAndroid客

Flutter 笔记

最近开发需要,要接触移动端一些东西,所以看一下flutter。因为移动端经常是要做一样事情就是即要有android平台,又要有ios平台,所以,选择了Flutter。为什么不是ReactNative?因为,Flutter字比较少,而且不用打空格,我喜欢。一、安装1.下载2.解压3.设置path4.开始二、

Flutter 1.0 正式版: Google 的便携 UI 工具包

Flutter1.0正式版:Google的便携UI工具包文/TimSneath,GoogleDart&Flutter产品组产品经理Flutter是Google打造的UI工具包,通过一套代码同时在iOS和Android上构建媲美原生体验的精美应用!如今,移动开发者们在同时兼容iOS和Android