1.新特性
- 支持Flutter 1.5
- 從老版的復(fù)用FlutterView裁着,到新版的創(chuàng)建新的實(shí)例
- 新版創(chuàng)建新的的實(shí)例Flutter英古,可以避免白屏帅戒,閃屏,黑屏等現(xiàn)象
- 推薦使用ContainerLifeCycle observer來(lái)監(jiān)聽(tīng)APP的生命周期
- 移除了xservice通信插件
2.主要的API變化
IPlatform
移除一下代碼
Activity getMainActivity();
boolean startActivity(Context context,String url,int requestCode);
Map getSettings();
新增加
void registerPlugins(PluginRegistry registry) 方法
void openContainer(Context context,String url,Map<String,Object> urlParams,int requestCode,Map<String,Object> exts);
void closeContainer(IContainerRecord record, Map<String,Object> result, Map<String,Object> exts);
IFlutterEngineProvider engineProvider();
int whenEngineStart();
這個(gè)Api變化主要是在Application初始化的時(shí)候的修改
以上是Flutter_boost github上面的說(shuō)明昧港,具體可以查看
3.接入指南
接入的方式主要是在V0.0.420版本上面做的修改擎椰,V0.0.420的接入方式可以參考我之前的文章
舊版本 Application類(lèi)的修改
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
FlutterBoostPlugin.init(new IPlatform() {
@Override
public Application getApplication() {
return MyApplication.this;
}
/**
* get the main activity, this activity should always at the bottom of task stack.
*/
@Override
public Activity getMainActivity() {
return MainActivity.sRef.get();
}
@Override
public boolean isDebug() {
return false;
}
/**
* start a new activity from flutter page, you may need a activity router.
*/
@Override
public boolean startActivity(Context context, String url, int requestCode) {
return PageRouter.openPageByUrl(context,url,requestCode);
}
@Override
public Map getSettings() {
return null;
}
});
}
}
可以繼承FlutterApplication,直接使用创肥,不繼承FlutterApplication 的話需要在使用Flutter的Activity中onCreate加入 FlutterMain.startInitialization(this);
如下所示
@CallSuper
public void onCreate() {
FlutterMain.startInitialization(this);
super.onCreate();
}
其實(shí)對(duì)應(yīng)的FlutterApplication是很簡(jiǎn)單的达舒,主要還是在onCreate中
public class FlutterApplication extends Application {
private Activity mCurrentActivity = null;
public FlutterApplication() {
}
@CallSuper
public void onCreate() {
super.onCreate();
FlutterMain.startInitialization(this);
}
public Activity getCurrentActivity() {
return this.mCurrentActivity;
}
public void setCurrentActivity(Activity mCurrentActivity) {
this.mCurrentActivity = mCurrentActivity;
}
}
新版本 Application類(lèi)的修改
public class MyApplication extends FlutterApplication {
@Override
public void onCreate() {
super.onCreate();
FlutterBoost.init(new Platform() {
@Override
public Application getApplication() {
return MyApplication.this;
}
@Override
public boolean isDebug() {
return true;
}
@Override
public void openContainer(Context context, String url, Map<String, Object> urlParams, int requestCode, Map<String, Object> exts) {
PageRouter.openPageByUrl(context,url,urlParams,requestCode);
}
@Override
public IFlutterEngineProvider engineProvider() {
return new BoostEngineProvider(){
@Override
public BoostFlutterEngine createEngine(Context context) {
return new BoostFlutterEngine(context, new DartExecutor.DartEntrypoint(
context.getResources().getAssets(),
FlutterMain.findAppBundlePath(context),
"main"),"/");
}
};
}
@Override
public int whenEngineStart() {
return IMMEDIATELY;
}
});
}
}
移除和新增代碼,前面講了叹侄,這里主要講一下whenEngineStart()函數(shù)巩搏,其返回值有兩個(gè)
int IMMEDIATELY = 0; //立即啟動(dòng)引擎
int ANY_ACTIVITY_CREATED = 1; //當(dāng)有任何Activity創(chuàng)建時(shí),啟動(dòng)引擎
官方demo給的默認(rèn)值是ANY_ACTIVITY_CREATED 創(chuàng)建Activity 都會(huì)啟動(dòng),主要是控制引擎的初始化時(shí)機(jī)
engineProvider()返回一個(gè)Flutter引擎提供者圈膏,BoostEngineProvider塔猾,主要看其內(nèi)部的createEngine()方法
@Override
public BoostFlutterEngine createEngine(Context context) {
return new BoostFlutterEngine(context, new DartExecutor.DartEntrypoint(
context.getResources().getAssets(),
FlutterMain.findAppBundlePath(context),
"main"),"/");
}
這里大致講一下其中的main字符,這個(gè)主要是在BoostFlutterEngine內(nèi)部創(chuàng)建引擎的時(shí)候稽坤,設(shè)置對(duì)應(yīng)的Flutter 執(zhí)行的main函數(shù)也就是Flutter代碼的執(zhí)行的入口丈甸,斜杠主要是初始化路由用的
4.Flutter混合庫(kù)函數(shù)升級(jí)Flutter_boost
修改版本信息v0.1.52,最新版
移除
FlutterBoost.handleOnStartPage();
打開(kāi)頁(yè)面不帶參數(shù)
FlutterBoost.singleton.openPage("second", {}, animated: true);
<!--修改成-->
FlutterBoost.singleton.open("second")
打開(kāi)頁(yè)面帶參數(shù)
FlutterBoost.singleton.openPage("sample://nativePage", {
"query": {"aaa": "bbb"}
}),
<!--修改成-->
FlutterBoost.singleton.open("sample://nativePage", urlParams:{
"query": {"aaa": "bbb"}
}),
關(guān)閉頁(yè)面
FlutterBoost.singleton.closePageForContext(context);
<!--修改成-->
BoostContainerSettings settings = BoostContainer.of(context).settings;
FlutterBoost.singleton.close(settings.uniqueId,result: {"result":"data from second"});