Channel实现Flutter与原生平台之间的双向通信
import 'package:flutter/services.dart';
// 定义方法通道名称
const String kShowToastMethod = 'toast/show';
// 在原生平台的代码中,定义一个方法处理接收到的消息
// 以下代码仅为示例,具体实现依赖于原生平台的语言
// Android 示例:在 MainActivity 或相应的 Activity 中
// public void showToast(String message) {
// Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
// }
// iOS 示例:在相应的 Swift 或 Objective-C 文件中
// func showToast(message: String) {
// let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert)
// alert.popoverParameter = nil
// alert.view.tintColor = UIColor.black
// self.window?.rootViewController?.present(alert, animated: true)
// DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
// alert.dismiss(animated: true)
// }
// }
// Flutter 端的 Dart 代码
class ToastChannel {
static const MethodChannel _channel = MethodChannel(kShowToastMethod);
// 显示Toast消息的静态方法
static Future<void> showToast(String message) async {
try {
await _channel.invokeMethod('showToast', <String, String>{'message': message});
} on PlatformException catch (e) {
print("平台通信错误: ${e.message}");
}
}
}
// 在 Flutter 的 Dart 代码中使用 ToastChannel
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// 当用户点击按钮时,调用 ToastChannel.showToast 显示 Toast
void _showToast(String message) {
ToastChannel.showToast(message);
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Flutter 通信示例')),
body: Center(
child: RaisedButton(
child: Text('显示Toast'),
onPressed: () => _showToast('Hello, Toast!'),
),
),
),
);
}
}
这段代码展示了如何在Flutter中创建一个简单的Toast通知系统,并展示如何与原生平台通过MethodChannel进行通信。在原生平台,你需要实现一个方法来处理接收到的消息,并显示Toast或类似的通知。在Flutter端,ToastChannel
类封装了与原生平台通信的细节,并提供了一个静态方法showToast
来调用原生方法显示Toast。
评论已关闭