91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

新版Flutter集成到已有Android項目的實現

發布時間:2020-10-10 19:41:12 來源:腳本之家 閱讀:162 作者:一禪小和尚 欄目:移動開發

FlutterSDK升級后,我們發現不能按照原來的方式集成到已有Android項目中了,因為沒有了Flutter這個類,通過閱讀源碼我找到了新的使用方式。

一、創建Flutter Module

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

新版Flutter集成到已有Android項目的實現

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

新版Flutter集成到已有Android項目的實現

創建完成后我們的項目中會多一個叫做flutter的module

新版Flutter集成到已有Android項目的實現

并且在項目的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項目的實現的文章就介紹到這了,更多相關Flutter集成到已有Android項目內容請搜索億速云以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持億速云!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湖南省| 社旗县| 重庆市| 徐州市| 阿尔山市| 鄂托克前旗| 法库县| 泰宁县| 策勒县| 兴海县| 永丰县| 大理市| 鄂托克前旗| 萨迦县| 蓝田县| 龙游县| 山东省| 紫金县| 会昌县| 松溪县| 无棣县| 奉化市| 清远市| 独山县| 东兰县| 遂宁市| 婺源县| 收藏| 南宁市| 云安县| 阿鲁科尔沁旗| 泰顺县| 通州区| 晋宁县| 桦南县| 临泽县| 宣城市| 肃北| 揭东县| 北安市| 六安市|