Android
去掉Actionbar
android:name="com.cheezgroup.tosharing.MainActivity"
android:theme="@style/Theme.AppCompat.NoActionBar"
MethodChannel
https://www.jianshu.com/p/1770ded8f50f
package com.cheezgroup.tosharing
import android.annotation.SuppressLint
import android.content.Intent
import android.os.Bundle
import androidx.annotation.NonNull
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import com.cheezgroup.tosharing.myapplication.R
import io.flutter.embedding.android.FlutterFragment
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.embedding.engine.FlutterEngineCache
import io.flutter.embedding.engine.dart.DartExecutor
import io.flutter.plugin.common.MethodChannel
/**
* @author zhengyongbo
* @since 2020-03-18 12:29
*/
const val FRAGMENT_TAG = "F"
const val ENGINE_ID = "a"
val FLUTTER_CHANNEL = "sample.flutter.io/test"
class MainActivity : AppCompatActivity() {
var flutterFragment: FlutterFragment? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sample)
initFlutterEngine()
attachFlutterFragment()
}
private fun initFlutterEngine(): FlutterEngine {
var flutterEngine = FlutterEngineCache.getInstance().get(ENGINE_ID)
if (null == flutterEngine) {
flutterEngine = FlutterEngine(this)
flutterEngine.navigationChannel.setInitialRoute("/")
flutterEngine.dartExecutor.executeDartEntrypoint(
DartExecutor.DartEntrypoint.createDefault()
)
FlutterEngineCache
.getInstance()
.put(ENGINE_ID, flutterEngine)
setMethodChannels(flutterEngine)
}
return flutterEngine
}
private fun attachFlutterFragment() {
if (null == flutterFragment) {
flutterFragment =
FlutterFragment.withCachedEngine(ENGINE_ID)
.shouldAttachEngineToActivity(true)
.build() as FlutterFragment
}
supportFragmentManager
.beginTransaction()
.add(R.id.flutter_fragment_container,
flutterFragment as Fragment,
FRAGMENT_TAG
).commit()
}
private fun setMethodChannels(flutterEngine: FlutterEngine) {
MethodChannel(flutterEngine.dartExecutor, FLUTTER_CHANNEL).setMethodCallHandler { call, result ->
when (call.method) {
"getAcivityResult" -> {
val params = HashMap<String, String>()
params.put("s", "sssss")
result.success(params)
}
else -> result.notImplemented()
}
}
}
override fun onPostResume() {
super.onPostResume()
flutterFragment!!.onPostResume()
}
@SuppressLint("MissingSuperCall")
override fun onNewIntent(@NonNull intent: Intent) {
flutterFragment!!.onNewIntent(intent)
}
override fun onBackPressed() {
flutterFragment!!.onBackPressed()
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<String?>,
grantResults: IntArray
) {
flutterFragment!!.onRequestPermissionsResult(
requestCode,
permissions,
grantResults
)
}
override fun onUserLeaveHint() {
flutterFragment!!.onUserLeaveHint()
}
override fun onTrimMemory(level: Int) {
super.onTrimMemory(level)
flutterFragment!!.onTrimMemory(level)
}
}
flutter
static const MethodChannel methodChannel = MethodChannel("sample.flutter.io/test");
Future<void> _getActivityResult() async {
String result;
try {
final Map<dynamic, dynamic> map = await methodChannel.invokeMethod('getAcivityResult'); //通过getAcivityResult传递方法名称,类似于广播中的action
result = 'getAcivityResult : ${map["s"]} ';
print("ssss"+result);
} on PlatformException {
result = 'Failed to get battery level.';
}
setState(() {
// _result = result;
});
}