Flutter與Android原生的互動
阿新 • • 發佈:2019-01-28
Flutter釋出Preview版本後熱度持續上升,但是仍然有很多不足之處,所有前期還是採用與原生結合的混合開發,那就需要了解Flutter與原生的互動的一些方法。
原生啟動Flutter Activity
新建Flutter 專案預設啟動MainActivity,繼承自FlutterActivity,在AndroidManifest中可以看到intent-filter的配置。
思路:新建一個Android原生的Activity(SplashActivity),增加一個按鈕,啟動Flutter的MainActivity。
原生Activity,OnCreate程式碼
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
findViewById(R.id.go_flutter).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(SplashActivity.this , MainActivity.class);
SplashActivity.this.startActivity(intent);
}
});
}
配置AndroidManifest:將MainActivity的intent-fliter移到SplashActivity,這樣預設就啟動原生的Activity,有原生的Activity點選啟動Flutter的MainActivity。
<!--原生Activity-->
<activity android:name=".SplashActivity">
<intent-filter >
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
Flutter 啟動原生Activity
Flutter與原生的互動主要通過外掛的方式。
思路:在MainActivity中註冊外掛,在Widget中增加一個Button,點選後啟動原生的Activity。
外掛名為demo.plugin,處理方法interaction啟動原生Activity,其他不處理。
// 自定義外掛
String CHANNEL = "demo.plugin";
new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(new MethodCallHandler() {
@Override
public void onMethodCall(MethodCall call, Result result) {
if (call.method.equals("interaction")) {
Intent intent = new Intent(MainActivity.this, SplashActivity.class);
MainActivity.this.startActivity(intent);
result.success("success");
} else {
result.notImplemented();
}
}
});
預覽圖: