Flutter发布Preview版本后热度持续上升,但是仍然有很多不足之处,所有前期还是采用与原生结合的混合开发,那就需要了解Flutter与原生的交互的一些方法。
新建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。
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(); } } });
预览图: