1. 创建插件
mkdir win_test && cd win_test
flutter create -t plugin --platforms windows ./
  1. 找到win_test\example\build\windows\plugins\win_test\win_test_plugin.sln使用vs打开编辑

  2. win_test\lib\win_test.dart中编写Dart Api

一个函数示例

win_test.dart:

class WinTest {
static const MethodChannel _channel = const MethodChannel('win_test'); ///
///## Example
///```dart
///print( await WinTest.hello("hello world", "msg", 0) );
///```
///
static Future<int> hello(String content, String title, int uType) async {
return await _channel.invokeMethod('hello', [content, title, uType]);
}
}

win_test_plugin.cpp:

#include <iostream>

using namespace std;

void WinTestPlugin::HandleMethodCall(
const flutter::MethodCall<flutter::EncodableValue> &method_call,
unique_ptr<flutter::MethodResult<flutter::EncodableValue>> result) { if ( method_call.method_name().compare("hello") == 0 )
{
const auto* arguments = get_if<flutter::EncodableList>(method_call.arguments());
if (!arguments)
{
result->Error(0);
return;
} auto lpText = arguments->at(0);
auto lpCaption = arguments->at(1);
auto uType = arguments->at(2);
result->Success(
MessageBoxA(0, get<string>(lpText).c_str(), get<string>(lpCaption).c_str(), get<int>(uType))
);
}
result->NotImplemented();
}

处理单个参数

_channel.invokeMethod('hello', 10);
auto* uFlags = get_if<int>(mc.arguments());

发送map返回list

    print(await _channel.invokeMethod(
'hello',
{'a': 1, 'b': 'hello world'},
)); // [1, hello world]
    auto* arguments = get_if<flutter::EncodableMap>(method_call.arguments());
if (!arguments)
{
result->Error("arguments error");
return;
}
auto* a = get_if<int>(&(arguments->find(flutter::EncodableValue("a"))->second));
auto* b = get_if<string>(&(arguments->find(flutter::EncodableValue("b"))->second)); auto r = flutter::EncodableList();
r.push_back( *a );
r.push_back( *b );
result->Success(r);

返回Map

    print(
await _channel.invokeMethod(
'hello',
{'a': 1, 'b': 'hello world'},
)
); // {a_v: 1, b_v: hello world}
    auto* arguments = get_if<flutter::EncodableMap>(method_call.arguments());
if (!arguments)
{
result->Error("arguments error");
return;
}
auto* a = get_if<int>(&(arguments->find(flutter::EncodableValue("a"))->second));
auto* b = get_if<string>(&(arguments->find(flutter::EncodableValue("b"))->second)); auto r = flutter::EncodableMap::map();
r.insert(pair<flutter::EncodableValue, flutter::EncodableValue>(flutter::EncodableValue("a_v"), *a));
r.insert(pair<flutter::EncodableValue, flutter::EncodableValue>(flutter::EncodableValue("b_v"), flutter::EncodableValue(b->c_str())));
result->Success( r );

