Flutter 与win32 交互
Flutter依赖于传递消息的方式使用特定平台的API:
1.应用程序Flutter通过平台通道向宿主发送消息
2.宿主监听平台通道并接受消息,之后可以使用平台API,并将响应发送回客户端。
注 :消息和响应以异步形式进行传递,以确保用户界面保持响应
Flutter定义了三种Channel
BasicMessageChannel:用于传递字符串和半结构化的信息
MethodChannel:用于传递方法调用
EventChannel:用于数据流的通信
这里介绍通过MethodChannel通信的示例:
Flutter端
class _MyHomePageState extends State<MyHomePage> {final testChannel = const MethodChannel("name"); //name为通道名要保证两端通道名称相等Future<void> test() async {return await testChannel.invokeMethod("popMessage");//invokeMthod调用方法可以添加参数}@overrideWidget build(BuildContext context) {return Scaffold(body: Center(child: RaisedButton(child: Text("test"),onPressed: () {test(); //点击按钮调用windows平台方法},),),);}
}
windows平台(vs)
在vs中打开build文件夹下.sln文件,在flutter_windows.cpp文件中添加以下代码
void configMethodChannel(flutter::FlutterEngine* engine){std::string testChannel = "name"; //保持两端通道名称相等const flutter::StandardMethodCodec& codec = flutter::StandardMethodCodec::GetInstance();flutter::MethodChannel method_channel_(engine->messenger(), testChannel, &codec);method_channel_.SetMethodCallHandler([](const auto& call, auto result) { //消息处理器if (call.method_name().compare("popMessage") == 0) {test(); //调用popMessage方法时执行的函数result->Success(); //可将函数返回值通过参数返回给Flutter端 }else {std::cout << "fail" << std::endl;}});
}
添加之后在onCreate方法中调用上述方法
bool FlutterWindow::OnCreate() {if (!Win32Window::OnCreate()) {return false;}RECT frame = GetClientArea();flutter_controller_ = std::make_unique<flutter::FlutterViewController>(frame.right - frame.left, frame.bottom - frame.top, project_);if (!flutter_controller_->engine() || !flutter_controller_->view()) {return false;}RegisterPlugins(flutter_controller_->engine());run_loop_->RegisterFlutterInstance(flutter_controller_->engine());SetChildContent(flutter_controller_->view()->GetNativeWindow());configMethodChannel(flutter_controller_->engine()); //调用添加的方法return true;
}
方法名对应执行的操作
void test() {MessageBox(NULL, TEXT("这是测试对话框"), TEXT("你好"), MB_ICONINFORMATION | MB_YESNO);
}
Flutter 与win32 交互相关推荐
- flutter和原生交互
一.Flutter中使用Android Studio打开原生文件 选中Android目录--右键--选中flutter---Open for Editing in Android Studio 问题1 ...
- 阿衰java免费版_flutter plugin之路:flutter与原生交互传值OC/java版(一)
说在前头:flutter虽然很牛掰,但是目前很多功能或者插件的实现其实还是需要通过原生来实现,然后通过flutter和原生的交互传值实现数据的交换. -本篇是flutter调用原生方法,然后原生执行完 ...
- 包红b2c模块 flutter与原生交互
一.flutter提供的FlutterMethodChanel与原生(ios&android)进行交换 flutter与原生交互图: ios注册flutter调用通道 //oc 注册flutt ...
- Android 集成 Flutter 及通信交互详解
欢迎大家关注[跨平台开发那些事]公众号,定期推送跨平台开发技术实践. 前不久开源了用Flutter开发的一个音视频类App客户端,欢迎大家star, fork. ⚠️ 项目地址:https://git ...
- Flutter开发之——交互组件-Slider
一 概述 本文介绍Flutter中的滑块组件 Slider:只有一个滑块,获取滑动后位置的值 RangeSlider:有两个滑块,左右滑动后,获取区间的值 CupertinoSlider:仿IOS风格 ...
- Flutter 与 原生交互(Android),安卓移动开发背景换色
*/ public static String CHANNEL = "com.mmd.flutterapp/plugin"; private static String ACTIO ...
- Flutter 与 原生交互(Android),关于Android开发的面试经验总结
接收 */ void receiveMessage(){ messageChannel.setMessageHandler((message) async{ print(message); retur ...
- 第一章 常见跨平台解决方案及Flutter架构
近些年来,不断的有前端跨平台方案涌现出来,比如基于WebView的Cordova,还有渲染成原生控件的Reactive.Weex等,那么,这些跨平台方案有什么通用的实现思路呢,而Flutter的设计思 ...
- Flutter学习指南:文件、存储和网络
Flutter学习指南 交互.手势和动画 UI布局和控件 熟悉Dart语言 编写第一个应用 开发环境搭建 本篇文章我们先学习 Flutter IO 相关的基础知识,然后在 Flutter学习指南:交互 ...
最新文章
- 关联规则概念、啤酒加尿布引出购物篮分析、频繁项集、支持度+置信度+提升度
- 虚幻UE4常见问题最全集合
- 076_浏览器对象模型
- 【IT资讯】TIOBE - 2020年8月编程语言排行
- java设计模式之责任链模式以及在java中作用
- 虚拟机linux挂载光盘显示:mount: you must specify the filesystem type
- 【bzoj2060】[Usaco2010 Nov]Visiting Cows拜访奶牛 树形dp
- Grub2中文指南4---开机影像和主题
- Spring学习总结(20)——Spring加载多个项目properties配置文件问题解决
- python函数定义及调用-python 中函数的定义以及调用先后顺序问题
- Runtime之方法
- the third assignment of software testing
- 9. Javascript 表达式
- BZOJ3998: [TJOI2015]弦论【SAM】
- 一、从0开始——黑客学习路线
- 学计算机的学数学建模课吗,为什么数学建模与数学实验会进入大学课堂
- echarts制作迁徙图
- 游戏加速外挂的原理是什么 ?
- Windows下Python的安装与配置
- 网易 产品策划( 杭州研究员) 笔试题解