新版Flutter集成到已有Android項(xiàng)目的實(shí)現(xiàn)
FlutterSDK升級(jí)后,我們發(fā)現(xiàn)不能按照原來(lái)的方式集成到已有Android項(xiàng)目中了,因?yàn)闆](méi)有了Flutter這個(gè)類,通過(guò)閱讀源碼我找到了新的使用方式。
一、創(chuàng)建Flutter Module
在已有Android工程中集成flutter,可以使用AndroidStudio的new Flutter Module實(shí)現(xiàn),方便快捷。
找到FlutterModule,一連串的next操作即可
創(chuàng)建完成后我們的項(xiàng)目中會(huì)多一個(gè)叫做flutter的module
并且在項(xiàng)目的setting.gradle文件中會(huì)自動(dòng)添加如下幾行代碼,
setBinding(new Binding([gradle:this])) evaluate( new File( settingsDir, 'flutter_module/.android/include_flutter.groovy' ) ) include ':flutter_module'
最后我們只需在app的build.gradle中引用這個(gè)flutter模塊即可
implementation project(path: ':flutter')
二、使用Flutter
兩種使用方式,F(xiàn)lutterView和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不再支持已經(jīng)沒(méi)有Flutter類,不再支持諸如Flutter.createView()、Flutter.createFragment()等用法,通過(guò)閱讀其源碼我們可以找到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的創(chuàng)建也可以直接使用默認(rèn)的構(gòu)造方法,這樣加載main.dart中的默認(rèn)路由,即''/'',給出的示例代碼中我們通過(guò)調(diào)用FlutterFragment.withNewEngine().initialRoute("home").build()創(chuàng)建了新的NewEngineFragmentBuilder來(lái)構(gòu)建指定路由的FlutterFragment。
2、使用FlutterView
FlutterView的創(chuàng)建同樣不能使用老版本的方法了,新版本的使用方法代碼如下:
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); //創(chuàng)建FlutterView FlutterView flutterView=new FlutterView(this); //創(chuàng)建FlutterView首幀渲染完成監(jiān)聽 flutterView.addFirstFrameListener(new FlutterView.FirstFrameListener() { @Override public void onFirstFrame() { //隱藏進(jìn)度條,顯示FlutterView progress.setVisibility(View.GONE); frameLayout.setVisibility(View.VISIBLE); } }); //創(chuàng)建dart代碼執(zhí)行器 DartExecutor executor=flutterView.getDartExecutor(); //執(zhí)行main.dart中的main函數(shù) 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>
效果如下圖:
到此這篇關(guān)于新版Flutter集成到已有Android項(xiàng)目的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Flutter集成到已有Android項(xiàng)目?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android Listview中顯示不同的視圖布局詳解及實(shí)例代碼
這篇文章主要介紹了Android Listview中顯示不同的視圖布局詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02android實(shí)現(xiàn)RecyclerView列表單選功能
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)RecyclerView列表單選功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07Android實(shí)現(xiàn)生成二維碼并保存到相冊(cè)
這篇文章主要介紹了如何利用Android實(shí)現(xiàn)二維碼的生成,并且保存到本地相冊(cè)。文中的示例代碼講解詳細(xì),感興趣的小伙伴快跟隨小編學(xué)習(xí)一下2022-04-04Android Kotlin環(huán)境使用ButterKnife的方法
本篇文章主要介紹了Android Kotlin環(huán)境使用ButterKnife的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03Android開發(fā)模仿qq視頻通話懸浮按鈕(實(shí)例代碼)
這篇文章主要介紹了Android開發(fā)模仿qq視頻通話懸浮按鈕功能的實(shí)例代碼,需要的的朋友參考下2017-02-02Android仿今日頭條滑動(dòng)頁(yè)面導(dǎo)航效果
這篇文章主要為大家詳細(xì)介紹了Android仿今日頭條滑動(dòng)頁(yè)面導(dǎo)航效果的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-01-01Android監(jiān)聽輸入法彈窗和關(guān)閉的實(shí)現(xiàn)方法
用過(guò)ios的都知道ios上輸入法關(guān)閉的同時(shí)會(huì)自動(dòng)關(guān)閉輸入框,那么在android上如何實(shí)現(xiàn)監(jiān)聽輸入法彈出和關(guān)閉呢?接下來(lái)通過(guò)本文給大家分享一種可靠的實(shí)現(xiàn)方式2016-11-11