新版Flutter集成到已有Android项目的实现

FlutterSDK升级后,我们发现不能按照原来的方式集成到已有Android项目中了,因为没有了Flutter这个类,通过阅读源码我找到了新的使用方式。

一、创建Flutter Module

在已有Android工程中集成flutter,可以使用AndroidStudio的new Flutter Module实现,方便快捷。

找到FlutterModule,一连串的next操作即可

创建完成后我们的项目中会多一个叫做flutter的module

并且在项目的setting.gradle文件中会自动添加如下几行代码,

setBinding(new Binding([gradle:this]))
evaluate(
  new File(
    settingsDir,
    'flutter_module/.android/include_flutter.groovy'
  )
)
include ':flutter_module'

最后我们只需在app的build.gradle中引用这个flutter模块即可

implementation project(path: ':flutter')

二、使用Flutter

两种使用方式,FlutterView和FlutterFragment。

首先在Application中初始化

public class MVApplication extends Application {
 private static MVApplication instance;
 public static MVApplication getInstance(){
  return instance;
 }
 @Override
 public void onCreate() {
  super.onCreate();
  FlutterMain.Settings settings=new FlutterMain.Settings();
  settings.setLogTag("MyFlutter");
  FlutterMain.startInitialization(this,settings);
  String[] args = {"info", "data"};
  FlutterMain.ensureInitializationComplete(this,args);
  instance=this;
 }
}

1、使用FlutterFragment

新版本的FlutterSDK不再支持已经没有Flutter类,不再支持诸如Flutter.createView()、Flutter.createFragment()等用法,通过阅读其源码我们可以找到FlutterFragment的新用法,代码如下:

public class MyFlutterActivity extends FragmentActivity {
 @Override
 protected void onCreate(@Nullable Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.flutter_layout);
  //FlutterFragment fragment=new FlutterFragment();
  FlutterFragment fragment=FlutterFragment.withNewEngine().initialRoute("home").build();
  getSupportFragmentManager().beginTransaction().add(R.id.flutter_container, fragment).commit();
 }
}

代码中FlutterFragment的创建也可以直接使用默认的构造方法,这样加载main.dart中的默认路由,即''/'',给出的示例代码中我们通过调用FlutterFragment.withNewEngine().initialRoute("home").build()创建了新的NewEngineFragmentBuilder来构建指定路由的FlutterFragment。

2、使用FlutterView

FlutterView的创建同样不能使用老版本的方法了,新版本的使用方法代码如下:

public class MyFlutterActivity extends FragmentActivity {
 @Override
 protected void onCreate(@Nullable Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.flutter_layout);
  FrameLayout frameLayout=findViewById(R.id.flutter_container);
  ProgressBar progress=findViewById(R.id.progress);
  //创建FlutterView
  FlutterView flutterView=new FlutterView(this);
  //创建FlutterView首帧渲染完成监听
  flutterView.addFirstFrameListener(new FlutterView.FirstFrameListener() {
   @Override
   public void onFirstFrame() {
    //隐藏进度条,显示FlutterView
    progress.setVisibility(View.GONE);
    frameLayout.setVisibility(View.VISIBLE);
   }
  });
  //创建dart代码执行器
  DartExecutor executor=flutterView.getDartExecutor();
  //执行main.dart中的main函数
  executor.executeDartEntrypoint(
    new DartExecutor.DartEntrypoint(FlutterMain.findAppBundlePath(),
      "main"));
  //将FlutterView添加到布局中
  ViewGroup.LayoutParams layoutParams=new LinearLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,
    FrameLayout.LayoutParams.MATCH_PARENT);
  frameLayout.addView(flutterView);
 }
}

布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent">
 <FrameLayout
  android:id="@+id/flutter_container"
  android:visibility="invisible"
  android:layout_width="match_parent"
  android:layout_height="match_parent">

 </FrameLayout>
 <ProgressBar
  android:id="@+id/progress"
  android:layout_width="45dp"
  android:layout_height="45dp"
  android:layout_centerVertical="true"
  android:layout_centerHorizontal="true"
  android:visibility="visible"
  >
 </ProgressBar>
</RelativeLayout>

效果如下图:

