Cooperation

简介

在日常开发中,一些端上复杂的业务逻辑需要在 Android 和 iOS 上各自实现一遍,这既浪费了开发资源,也极可能在细节处理上存在差异,导致在边界条件下出现不同效果。Cooperation 可以帮助开发者使用 Dart 编写逻辑,在不渲染 UI 的情况下即可在 Native 中直接调用,借助 Dart 和 Flutter 生态快速实现业务需求。

开始使用

0、准备

在开始前需要按照 Flutter 官方文档,创建一个 Flutter Module 项目,并将其接入到 Android 和 iOS 工程中。

1、初始化

Flutter 侧

入口建议和 UI 的默认入口(即main函数)分开,也可写在其他dart文件中。

如果我们想在其他项目中也可以使用已实现的逻辑,则可以创建一个 Flutter Plugin 项目并将逻辑写在里面,这样只要 Flutter Module 依赖该 Flutter Plugin 即可实现代码复用。

import 'package:cooperation/cooperation.dart';

@pragma('vm:entry-point')
entry() {
  Cooperation.instance.addHandler('m1', (arguments) async {
    return arguments?['platform'];
  });
}

Android 侧

初始化

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        ...
      	// 传入已创建好的flutterEngine
        Cooperation.install(engine)
      	// 或者传入enginegroup,可根据需要设置入口函数,默认入口为main
        Cooperation.install(this, engineGroup, entryPoint = "entry")
    }
}

调用

Cooperation.call("m1", mapOf("platform" to "Android"), object : MethodChannel.Result {
                override fun success(result: Any?) {
                    Toast.makeText(this@MainActivity, "success:$result", Toast.LENGTH_SHORT).show()
                }

                override fun error(errorCode: String?, errorMessage: String?, errorDetails: Any?) {
                    Toast.makeText(this@MainActivity, "error:$errorCode", Toast.LENGTH_SHORT).show()
                }

                override fun notImplemented() {
                    Toast.makeText(this@MainActivity, "notImplemented", Toast.LENGTH_SHORT).show()
                }
            })

iOS侧

初始化

// 传入已创建好的flutterEngine
Cooperation.instance.install(engine)
// 或者传入enginegroup,可根据需要设置入口函数,默认入口为main
Cooperation.instance.install(engineGroup: engineGroup, entryPoint: "entry")

调用

Cooperation.instance.call(method: "m1", arguments: ["platform": "iOS"], result: { (result) in
            if result is FlutterError {
                print("error: \(result)")
            } else if result as? NSObject == FlutterMethodNotImplemented {
                print("notImplemented: \(result)")
            } else {
                print(result)
            }
        })

Libraries

cooperation