zoukankan      html  css  js  c++  java
  • flutter 使用vs编辑windows插件

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

    2. win_testlibwin_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 );
    
  • 相关阅读:
    openlayers 学习笔记之1
    objective C 学习之02
    xcode 中 的工程模板
    xcode 创建项目 勾选 git 出现警告
    html+css复习之第3篇 | jquery | bootstrap
    html+css复习之第2篇 | javascript
    iOS开发系列之 itms-services 协议
    App store 如何使用 promo code | app store 打不开精品推荐和排行榜
    设计一组N个数,确定其中第k个最大值
    [搬运]如何在C++中实现多态性
  • 原文地址:https://www.cnblogs.com/ajanuw/p/13754865.html
Copyright © 2011-2022 走看看