这篇博客主要记录自己如何通过Flutter去与Android原生进行交换的记录!
Demo下载地址:https://download.csdn.net/download/hzqit520/13025644
下面截图主要标注交互的重点注意事项:
未交互的界面:
交互后的界面:
Flutter代码:
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter与Android交互',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(title: 'Flutter与Android交互'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
//方法渠道(唯一 一般包名与获取的什么用处来组合)需要与Android原生对应上
var methodChannel = const MethodChannel("/com.hzq.flutter_and_android/getData");
String result ="点击获取";
/*
* 获取数据
*/
void _getData() async {
try {
//getData 方法名
//传参 {"name": "小强", "age": 17}
String invokeMethod = await methodChannel.invokeMethod("getData", {"name": "小强", "age": 17});
setState(() {
result = invokeMethod;
});
} catch (e) {
result = e.toString();
print(e);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
InkWell(
child: Text("获取数据:$result"),
onTap: _getData,
),
],
),
),
);
}
}
Android代码:
package com.hzq.flutter_and_android
import android.content.Intent
import android.util.Log
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.PluginRegistry
import io.flutter.plugins.GeneratedPluginRegistrant.registerWith
class MainActivity : FlutterActivity() {
override fun configureFlutterEngine(flutterEngine : FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
//渠道
val methodChannel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger,
"/com.hzq.flutter_and_android/getData")
methodChannel.setMethodCallHandler { call, result ->
when (call.method) {
//判断方法名
"getData" -> {
//判断是否传参
if (call.arguments != null) {
val name = call.argument<String>("name")
val age = call.argument<Int>("age")
Log.e("hzq", "name-->$name")
Log.e("hzq", "age-->$age")
}
//回到到Flutter
result.success("Android -> Flutter 接收回调后返回值:小强")
}
//默认空回调
else -> result.notImplemented()
}
}
}
}