到此这篇关于新版Flutter集成到已有Android项目的实现的文章就介绍到这了,更多相关Flutter集成到已有Android项目内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • android使用flutter的ListView实现滚动列表的示例代码

    现如今打开一个 App,比如头条.微博,都会有长列表,随着我们不断地滑动,视窗内的内容也会不断地更新.今天就用 Flutter 实现一下这种效果. 这里的表现其实就相当于有一个固定长度的容器,然后超出的内容是不可见的,只有当你向上或向下滑动屏幕时,视窗外看不见的内容才会出现在视窗中.如果在 web 开发时,是需要容器加上样式 overflow: auto; 要想用 Flutter 实现,其实也是很简单的,因为 Flutter 为我们提供了 ListView 组件. ListView 主要有以下几

  • Flutter Android端启动白屏问题的解决

    问题描述 Flutter 应用在 Android 端上启动时会有一段很明显的白屏现象,白屏的时长由设备的性能决定,设备性能越差,白屏时间越长. 问题分析 其实启动白屏的问题在Android原生应用上也是一个常见问题,大致是因为从用户点击 Launcher Icon 到应用首页显示之间,Android 系统在完成应用的初始化工作,其流程如下: 在 Flutter Android 端上,白屏的问题会更加严重,因为除了 Android 应用启动耗时外,还增加了 Flutter 初始化耗时. 直到 Fl

  • android studio 3.6.1升级后如何处理 flutter问题

    前提条件介绍 1.android-studio-3.6.1 死丢丢 配置了dart 和flutter插件 在 3.5.3时 成功运行过flutter工程 2.flutter 版本 Flutter 1.12.13+hotfix.8 • channel stable • https://github.com/flutter/flutter.git Framework • revision 0b8abb4724 (5 weeks ago) • 2020-02-11 11:44:36 -0800 Eng

  • Android Studio 下 Flutter 开发环境搭建,Flutter,Dart 插件安装,Flutter SDK 安装,环境变量配置,开发环境检查

    I . Flutter 学习资料 Flutter 学习资料 : ① 官方文档 : https://flutter.dev/docs ② Flutter Android 开发者文档 : https://flutter.dev/docs/get-started/flutter-for/android-devs ② Flutter 插件库 : https://pub.dev/ II . Flutter 开发环境搭建 Flutter 开发环境搭建 : ① Android Studio : https:/

  • Android Studio下Flutter环境搭建图文教程

    一.Flutter介绍 Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面.Flutter可以与现有的代码一起工作.在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费.开源的. 二.环境搭建 Flutter 的环境搭建⼗分省⼼,特别对应Android开发者⽽⾔,只是在AndroidStuido上安装 插件,并下载flutterSdk到本地,配置在环境变量即可,其实 中⽂⽹的搭建Futter开发环境 已经很贴⼼详细,从

  • Flutter调用Android和iOS原生代码的方法示例

    前言 本文主要给大家介绍了关于Flutter调用Android和iOS原生代码的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 分3个大步骤: 1.在flutter中调用原生方法 2.在Android中实现被调用的方法 3.在iOS中实现被调用的方法 在flutter中调用原生方法 场景,这里你希望调用原生方法告诉你一个bool值,这个值的意义你可以随意定,这里表示的意义是是否是中国用户. 你可以在flutter中设计好要调用的方法名称,这里就叫 isChinese 请

  • 新版Flutter集成到已有Android项目的实现

    FlutterSDK升级后,我们发现不能按照原来的方式集成到已有Android项目中了,因为没有了Flutter这个类,通过阅读源码我找到了新的使用方式. 一.创建Flutter Module 在已有Android工程中集成flutter,可以使用AndroidStudio的new Flutter Module实现,方便快捷. 找到FlutterModule,一连串的next操作即可 创建完成后我们的项目中会多一个叫做flutter的module 并且在项目的setting.gradle文件中会

  • Flutter集成到已有iOS工程的方法步骤

    前言 之前写过一篇介绍flutter集成到Android工程的文章,这次总结记录一下自己把flutter集成到iOS的流程,以及遇到的问题以及和解决方法供大家参考. 创建flutter_module 要在iOS工程中集成flutter,首先我们需要创建一个flutter_module,创建的方法有两种: 使用Android studio创建 使用Android studio创建在上一篇新版Flutter集成到已有Android项目中有介绍,这里不再赘述. 使用flutter命令创建 在指定目录下

  • 如何在原有Android项目中快速集成React Native详解

    前言 RN经过一段时间发展,已经有充分数量的人尝试过了,就我身边就有几批,褒贬也不一: ① 做UI快 ② 还是有很多限制,不如原生Native ③ 入门简单,能让前端快速开发App ④ iOS&Android大部分代码通用 ⑤ code-push能做热更新,但是用不好依旧坑 ...... 在得到一些信息后,可以看出,要用RN高效率的做出比较不错的App是有可能的,单看投入度与最初设计是否合理,而且现在关于React Native的各种文档是相当丰富的,所以这个阶段想切入RN可能是一个不错的选择.

  • MobPush for Flutter集成准备

    目录 集成准备 iOS Android SDK API 回传用户隐私授权结果 (submitPrivacyGrantResult) 设置远程推送环境 设置远程推送环境 (setAPNsForProduction仅 iOS) 停止推送(stopPush) 重新打开推送服务(restartPush) 是否已停止接收推送(isPushStopped) 设置别名(setAlias) 获取别名(getAlias) 删除别名(deleteAlias) 添加标签(addTags) 获取标签(getTags)

  • 在Android项目中使用AspectJ的详细攻詻

    AOP 全称"Aspect Oriented Programming",面向切面编程,由于面向对象的思想要求高内聚,低耦合的风格,使模块代码间的可见性变差,对于埋点,日志输出等需求,就会变的十分复杂,如果手动编写代码,入侵性很大,不利于扩展,AOP应运而生. AspectJ AspectJ实际上是对AOP编程的实践,目前还有很多的AOP实现,如ASMDex,但笔者选用的是AspectJ. 使用场景 当我们需要在某个方法运行前和运行后做一些处理时,便可使用AOP技术.具体有: 统计埋点

  • Flutter集成高德地图并添加自定义Maker的实践

    目录 一.进入高德地图开放平台申请Key 二.yaml文件集成插件 目前地图开放平台三大巨头:高德.百度.腾讯基本都支持Flutter插件开发集成.从这里也能看出Flutter的生态在逐渐的完善.下面介绍下在Flutter项目集成高德地图的一些步骤和个人踩得一些坑. 一.进入高德地图开放平台申请Key Android端需要设置发布版本和调试版本SHA1值,这里可以通过AndroidStudio 自带工具获取, 点击会生成调式SHA1值.发布版本同理. 接着我们设置完SHA1值和包名之后点击提交即

  • 用Eclipse搭建Android开发环境并创建第一个Android项目(eclipse+android sdk)

    一.搭建Android开发环境 准备工作:下载Eclipse.JDK.Android SDK.ADT插件 1.安装和配置JAVA开发环境:  ①把准备好的Eclipse和JDK安装到本机上(最好安装在全英文路径下),并给JDK配置环境变量,其中JDK的变量值为JDK安装路径的根目录,如我的为:D:\Program Files\Java\jdk1.7.0_02: ②打开命令提示符(cmd),输入java -version命令,显示如下图则说明JAVA环境变量已经配置好了. 2.安装ADT插件: ①

  • android项目从Eclipse迁移到Android studio中常见问题解决方法

    (1)将Eclipse项目导入到Android studio 中出现9-patch image问题解决方法: 在build.gradle里添加以下两句: aaptOptions.cruncherEnabled = false aaptOptions.useNewCruncher = false 用来关闭Android Studio的PNG合法性检查的,直接不让它检查. (2)Android Studio 错误: 非法字符: '\ufeff' 解决方案|错误: 需要class, interface

  • Eclipse运行android项目报错Unable to build: the file dx.jar was not loaded from the SDK folder的解决办法

    由于最近通过SDK-Manager更新了build-tools,当要用到dx.jar这个包时,自动调用最新build-tools中dx.jar,但是运行Android项目时Console却提示: Failed to load C:\Program Files (x86)\android\android-sdk\build-tools\26.0.0-preview\lib\dx.jar Unable to build: the file dx.jar was not loaded from the

  • 完美解决android 项目jar包冲突的问题

    大家在做开发中竟然需要用到一些三方库 或者 需要集成三方的SDK开发包,尤其是项目特别庞大的时候,引用的三方的东西特别多,那么肯定会碰到一些jar包冲突的情况. 常见的情况有以下几种 1.项目自己引用jar包重复 2.项目中jar包和三方SDK 3.三方sdk之间都含有相同类 4.打包时候出现编译错误,出现冲突 1.项目自己引用jar包重复 com.android.dex.DexException: Multiple dex files define Landroid/support/v4/ac

随机推荐