混合开发模式
工程模式
创建项目
消息通道
- demo中插入一个 initState
Code -> Generate -> Override Methods
消息道通例子
initState() 添加一个 super.initState()
私有 添加下划线 _
打开安卓项目
因为这是flutter 项目 所以不知道你要写安卓 所以 我们可以单独打开这个flutter 下面的android项目。
androidStudio自动修复好
单引号 双引号
谷歌推荐用单引号 里面有单引号 外面双引号
格式化
Command + option + l
编写完项目执行
flutter clean
flutter pub get 没依赖可以不执行
flutter run
用安卓模拟器运行
Error: ADB exited with exit code 1
Performing Streamed Install
adb: failed to install /Users/wangpanpan/Desktop/myflutter/douyin/first/build/app/outputs/flutter-apk/app.apk: Failure [INSTALL_FAILED_INSUFFICIENT_STORAGE]
Error launching application on sdk gphone64 arm64.
直接运行Android 也报错
02/20 14:19:01: Launching 'app' on Pixel 2 (Edited) API 33.
Installation did not succeed.
The application could not be installed: INSTALL_FAILED_INSUFFICIENT_STORAGE
List of apks:
[0] '/Users/wangpanpan/Desktop/myflutter/douyin/first/build/app/outputs/apk/debug/app-debug.apk'
The device needs more free storage to install the application (extra space is needed in addition to APK size).
Retry
Failed to launch an application on all devices
BasicMessageChannel
用于传递字符串和半结构化的信息
flutter 接受 发送 都是对原生交互 不是flutter自身处理哦
dart代码
String? _message;
static const _channel = BasicMessageChannel("messageChannel", StringCodec());
接受信息 ACK是确认的意思
@override
void initState() {
super.initState();
//_channel.setMessageHandler((message) => null)
// 注册 接受回调 并且返回信息
_channel.setMessageHandler((message) async {
setState(() {
_message = message;
});
return 'ACK from dart';
});
}
发送信息
Future<void> _sendMessage() async {
String? message = await _channel.send("Hello Android");
print("Send message: $message");
}
安卓原生
class MainActivity : FlutterActivity() {
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
// 1.初始化BasicMessageChannel,并传入名称,名称需要和Dart完全一致
val channel = BasicMessageChannel(
flutterEngine.dartExecutor,
"messageChannel",
StringCodec.INSTANCE
)
// 2.通过BasicChannel实例注册接受回调,并且返回ACK
channel.setMessageHandler { message, reply ->
Log.d("message", "Android receive message: $message")
reply.reply("ACK from Android")
}
Handler(Looper.getMainLooper()).postDelayed({
// 3.通过BasicChannel发送消息给Dart
channel.send("Hello from Android")
}, 1000)
}
}
安卓代码调试 run
- 首先就是启动的时候 安卓原生给flutter 发送 Hello from Android
- 点击按钮 然后安卓这边收到消息
安卓收到 flutter 发送的 hello android
flutter 调试 run
点击按钮 给原生发送消息
EventChannel
用于数据流(event streams)的通信
static const _channel1 = EventChannel("messageChannel1");
_channel1.receiveBroadcastStream().listen((event) {
print("Receive event: $event");
setState(() {
_message = event;
});
}, onError: (error) {
print("Receive error: $error");
}, cancelOnError: true);
val channel1 = EventChannel(flutterEngine.dartExecutor.binaryMessenger, "messageChannel1")
MethodChannel
用于传递方法调用(method invocation)