flutter 使用vs编辑windows插件的更多相关文章

  1. 在 Flutter 中使用 TensorFlow Lite 插件实现文字分类

    如果您希望能有一种简单.高效且灵活的方式把 TensorFlow 模型集成到 Flutter 应用里,那请您一定不要错过我们今天介绍的这个全新插件 tflite_flutter.这个插件的开发者是 G ...

  2. 谷歌发布Flutter Alpha:支持Windows

    老孟导读:Windows来了,Mac.Linux.Web还远吗? 本文翻译自https://medium.com/flutter/announcing-flutter-windows-alpha-33 ...

  3. 咏南跨平台中间件支持LINUX和WINDOWS插件架构

    咏南跨平台中间件支持LINUX和WINDOWS插件架构

  4. Flutter Toast消息提示框插件

    Flutter Toast消息提示框插件 在开发flutter项目中,想必大家肯定会用到toast消息提示,说到这里, 大家肯定会想到https://pub.dev/ 插件库, 但是插件市场上有太多类 ...

  5. flutter 使用Android studio编辑kt插件

    使用android studio打开/example/android 文件即可

  6. win7系统下flutter环境搭建+AndroidStudio编译插件

    flutter学习网址:https://flutter-io.cn/ ----------------------------------------------------------------- ...

  7. JavaScript- jquery easyui 可编辑表格插件 easyui.editgrid

    最近项目前端使用 jquery+easyui来做,用了几个月,觉得easyui是一个很不错的开源前端UI框架, 虽然偶尔会遇到一些小问题,但是凭借多年前端开发的实力积累 都一一解决了,其中比较典型的就 ...

  8. jQuery插件之jquery editable plugin--点击编辑文字插件

    jeditable是一个jquery插件,它的优点是可以就地编辑,并且提交到服务器处理,是一个不可多得的就地编辑插件.(注: 就地编辑,也有称即时编辑?一般的流程是这样的,当用户点击网页上的文字时,该 ...

  9. Jeditable 点击编辑文字插件

    Jeditable - jQuery就地编辑插件使用   jeditable是一个jquery插件,它的优点是可以就地编辑,并且提交到服务器处理,是一个不可多得的就地编辑插件.(注: 就地编辑,也有称 ...

随机推荐

  1. 【Python网络编程】epoll用法

    epoll发展进程 此处添加一下select.poll历程及其优缺点 原理 使用步骤 Create an epoll object--创建1个epoll对象 Tell the epoll object ...

  2. Shell 简单入门教程

    大数据开发岗为什么要学习Shell呢?1)需要看懂大数据运维岗人员编写的Shell程序.2)偶尔会编写一些简单Shell程序来管理集群.提高开发效率 艺多不压身 Shell是一个命令行解释器,它接受应 ...

  3. 像羽毛一样轻的MVVMLight(一)(MVVM 和 MVVMLight简介)

    致敬 在此致敬翁智华大佬,感谢大佬为后辈们写下如此详细的文档,本文将在原文基础上添加些自己的理解,希望这样优秀的文档广为流传. 原文请参考 https://www.cnblogs.com/wzh201 ...

  4. vim 查找并替换多个匹配字符

    通常我们在使用vim的使用需要查找文档中是否含有需要的字符 1.vim 1.txt进入文档编辑 2.输入/键,再输入需要查找的字符,或者输入?键再输入需要查找的字符 3.查找到后可以enter进去,再 ...

  5. 【DB宝36】使用Docker分分钟搭建漂亮的prometheus+grafana监控

    目录 一.部署Prometheus+grafana环境 1.1.下载Prometheus+grafana镜像 1.2.创建镜像 1.3.浏览器访问 二.监控Linux主机 2.1.在被监控主机上部署n ...

  6. Kepware软件基本操作及使用Java Utgard实现OPC通信

    一.环境搭建(基于win10 64位专业版) 1.Kepware 的下载.安装及使用 https://www.cnblogs.com/ioufev/p/9366877.html 2.重要:OPC 和 ...

  7. JQuery——基本概念

    ###JQuery语法 格式:$(selector).action() 美元符号$本身是JQuery对象的缩写 选择符selector查询和查找HTML元素 Action执行对元素的操作 ###JQu ...

  8. 高性能Web框架

    不管 Web 前端架构运行机制还是 Web 后端架构中,网络是必不可少的且占分量很重.用户通过网络访问 Web 服务器,Web 后端架构中各种服务之间通过网络来进行通信和协作,网络是现代 Web 应用 ...

  9. Mysql 5.5升级5.8

    前言,因为升级跳板机,需要将mariadb 升级到10.2,也就是对应MySQL的5.8,废话不多说下面开始进行mariadb 5.5 的升级 Welcome to the MariaDB monit ...

  10. java+js正则表达式获取URL(带端口)域名

    function isPassUrl(remoteLoginUrl){ var flag = false; var passUrlStr = document.getElementById(" ...