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. setTimeout、Promise、Async/Await 的区别

    事件循环中分为宏任务队列和微任务队列其中setTimeout的回调函数放到宏任务队列里,等到执行栈清空以后执行promise.then里的回调函数会放到相应宏任务的微任务队列里,等宏任务里面的同步代码 ...

  2. 洛谷P4180

    被教练安排讲题 可恶 这道题我是十月初上课时花了一下午做出来的,当时连倍增都不会,过程比较困难,现在看看还可以 本来想口胡一发,后来想了想可能以后要用,还是写成文章吧 Description 求一棵严 ...

  3. how2j SpringMVC学习心得

    http://how2j.cn/k/springmvc/springmvc-form/618.html 注意 addProduct.jsp 是放在了WebContent(即web目录)下,访问的时候, ...

  4. react报错 TypeError: Cannot read property 'setState' of undefined

    代码如下: class test extends Component { constructor(props) { super(props); this.state = { liked: false ...

  5. Python3爬取猫眼电影信息

    Python3爬取猫眼电影信息 import json import requests from requests.exceptions import RequestException import ...

  6. ScalikeJDBC,操作mysql数据,API

    ScalikeJDBC,操作mysql数据,API 一.构建maven项目,添加pom.xml依赖 二.resource文件下创建application.conf文件,并配置以下内容 三.操作mysq ...

  7. Tomcat 核心组件 Connector

    Connector是Tomcat的连接器,其主要任务是负责处理浏览器发送过来的请求,并创建一个Request和Response的对象用于和浏览器交换数据,然后产生一个线程用于处理请求,Connecto ...

  8. OpenStack (云计算与openstck简介)

    云计算 什么是云计算 云计算是一种按使用量付费的模式,这种模式提供可用的,便捷的,按需的网络访问,通过互联网进入可配置的计算资源共享池(资源包括,计算,存储,应用软件和服务) 云计算的特征 易于管理: ...

  9. 使用VisualStudio直接运行简单的C#语句

    场景 经常有这样的需求, 想要测试一些简单的C#语法, 或者测试一下 文件 目录 操作相关的Api, 通常的做法是建立一个C#控制台项目, 然后写代码测试, 但是这样的做法对测试简单的语法和Api来说 ...

  10. SpringMVC数据校验并通过国际化显示错误信息

    目录 SpringMVC数据校验并通过国际化显示错误信息 SpringMVC数据校验 在页面中显示错误信息 通过国际化显示错误信息 SpringMVC数据校验并通过国际化显示错误信息 SpringMV ...