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 );
    
  • 相关阅读:
    loj6158 A+B Problem (扩展KMP)
    2017CodeM初赛B场
    Codeforces Round #421(div 2)
    CF821E(多次矩阵快速幂)
    Codechef-ANCESTOR(树套树/CDQ分治)
    Codechef-BLACKCOM(树形背包dp)
    Codechef-CHEFPRAD(找事件点+贪心)
    洛谷 p3391
    luogu p3369
    LOJ10082
  • 原文地址:https://www.cnblogs.com/ajanuw/p/13754865.html
Copyright © 2011-2022 走看看