Flutter与Android原生的交互

版权声明:本文为博主原创文章,未经博主允许不得转载的哦=。= https://blog.csdn.net/qq_15602635/article/details/80879328

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

预览图:
这里写图片描述

代码 github: https://github.com/PortgasAce/FlutterInteractionDemo

阅读更多
换一批

没有更多推荐了,返回首页