1. 程式人生 > >Flutter與Android原生的互動

Flutter與Android原生的互動

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();
        }
      }
    });

預覽圖:
這裡寫圖片描述