新版Flutter集成到已有Android項目的實現(xiàn)
FlutterSDK升級后,我們發(fā)現(xiàn)不能按照原來的方式集成到已有Android項目中了,因為沒有了Flutter這個類,通過閱讀源碼我找到了新的使用方式。
一、創(chuàng)建Flutter Module
在已有Android工程中集成flutter,可以使用AndroidStudio的new Flutter Module實現(xiàn),方便快捷。

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

創(chuàng)建完成后我們的項目中會多一個叫做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
兩種使用方式,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不再支持已經沒有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的創(chuàng)建也可以直接使用默認的構造方法,這樣加載main.dart中的默認路由,即''/'',給出的示例代碼中我們通過調用FlutterFragment.withNewEngine().initialRoute("home").build()創(chuàng)建了新的NewEngineFragmentBuilder來構建指定路由的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() {
//隱藏進度條,顯示FlutterView
progress.setVisibility(View.GONE);
frameLayout.setVisibility(View.VISIBLE);
}
});
//創(chuàng)建dart代碼執(zhí)行器
DartExecutor executor=flutterView.getDartExecutor();
//執(zhí)行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項目的實現(xiàn)的文章就介紹到這了,更多相關Flutter集成到已有Android項目內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Android中實現(xiàn)長按照片彈出右鍵菜單功能的實例代碼
這篇文章主要介紹了Android中實現(xiàn)長按照片彈出右鍵菜單功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-01-01
Android為Tiny4412設備驅動在proc目錄下添加一個可讀版本信息的文件
今天小編就為大家分享一篇關于Android為Tiny4412設備驅動在proc目錄下添加一個可讀版本信息的文件,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12
Android自定義View實現(xiàn)兩種二維碼的掃描效果
這篇文章主要為大家詳細介紹了Android如何自定義View實現(xiàn)兩種二維碼的掃描效果,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2024-01-01
Android UI實現(xiàn)單行文本水平觸摸滑動效果
這篇文章主要為大家詳細介紹了Android UI實現(xiàn)單行文本水平觸摸滑動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-10-10
Android開發(fā)筆記之Android中數據的存儲方式(二)
我們在實際開發(fā)中,有的時候需要儲存或者備份比較復雜的數據。這些數據的特點是,內容多、結構大,比如短信備份等,通過本文給大家介紹Android開發(fā)筆記之Android中數據的存儲方式(二),對android數據存儲方式相關知識感興趣的朋友一起學習吧2016-01-01

